UNPKG

sprinque-js-sdk-wip

Version:

UI kit to implement Pay by Invoice with Sprinque

2 lines 58.1 kB
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@fullstory/browser"),require("i18next"),require("b2b-sprinque-tools"),require("intl-tel-input")):"function"==typeof define&&define.amd?define(["exports","@fullstory/browser","i18next","b2b-sprinque-tools","intl-tel-input"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).Sprinque={},e.FullStory,e.i18next,e.b2bSprinqueTools,e.intlTelInput)}(this,(function(e,n,t,r,s){"use strict";function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:function(){return e[t]}})}})),n.default=e,Object.freeze(n)}var o=a(n),d=i(t),l=i(s);const c="sprinque-modal",u="sp-merchant-buyer-id",p="sp-buyer-id",m="https://d2f2ha363kdzm.cloudfront.net/sprinque-logo-dark-blue.png",b={address_line1:"Nieuwezijds Voorburgwal 296 102",address_line2:"",city:"AMSTERDAM",country:"NL",zip_code:"1012RT"},g=["net7","net15","net30","net45","net60","net90"],v=".validation-error-from-api",y="#sp-country",h="#sp-company-name",f="#search-type",x="#search-type-by-name",w="#search-type-by-vat",q="#sp-reg-number",k="#sp-reg-number-asterisk",E="#billing-email",S="#reg-number-warning",A="#sp-form-step-1 .nav",$="#sp-address-line1",T="#sp-address-line2",I="#sp-address-city",C="#sp-address-zip",_="#sp-user-name",N="#sp-user-surname",B="#sp-user-email",j="#sp-user-phone",z="#otp-email-to",L=".sp-otp-digit",D="#order-total-amount",P=()=>{const e=document.getElementsByTagName("sprinque-modal")[0];e&&e.remove()},R=(e,n)=>n.querySelector(e).value,V=(e,n)=>{const t="true"===e;n.getElementById(f.replace("#","")).style.display=t?"inline-flex":"none",n.querySelector(`[for=${h.replace("#","")}]`).style.display=t?"none":"block"},O=(e,n)=>{const t=n.querySelector(v);t.style.display="block",t.innerHTML=e,setTimeout((()=>{t.style.display="none"}),1e4)};let F=0;const H=async(e,n,t,r="POST")=>{const s=n.querySelector('[class^=sprinque-step]:not([style*="display: none"]) .sprinque-ellipsis');s&&(s.style.display="block");const i=document.querySelector(c),a=null==i?void 0:i.getAttribute("token"),o=await fetch({testing:"https://api-testing.sprinque.com/api/v1/",production:"https://api.sprinque.com/api/v1/",sandbox:"https://api-sandbox.sprinque.com/api/v1/"}[null===(d=document.querySelector(c))||void 0===d?void 0:d.getAttribute("env")]+e,{method:r,body:JSON.stringify(t),headers:{"Content-type":"application/json; charset=UTF-8","X-Authorization":`Bearer ${a}`}});var d;const l=await o.json();if(s&&(s.style.display="none"),!o.ok){const s=await l;O((e=>{if(!e||!e.errors)return"Failed to parse backend error";let n="";return Object.entries(e.errors).forEach((([e,t])=>n+=`${e} > ${t.join(", ")} `)),n})(s),n);const a=null==i?void 0:i.getAttribute("getTokenUrl");if(401===o.status&&F<3)if(F+=1,a){const s=await fetch(`${a}`),{access:o}=await s.json();if(o)return null==i||i.setAttribute("token",o),H(e,n,t,r)}else O("Session expired",n)}return l},M="#e8e4e4",U="#ee3f75";let G;const J=/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,K=(e,n,t)=>{const r=t.querySelector(n),s={requiredFields:Boolean(r.value),emails:r.value.match(J),phones:(null==G?void 0:G.isValidNumber())||!1}[e];return r.style.borderColor=s?M:U,s},W=e=>{switch(e){case"requiredFields":return d.default.t("validation.fillAllFields");case"emails":return d.default.t("validation.invalidEmail");case"phones":return(e=>{var n,t,r;if(!e||!window.intlTelInputUtils)return"";const s=e.getValidationError();return s===(null===(n=null===intlTelInputUtils||void 0===intlTelInputUtils?void 0:intlTelInputUtils.validationError)||void 0===n?void 0:n.INVALID_COUNTRY_CODE)?d.default.t("validation.invalidCountryCode"):s===(null===(t=null===intlTelInputUtils||void 0===intlTelInputUtils?void 0:intlTelInputUtils.validationError)||void 0===t?void 0:t.TOO_SHORT)?d.default.t("validation.phoneIsShort"):s==(null===(r=null===intlTelInputUtils||void 0===intlTelInputUtils?void 0:intlTelInputUtils.validationError)||void 0===r?void 0:r.TOO_LONG)?d.default.t("validation.phoneIsLong"):d.default.t("validation.invalidPhone")})(G);default:return"Unknown validation error"}},Z=e=>{var n,t;const r=null===(n=e.querySelector(y))||void 0===n?void 0:n.value,s=e.querySelector(`#country-${r}`);return!s||!r||"true"===(null===(t=null==s?void 0:s.dataset)||void 0===t?void 0:t.isRegNumberRequired)},Y=(e,n)=>{let t=!0;const r=Z(n);for(const[s,i]of Object.entries((e=>({1:{requiredFields:e?[q,E]:[E],emails:[E]},2:{requiredFields:[$,"#sp-address-city","#sp-address-zip"]},3:{requiredFields:["#sp-user-name","#sp-user-surname",B,j],emails:[B],phones:[j]},4:{},5:{},6:{}}))(r)[e])){if(i.find((e=>!K(s,e,n)))){t=!1,X(e,s,n);break}}return t&&Q(e,n),t},X=(e,n,t)=>{t.querySelector(`.validation-error-${e}`).innerHTML=W(n)},Q=(e,n)=>{n.querySelector(`.validation-error-${e}`).innerHTML=""},ee=async(e,n,t)=>{const s=null==e?void 0:e.getElementById(h.replace("#","")),i=null==e?void 0:e.querySelector(A),a=null==e?void 0:e.getElementById("sprinque-businesses"),o=e.getElementById(y.replace("#","")),l=null==e?void 0:e.querySelector(q),c=await H("countries/",e,void 0,"GET");if(!Array.isArray(c))return;o.innerHTML=`<option value="" selected disabled>${d.default.t("business.selectCountry")}</option>`,c.filter((e=>"ACTIVE"===e.status)).sort(((e,n)=>e.code<n.code?-1:1)).forEach((e=>{o.innerHTML+=`<option \n        id="country-${e.code}"\n        value="${e.code}"\n        data-search-by-vat="${e.is_search_by_vat_available}"\n        data-is-reg-number-required='${e.is_registration_number_required}'>\n          ${e.name}\n        </option>`})),o&&o.addEventListener("change",(n=>{var t;null===(t=null==e?void 0:e.querySelector(h))||void 0===t||t.removeAttribute("disabled"),null==l||l.removeAttribute("disabled");const{searchByVat:r}=n.target.options[n.target.selectedIndex].dataset;V(r,e);const{isRegNumberRequired:o}=n.target.options[n.target.selectedIndex].dataset;(null==e?void 0:e.querySelector(k)).innerHTML="true"===o?"*":"",s.value="",null==i||i.setAttribute("disabled","true"),a&&(a.innerHTML="")})),await(async(e,n)=>{var t,r;const s=await fetch("https://api.db-ip.com/v2/free/self",{method:"GET"}),{ipAddress:i,continentCode:a,continentName:o,countryCode:d,countryName:l,city:c}=await s.json(),u=e.querySelector(h);if(i&&(u.dataset.ipv4=i),a&&(u.dataset.continentCode=a),o&&(u.dataset.continentName=o),d){u.dataset.countryCode=d;const s=e.querySelector(`#country-${d}`);if(!n&&s){e.querySelector(y).value=d,null===(t=null==e?void 0:e.querySelector(h))||void 0===t||t.removeAttribute("disabled"),null===(r=null==e?void 0:e.querySelector(q))||void 0===r||r.removeAttribute("disabled");const n=Z(e);(null==e?void 0:e.querySelector(k)).innerHTML=n?"*":""}}l&&(u.dataset.countryName=l),c&&(u.dataset.city=c)})(e,t);const u=x.replace("#",""),p=w.replace("#",""),g=e.getElementById(u),v=e.getElementById(p);g&&g.addEventListener("change",(n=>{var t;(null===(t=null==n?void 0:n.target)||void 0===t?void 0:t.checked)&&(e.getElementById(f.replace("#","")).dataset.searchBy="NAME",e.getElementById(p).checked=!1)})),v&&v.addEventListener("change",(n=>{var t;(null===(t=null==n?void 0:n.target)||void 0===t?void 0:t.checked)&&(e.getElementById(f.replace("#","")).dataset.searchBy="VAT_ID",e.getElementById(u).checked=!1)}));const E=async(n="")=>{var t,r;n?null==i||i.removeAttribute("disabled"):null==i||i.setAttribute("disabled","true");const{businesses:s=[]}=await H("search/business",e,{search_type:null===(t=null==e?void 0:e.getElementById(f.replace("#","")))||void 0===t?void 0:t.dataset.searchBy,search_term:n,country_code:null===(r=null==e?void 0:e.getElementById(y.replace("#","")))||void 0===r?void 0:r.value});if(a){let n=`\n  <div class='sprinque-businesses-item cursour-pointer'>\n    <b>${d.default.t("business.cantFind")}</b><br/>\n    <small>${d.default.t("business.cantFindInstruction")}</small><br/>\n  </div>\n`;s.forEach((({business_name:e,registration_number:t,address:r=b,credit_bureau_id:s})=>{n+=(({business_name:e,registration_number:n,address:t,credit_bureau_id:r})=>`\n  <div\n    class='sprinque-businesses-item cursour-pointer'\n    data-name='${e}'\n    data-reg='${n}'\n    data-creditBureauId='${r}'\n    data-address='${JSON.stringify(t)}'\n  >\n    <b>${e}</b><br/>\n    <small>${Object.values(t).filter((e=>e)).join(", ")}</small><br/>\n    <small>${n}</small>\n  </div>\n`)({business_name:e,registration_number:t,address:r,credit_bureau_id:s})})),a.innerHTML=n,null==e||e.querySelectorAll(".sprinque-businesses-item").forEach((n=>{n.addEventListener("click",(()=>{const t=n.getAttribute("data-name"),r=n.getAttribute("data-reg"),s=n.getAttribute("data-address"),i=n.getAttribute("data-creditBureauId");((e,n,t,r,s)=>{if(n&&(e.getElementById(h.replace("#","")).value=n),s&&(e.getElementById(h.replace("#","")).dataset.creditBureauId=s),r&&(e.getElementById("sp-reg-number").value=r),t)try{const{address_line_1:n,address_line_2:r,city:s,zipcode:i}=JSON.parse(t);n&&(e.getElementById("sp-address-line1").value=n),r&&(e.getElementById("sp-address-line2").value=r),s&&(e.getElementById("sp-address-city").value=s),i&&(e.getElementById("sp-address-zip").value=i)}catch(e){console.log(`Sprinque > failed to parse address for ${n}`)}e.getElementById("sprinque-businesses").innerHTML=""})(e,t,s,r,i)}))}))}},$=(e=>{let n;return t=>{clearTimeout(n),n=setTimeout((()=>e(t)),500)}})((function(e){E(e)}));s.addEventListener("input",(function(e){var n;s.dataset.creditBureauId="",(null===(n=null==e?void 0:e.target)||void 0===n?void 0:n.value)&&e.target.value.length>2&&$(e.target.value)})),l.addEventListener("input",(function(t){var i;if(s.dataset.creditBureauId="",(null===(i=null==t?void 0:t.target)||void 0===i?void 0:i.value)&&t.target.value.length>2){const{isValid:s,message:i}=r.checkRegNumber(t.target.value,o.value,n),a=e.querySelector(S);a.innerHTML=i,a.style.display=s?"none":"block"}}));const{logo:T}=await H("seller",e,void 0,"GET"),I=e.querySelector(".sprinque-logo");I&&(I.src=T||m)},ne={EUR:"€",USD:"$",GBP:"£"},te=e=>({address_line1:e.querySelector($).value,address_line2:e.querySelector(T).value,city:e.querySelector(I).value,zip_code:e.querySelector(C).value,country_code:e.querySelector(y).value}),re=e=>{const n=e.getElementById("resend-code"),t=e.getElementById("resend-code-sec");n.classList.contains("disabled")||n.classList.add("disabled");let r=0;const s=setInterval((()=>{r+=1,t.innerHTML=String(+t.innerHTML-1),30===r&&(t.innerHTML=String(30),clearInterval(s),n.classList.remove("disabled"))}),1e3)},se=async(e,n,t)=>{await H("business/buyer/email/otp",t,{email:e,merchant_buyer_id:n})},ie=e=>{e.addEventListener("sprinque-to-step4",(async()=>{var n;const t=await H("buyers/",e,(e=>{var n,t;const{creditBureauId:r="",ipv4:s="",continentCode:i="",continentName:a="",countryCode:o="",countryName:d="",city:l=""}=e.getElementById(h.replace("#","")).dataset,c={business_name:R(h,e),legal_form:"Sole Proprietorship",address:te(e),merchant_buyer_id:String((new Date).getTime()),registration_number:R("#sp-reg-number",e),buyer_users:[{first_name:R("#sp-user-name",e),last_name:R("#sp-user-surname",e),phone:(null==G?void 0:G.getNumber())||R(j,e),email:R(B,e)}],metadata:{}},u=R(E,e);return u&&(c.email=u),(null===(n=ue.order)||void 0===n?void 0:n.shipping_address)&&(c.initial_shipping_address=null===(t=ue.order)||void 0===t?void 0:t.shipping_address),r&&(c.credit_bureau_id=r),s&&(c.metadata.IPv4=s),i&&(c.metadata.continent_code=i),a&&(c.metadata.continent_name=a),o&&(c.metadata.country_code=o),d&&(c.metadata.country_name=d),l&&(c.metadata.city=l),c})(e));if(!t.buyer_users)return;const r=e.querySelector(B).value;e.querySelector(z).innerHTML=r,sessionStorage.setItem(u,t.merchant_buyer_id),sessionStorage.setItem(p,t.buyer_id);if((null===(n=t.buyer_users.find((e=>e.email===r)))||void 0===n?void 0:n.email_otp_validated)||!1){e.querySelector('[data-validate-step="4"]').click()}else await se(r,t.merchant_buyer_id,e),(null==e?void 0:e.querySelector(L)).focus(),re(e)})),e.querySelector("#resend-code").addEventListener("click",(async()=>{const n=e.querySelector(B).value,t=sessionStorage.getItem(u);await se(n,t,e),re(e)}))},ae=(e,n,t)=>{const r=new CustomEvent(`sprinque-to-step${e}`,{bubbles:!0});t.dispatchEvent(r),n(`${e}`)},oe=(e,n)=>{const t=null==e?void 0:e.querySelectorAll(L),r=e.querySelector("#confirm-otp-code");t.forEach(((e,n)=>{var s;e.addEventListener("keyup",(s=>{e.value=s.target.value.slice(-1);[...t].every((e=>e.value))?r.removeAttribute("disabled"):r.setAttribute("disabled","true"),4!==n&&e.nextElementSibling&&e.nextElementSibling.focus()})),0===n&&(s=t,e.addEventListener("paste",(e=>{var n;e.preventDefault();let t=null===(n=e.clipboardData)||void 0===n?void 0:n.getData("text");t&&5===t.length&&s.forEach(((e,n)=>e.value=t[n]))})))})),r.addEventListener("click",(async()=>{const n=[...t].map((e=>e.value)).join(""),s=e.querySelector(B).value,i=sessionStorage.getItem(u),a=await(async(e,n,t,r)=>await H("business/buyer/email/otp/verify",r,{email:e,merchant_buyer_id:n,otp:t}))(s,i,n,e),o=e.querySelector(".validation-error-4");if(a.email_otp_validated){r.style.display="none";e.querySelector("[data-validate-step='4']").click()}else o.innerHTML=d.default.t("validation.wrongOtp")})),e.addEventListener("sprinque-to-step5",(async()=>{const t=await H(`buyers/${sessionStorage.getItem(p)}`,e,void 0,"GET");if(ue.onBuyerResponse&&ue.onBuyerResponse(t),t.credit_qualification){const{credit_decision:r,eligible_payment_terms:s}=t.credit_qualification;e.querySelector("#buyer-credit-decision").innerHTML=r,e.querySelector("#buyer-net-terms").innerHTML=s.join(", ");if("APPROVED"===r&&ue.order){const{buyer_pricing_fee_percent:n}=await H("seller/pricing",e,void 0,"GET");((e,n,t)=>{e.forEach(((e,r)=>{const s=e.toLowerCase(),i=t.querySelector(`#${s}`);t.querySelector(`[for=${s}]`).style.display="flex";const a=t.querySelector(`.payment-term-price.${s}`),{order_amount:o,order_currency:l}=ue.order,c=(n?+n[s]:0)*o/100,u=ne[l],p=u+c.toFixed(2);a.innerHTML=0===c?d.default.t("order.free"):p,i.dataset.priceAbsolut=String(c.toFixed(2)),0===r&&(i.checked=!0,t.querySelector("#order-total-currency").innerHTML=u,t.querySelector(D).innerHTML=(o+c).toFixed(2))}))})(s,n,e)}else ae("6",n,e)}}))},de='\n  <style>\n  .sprinque-ellipsis {\n    display: none;\n    position: relative;\n    margin: 0 auto;\n    width: 80px;\n    height: 20px;\n  }\n  .sprinque-ellipsis div {\n    position: absolute;\n    top: 12px;\n    width: 13px;\n    height: 13px;\n    border-radius: 50%;\n    background: #000339;\n    animation-timing-function: cubic-bezier(0, 1, 1, 0);\n  }\n  .sprinque-ellipsis div:nth-child(1) {\n    left: 8px;\n    animation: sprinque-ellipsis1 0.6s infinite;\n  }\n  .sprinque-ellipsis div:nth-child(2) {\n    left: 8px;\n    animation: sprinque-ellipsis2 0.6s infinite;\n  }\n  .sprinque-ellipsis div:nth-child(3) {\n    left: 32px;\n    animation: sprinque-ellipsis2 0.6s infinite;\n  }\n  .sprinque-ellipsis div:nth-child(4) {\n    left: 56px;\n    animation: sprinque-ellipsis3 0.6s infinite;\n  }\n  @keyframes sprinque-ellipsis1 {\n    0% {\n      transform: scale(0);\n    }\n    100% {\n      transform: scale(1);\n    }\n  }\n  @keyframes sprinque-ellipsis3 {\n    0% {\n      transform: scale(1);\n    }\n    100% {\n      transform: scale(0);\n    }\n  }\n  @keyframes sprinque-ellipsis2 {\n    0% {\n      transform: translate(0, 0);\n    }\n    100% {\n      transform: translate(24px, 0);\n    }\n  }\n  </style>\n  \n  <div class="sprinque-ellipsis">\n    <div></div><div></div><div></div><div></div>\n  </div>\n',le=require("development"===process.env.NODE_ENV?"../../package.json":"../package.json"),ce=e=>{const n=document.createElement("template");return n.innerHTML=`\n    \n<style>\n  :host * {\n    font-size: 14px;\n  }\n  :host h3, :host span, :host div {\n    color: #000339;\n  }\n  :host h3 {\n    font-size: 20px;\n  }\n  :host p {\n    margin: 0;\n  }\n  /*main*/\n  .sprinque-modal-wrapper {\n    position: fixed;\n    z-index: 9999;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100vh;\n    background: rgba(0, 0, 0, .5);\n    display: flex;\n    justify-content: center;\n    align-items: center;\n  }\n  .sprinque-modal {\n    position: relative;\n    font-family: sans-serif;\n    background: #fff;\n    width: 400px;\n    display: grid;\n    grid-template-columns: 1fr;\n    margin-bottom: 10px;\n    padding: 20px;\n    border-radius: 10px;\n    max-width: 90%;\n  }\n  .sprinque-header {\n    display: flex;\n    align-items: baseline;\n    justify-content: space-between;\n  }\n  .sprinque-stepper {\n    color: #000339;\n    font-weight: bold;\n    white-space: nowrap;\n    font-size: 16px;\n  }\n  .sprinque-api-error {\n    background: #ee3f75;\n    color: #fff;\n    padding: 4px;\n    font-size: 14px;\n  }\n  .close-btn {\n    font-size: 26px;\n    cursor: pointer;\n    font-weight: 100;\n    color: #000339;\n    position: absolute;\n    right: 20px;\n    top: 20px;\n  }\n  /* logo */\n  .sprinque-logo-wrapper {\n    text-align: center;\n    min-height: 50px;\n  }\n  .sprinque-logo {\n    max-width: 200px;\n    max-height: 50px;\n  }\n  /* form */\n  label {\n    display: block;\n    font-weight: bold;\n    color: #6266A7;\n    margin-top: 20px;\n    padding: 5px 0;\n  }\n  .sprinque-modal label span {color: #6266A7;}\n  \n  input, select {\n    display: block;\n    border: 1px solid #B6B8E2;\n    border-radius: 4px;\n    width: calc(100% - 20px);\n    font-size: 16px;\n    padding: 8px 10px;\n  }\n  input:active, input:focus, select:focus {\n    border-color: #000339;\n    color: #000339;\n    outline: none;\n  }\n   select {\n    width: 100%;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAPCAYAAAARZmTlAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADqSURBVHgBpdHNDYIwFAfw1yfx7AiMoHEB3cELXqwmuoa4gWc00BsnD04gCxhX6ByGFFuCiamltPBPCP14fb8mJSBDaTaBIJhCGXDGIg4Do/cjlOYhjuEh90L5cfGG5RDI1A9xLGizoFIXqELoEQ1o+gmKQmCh1faCDEAdUSFHdo0KOT4NgdoA1ZddIka+s90hj+XvqBV1vpENSJMoVgPyu+oLuQB/iA/kChgRF8gHaEWskCi3iEHmClgRC2RKK6AyAktez1sxm6/URRZ9gU7EAeoEnBAL5ASoEPAI3edUHtgQUt3TZH12PfcBJLGTJFbnlZQAAAAASUVORK5CYII=') no-repeat 97% 50%;\n    background-size: 12px 7px;\n   }\n   \n   /* powered by */\n   .sprinque-powered-img {\n      height: 16px;\n      margin-bottom: -4px;\n      opacity: 0.3\n   }\n    .powered-by {\n      margin-top: 10px;\n      color: #B6B8E2;\n      display: flex;\n      justify-content: space-between;\n    }\n    .powered-by div {\n      color: #B6B8E2;\n    }\n   /* buttons */\n   button {\n      color: #fff;\n      background: #000339;\n      border: 2px solid #000339;\n      border-radius: 4px;\n      transition: .3s;\n      font-weight: bold;\n      font-size: 16px;\n      padding: 8px 20px;\n      margin: 10px 0;\n      cursor: pointer;\n   }\n   button:disabled, button:disabled:hover {\n      background: #B6B8E2;\n      border-color: #B6B8E2;\n   }\n   button:hover {\n      background: #6266A7;\n   }\n   button.secondary {\n      border: 2px solid #000339;\n      background: transparent;\n      color: #000339;\n   }\n   button.secondary:hover {\n    background: #e8e4e4;\n   } \n   button.secondary.sp-arrow {\n    border-color: #000339;\n   }\n   button.secondary .sp-arrow {\n    border-color: #000339;\n   }\n   button.secondary .sp-arrow::before {\n    background: #000339;\n   }\n   /* common */\n   .sprinque-text-right {\n      text-align: right;\n   }\n   .cursour-pointer {\n      cursor: pointer;\n   }\n   .justify-between {\n      display: flex;\n      justify-content: space-between;\n   }\n   /* validation */\n   div[class^="validation-error-"] {\n      color: #ee3f75;\n      font-weight: bold;\n   }\n   .warning {\n    background: rgb(255, 244, 229);\n    padding: 10px;\n    color: rgb(102, 60, 0);\n    border-radius: 4px;\n    border: 1px solid #e8e4e4;\n   }\n   \n   .sp-arrow {\n      border: solid white;\n      border-width: 0 2px 2px 0;\n      display: inline-block;\n      padding: 4px;\n    }\n   .sp-arrow::before {\n      content: "";\n      width: 14px;\n      height: 2px;\n      background: white;\n      position: absolute;\n      rotate: 45deg;\n      top: 3px;\n      right: -3px;\n   }\n  \n  .sp-right {\n    margin-left: 10px;\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg);\n  }\n  \n  .sp-left {\n    margin-right: 10px;\n    transform: rotate(135deg);\n    -webkit-transform: rotate(135deg);\n  }\n</style>\n\n    \n    <div class="sprinque-modal-wrapper sdk-lang-${e}">\n      <div class="sprinque-modal">\n        \x3c!-- logo --\x3e\n        <div class='sprinque-logo-wrapper'>\n          <img class='sprinque-logo' src='${m}' alt='b2b logo'/>\n        </div>\n        <span class="close-btn">&times;</span>\n        \n  \n<style>\n  /* step 1 */\n   #sprinque-businesses {\n      overflow-x: scroll;\n      max-height: 190px;\n      background: #fff;\n      border: 1px solid #e8e4e4;\n      border-radius: 10px;\n      margin: 10px 0;\n   }\n   #sprinque-businesses:empty {display: none}\n   \n   .sprinque-businesses-item {\n      padding: 10px;\n      margin: 5px;\n      \n   }\n   .sprinque-businesses-item:not(:last-child) {\n      border-bottom: 1px solid #e8e4e4;\n   }\n   \n   /* checkboxes from https://www.w3schools.com/howto/howto_css_custom_checkbox.asp */\n   /* Customize the label (the container) */\n  #search-type {\n    margin-bottom: 5px;\n  }\n  \n  #search-type label {\n    position: relative;\n    padding-left: 25px;\n    margin-right: 20px;\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n  }\n  .sdk-lang-de #search-type label {\n    max-width: 140px;\n    word-wrap: break-word;\n  }\n  \n  /* Hide the browser's default checkbox */\n  #search-type input {\n    position: absolute;\n    opacity: 0;\n    cursor: pointer;\n    height: 0;\n    width: 0;\n  }\n  \n  /* Create a custom checkbox */\n  .sp-checkmark {\n    position: absolute;\n    top: 7px;\n    left: 0;\n    height: 16px;\n    width: 16px;\n    border: 1px solid #000339;\n    border-radius: 50%;\n  }\n  \n  /* On mouse-over, add a grey background color */\n  #search-type:hover input ~ .sp-checkmark {\n    background-color: #ccc;\n  }\n  \n  /* Create the checkmark/indicator (hidden when not checked) */\n  .sp-checkmark:after {\n    content: "";\n    position: absolute;\n    display: none;\n  }\n  \n  /* Show the checkmark when checked */\n  #search-type input:checked ~ .sp-checkmark:after {\n    display: block;\n  }\n  \n  /* Style the checkmark/indicator */\n  #search-type .sp-checkmark:after {\n    left: 3px;\n    top: 3px;\n    width: 10px;\n    height: 10px;\n    background: #000339;\n    border-radius: 50%;\n  }\n</style>\n\n  <div class='sprinque-step-1'>\n    <div class='sprinque-header'>\n      <h3>${d.default.t("business.title")}</h3>\n      <span class='sprinque-stepper'>${d.default.t("general.step")} 1/4</span>\n    </div>\n    <p>${d.default.t("business.description")}</p>\n    <div id='sp-form-step-1'>\n      \x3c!-- country select --\x3e\n      <label for=${y.replace("#","")}>${d.default.t("business.country")}*</label>\n      <select id=${y.replace("#","")} required>\n         <option value='' selected disabled>${d.default.t("business.loading")}...</option>\n      </select>\n      <div style='display: none' id=${f.replace("#","")} data-search-by='NAME'>\n        \x3c!-- by name --\x3e\n        <label for=${x.replace("#","")}>\n          <input type="radio" id=${x.replace("#","")} name='search-by' checked>\n          <span class="sp-checkmark"></span>${d.default.t("business.companyName")}\n        </label>\n        \x3c!-- by vat id --\x3e\n        <label for=${w.replace("#","")}>\n          <input type="radio" id=${w.replace("#","")} name='search-by'>\n          <span class="sp-checkmark"></span>${d.default.t("business.vatId")}\n        </label>\n      </div>\n      \x3c!-- company name --\x3e\n      <label for=${h.replace("#","")}>${d.default.t("business.companyName")}*</label>\n      <input type="text" id=${h.replace("#","")} disabled required placeholder='${d.default.t("business.search")}'>\n      ${de}\n      <div id='sprinque-businesses'></div>\n      \x3c!-- reg number --\x3e\n      <label for=${q.replace("#","")}>\n        ${d.default.t("business.registrationNumber")}\n        <span id=${k.replace("#","")}>*</span>\n      </label>\n      <input type="text" id=${q.replace("#","")} disabled>\n      \x3c!-- warning --\x3e\n      <div style='display: none' class='warning' id=${S.replace("#","")}></div>\n      \x3c!-- billing email --\x3e\n      <label for=${E.replace("#","")}>${d.default.t("business.billingEmail")}*</label>\n      <input type="text" id=${E.replace("#","")}>\n      \n      <br>\n      <div class='validation-error-1'></div>\n      \n      <div class='sprinque-text-right'>\n        <button class='nav' data-validate-step='1' data-to-step='2' disabled>${d.default.t("general.next")}<i class="sp-arrow sp-right"></i></button>\n      </div>\n    </div> \n  </div>\n\n        \n  <div class='sprinque-step-2' style='display: none'>\n    <div class='sprinque-header'>\n      <h3>${d.default.t("address.title")}</h3>\n      <span class='sprinque-stepper'>${d.default.t("general.step")} 2/4</span>\n    </div>\n    <p>${d.default.t("address.description")}</p>\n    <div id='sp-form-step-2'>\n      \n      \x3c!-- address line 1 --\x3e\n      <label for="sp-address-line1">${d.default.t("address.line1")}*</label>\n      <input type="text" id=${$.replace("#","")} required name="sp-address-line1">\n      \x3c!-- address line 2 --\x3e\n      <label for="sp-address-line2">${d.default.t("address.line2")}</label>\n      <input type="text" id=${T.replace("#","")} required name="sp-address-line2">\n      \x3c!-- city --\x3e\n      <label for="sp-address-city">${d.default.t("address.city")}*</label>\n      <input type="text" id=${I.replace("#","")} required name="sp-address-city">\n      \x3c!-- zip --\x3e\n      <label for="sp-address-zip">${d.default.t("address.zip")}*</label>\n      <input type="text" id=${C.replace("#","")} required name="sp-address-zip">\n      \n      <br>\n      <br>\n      <div class='validation-error-2'></div>\n      <div class='justify-between'>\n        <button class='nav secondary' data-to-step='1'><i class="sp-arrow sp-left"></i>\n          ${d.default.t("general.back")}\n        </button>\n        <button class='nav' data-validate-step='2' data-to-step='3'>\n          ${d.default.t("general.next")}\n          <i class="sp-arrow sp-right"></i>\n        </button>\n      </div>\n    </div> \n  </div>\n\n        \n  <div class='sprinque-step-3' style='display: none'>\n  \x3c!-- styles for intl-tel-input --\x3e\n      <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.21/css/intlTelInput.css" integrity="sha512-gxWow8Mo6q6pLa1XH/CcH8JyiSDEtiwJV78E+D+QP0EVasFs8wKXq16G8CLD4CJ2SnonHr4Lm/yY2fSI2+cbmw==" crossorigin="anonymous" referrerpolicy="no-referrer" />\n      \n<style>\n  /* step 3 */\n  .iti__flag {background-image: url("https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.21/img/flags.png");}\n          \n  @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\n      .iti__flag {background-image: url("https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.21/img/flags@2x.png");}\n  }\n  .iti--allow-dropdown {width: 100%}\n  #sp-user-phone {width: 100%}\n</style>\n\n      \x3c!-- #styles for intl-tel-input --\x3e\n    <div class='sprinque-header'>\n      <h3>${d.default.t("contact.title")}</h3>\n      <span class='sprinque-stepper'>${d.default.t("general.step")} 3/4</span>\n    </div>\n    <p>${d.default.t("contact.description")}</p>\n    <div id='sp-form-step-3'>\n      \n      \x3c!-- First name --\x3e\n      <label for="sp-user-name">${d.default.t("contact.name")}*</label>\n      <input type="text" id=${_.replace("#","")} required>\n      \x3c!-- Last name --\x3e\n      <label for="sp-user-surname">${d.default.t("contact.surname")}*</label>\n      <input type="text" id=${N.replace("#","")} required>\n      \x3c!-- Email --\x3e\n      <label for="sp-user-email">${d.default.t("contact.email")}*</label>\n      <input type="text" id=${B.replace("#","")} required>\n      \x3c!-- Phone --\x3e\n      <label for="sp-user-phone">${d.default.t("contact.phone")}*</label>\n      <input type="text" id=${j.replace("#","")} required>\n     \n      \n      <br>\n      <br>\n      <div class='validation-error-3'></div>\n      \n      <div class='justify-between'>\n        <button class='nav secondary' data-to-step='2'><i class="sp-arrow sp-left"></i>${d.default.t("general.back")}</button>\n        <button class='nav' data-validate-step='3' data-to-step='4'>${d.default.t("general.next")}<i class="sp-arrow sp-right"></i></button>\n      </div>\n    </div> \n  </div>\n\n        \n  \n<style>\n  /* step 4 */\n  #sp-otp-digits {\n    display: flex;\n  }\n  .sp-otp-digit {\n      width: 20%;\n      border: none;\n      background: none;\n      outline: none;\n      border-bottom: 2px solid #333232;\n      font-size: 30px;\n      margin: 20px 5px;\n      border-radius: 0;\n      color: #000339;\n      text-align: center;\n  }\n  #resend-code {\n    color: #6266A7;\n    cursor: pointer;\n  }\n  #resend-code:not(.disabled) #resend-code-desc {\n    display: none;\n  }\n  #resend-code.disabled {\n    pointer-events: none;\n    opacity: 0.5;\n  }\n  /* hide arrows */\n  .sp-otp-digit::-webkit-outer-spin-button,\n  .sp-otp-digit::-webkit-inner-spin-button {\n    -webkit-appearance: none;\n    margin: 0;\n  }\n  \n  /* Firefox */\n  .sp-otp-digit[type=number] {\n    -moz-appearance: textfield;\n  }\n</style>\n\n  <div class='sprinque-step-4' style='display: none'>\n    <div class='sprinque-header'>\n      <h3>${d.default.t("otp.title")}</h3>\n      <span class='sprinque-stepper'>${d.default.t("general.step")} 4/4</span>\n    </div>\n    <p>\n      ${d.default.t("otp.description")} <strong id=${z.replace("#","")}></strong>\n    </p>\n    <div id='sp-form-step-4'>\n      ${de}\n      \n      \x3c!-- digits --\x3e \n      <div id='sp-otp-digits'>\n        <input class='sp-otp-digit sp-otp-1' type='number' maxlength='1' min="0" max='9'>\n        <input class='sp-otp-digit sp-otp-2' type='number' maxlength='1' min="0" max='9'>\n        <input class='sp-otp-digit sp-otp-3' type='number' maxlength='1' min="0" max='9'>\n        <input class='sp-otp-digit sp-otp-4' type='number' maxlength='1' min="0" max='9'>\n        <input class='sp-otp-digit sp-otp-5' type='number' maxlength='1' min="0" max='9'>\n      </div>\n      \n      <div class='validation-error-4'></div>\n      \n      <div class='justify-between'>\n        <button class='nav secondary' data-to-step='3'><i class="sp-arrow sp-left"></i>\n          ${d.default.t("general.back")}\n        </button>\n        <button style='display:none' class='nav' data-validate-step='4' data-to-step='5'>\n          ${d.default.t("general.next")}\n          <i class="sp-arrow sp-right"></i>\n        </button>\n        \n        <button disabled id='confirm-otp-code'>${d.default.t("general.confirm")}</button>\n      </div>\n      \n      <p style='margin: 10px 0'>\n        ${d.default.t("otp.notReceivedText")}\n        <span id='resend-code' class='disabled'>\n          ${d.default.t("otp.resendCode")}\n          <span id='resend-code-desc'> (${d.default.t("otp.timerBeforeText")} \n          <span id='resend-code-sec'>30</span> ${d.default.t("otp.timerAfterText")})</span>\n        </span>\n      </p>\n    </div> \n  </div>\n\n        \n  \n<style>\n  .payment-term-item label {\n    \n  }\n  /*From https://www.w3schools.com/howto/howto_css_custom_checkbox.asp*/\n  /* Customize the label (the payment-term-item) */\n  .payment-term-item {\n    position: relative;\n    padding: 10px 10px 10px 40px;\n    margin: 10px 0;\n    font-weight: normal;\n    color: #000339;\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    border: 1px solid #e8e4e4;\n  }\n  .payment-term-item:has(input:checked)  {\n    border: 1px solid #000339;\n  }\n  \n  /* Hide the browser's default radio button */\n  .payment-term-item input {\n    position: absolute;\n    opacity: 0;\n    cursor: pointer;\n    height: 0;\n    width: 0;\n  }\n  \n  /* Create a custom radio button */\n  .checkmark {\n    position: absolute;\n    top: 12px;\n    left: 11px;\n    height: 20px;\n    width: 20px;\n    background-color: #e8e4e4;\n    border-radius: 50%;\n    transition: background-color 0.2s;\n  }\n  \n  /* On mouse-over, add a grey background color */\n  .payment-term-item:hover input ~ .checkmark {\n    background-color: #ccc;\n  }\n  \n  /* When the radio button is checked, add a blue background */\n  .payment-term-item input:checked ~ .checkmark {\n    background-color: #000339;\n  }\n  \n  /* Create the indicator (the dot/circle - hidden when not checked) */\n  .checkmark:after {\n    content: "";\n    position: absolute;\n    display: none;\n  }\n  \n  /* Show the indicator (dot/circle) when checked */\n  .payment-term-item input:checked ~ .checkmark:after {\n    display: block;\n  }\n  \n  /* Style the indicator (dot/circle) */\n  .payment-term-item .checkmark:after {\n    top: 6px;\n    left: 5px;\n    width: 8px;\n    height: 4px;\n    border-left: 2px solid #fff;\n    border-bottom: 2px solid #fff;\n    rotate: -47deg;\n  }\n</style>\n\n  <div class='sprinque-step-5' style='display: none'>\n    <div class='sprinque-header'>\n      <h3>${d.default.t("order.title")}</h3>\n    </div>\n    <p>${d.default.t("order.description")}</p>\n    \n    <div id='sp-form-step-5'>\n      ${de}\n      <div class='justify-between' style='margin-top: 20px'>\n        <span><strong>${d.default.t("order.totalAmount")}</strong></span>\n        <strong>\n          <span id='order-total-currency'>-</span>\n          <span id='order-total-amount'>-</span>\n        </strong>\n      </div>\n      \n      \x3c!-- select payment terms --\x3e\n      ${g.map((e=>`<label style='display: none' for="${e}" class='payment-term-item justify-between'>\n              <div>\n                <input type="radio" id="${e}" name="net-terms" value="${e}">\n                <span>${d.default.t(`order.${e}`)}</span>\n                <span class="checkmark"></span>\n              </div>\n              <div class="payment-term-price ${e}">-</div>\n          </label>`)).join("")} \x3c!-- join will hide comma --\x3e\n      \n      <div class='validation-error-5'></div>\n      \n      <div class='justify-between'>\n        <button style='width: 100%' id='place-order' class='nav' data-validate-step='5' data-to-step='6'>\n          ${d.default.t("order.confirmOrder")}\n        </button>\n      </div>\n      \n    </div> \n  </div>\n\n        \n  <div class='sprinque-step-6' style='display: none'>\n    <div class='sprinque-header'>\n      <h3>${d.default.t("success.title")}</h3>\n    </div>\n    <div id='sp-form-step-6'>\n      ${de}\n      <div class='justify-between'>${d.default.t("success.creditDecision")}: <strong><span id='buyer-credit-decision'>-</span></strong>\n      </div>\n      <div class='justify-between'>${d.default.t("success.paymentTerms")}: <strong><span id='buyer-net-terms'>-</span></strong>\n      </div>\n      \n      <div style='padding: 10px 0; margin: 10px 0;border-top: 1px solid #e8e4e4; border-bottom: 1px solid #e8e4e4;'>\n        ${d.default.t("success.description")}\n      </div>\n     \n      \x3c!-- Order info --\x3e\n      <div id='order-info' style='display: none'>\n        <h3>${d.default.t("success.orderPlaced")}</h3>\n        <div class='justify-between'>${d.default.t("success.transactionId")}: <strong id='order-id'></strong></div>\n      </div>\n      \n      <br>\n      <br>\n      <div class='validation-error-6'></div>\n      \n    </div> \n  </div>\n\n        \x3c!-- api error --\x3e\n        <p class=${v.replace(".","")} style='display: none'>Something went wrong.</p>\n        \x3c!-- powered by --\x3e\n        <div class='powered-by'>\n          <div>Powered by <img class='sprinque-powered-img' src=${m} alt='sprinque'></div>\n          <div>v.${le.version}</div>\n        </div>\n        \n      </div>\n    </div>`,n};class ue extends HTMLElement{constructor(){super(),this.changeStep=(e="1")=>{((e,n,t)=>{const r=e.querySelector(`.sprinque-step-${n}`),s=e.querySelector(`.sprinque-step-${t}`);r.style.display="none",s.style.display="block"})(this.shadowRoot,this.step,e),this.step=e},this.step="1"}async connectedCallback(){this.attachShadow({mode:"open"});const e=this.getAttribute("lang")||"en";this.shadowRoot&&this.shadowRoot.appendChild(ce(e).content.cloneNode(!0));const n=this.getAttribute("buyer-id");var t;this.shadowRoot&&((e=>{const n=e.querySelector(".sprinque-modal-wrapper");n&&n.addEventListener("click",P);const t=e.querySelector(".close-btn");t&&t.addEventListener("click",P);const r=e.querySelector(".sprinque-modal");r&&r.addEventListener("click",(e=>e.stopPropagation()))})(this.shadowRoot),await ee(this.shadowRoot,e,n),(t=this.shadowRoot).addEventListener("sprinque-to-step3",(async()=>{var e;const n=t.querySelector(j),r=(null===(e=t.querySelector(y))||void 0===e?void 0:e.value)||"nl";G=l.default(n,{initialCountry:r.toLowerCase(),preferredCountries:["nl","de","es","fr","be"],autoPlaceholder:"aggressive",utilsScript:"https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.21/js/utils.min.js"})})),ie(this.shadowRoot),oe(this.shadowRoot,this.changeStep),(e=>{var n;const t=e.querySelectorAll('[name="net-terms"]'),r=Number(null===(n=ue.order)||void 0===n?void 0:n.order_amount)||0;r&&t.forEach((n=>{n.addEventListener("change",(n=>{const{priceAbsolut:t}=n.target.dataset;e.querySelector(D).innerHTML=(r+Number(t)).toFixed(2)}))})),e.addEventListener("sprinque-to-step6",(async()=>{var n;if(ue.order){const t=e.querySelector(B).value,r=null===(n=e.querySelector('[name="net-terms"]:checked').value)||void 0===n?void 0:n.toUpperCase(),s=Object.assign(Object.assign({},ue.order),{issued_by:t,payment_terms:r}),{ipv4:i="",continentCode:a="",continentName:o="",countryCode:d="",countryName:l="",city:c=""}=e.querySelector(h).dataset;i&&(s.metadata.IPv4=i),a&&(s.metadata.continent_code=a),o&&(s.metadata.continent_name=o),d&&(s.metadata.country_code=d),l&&(s.metadata.country_name=l),c&&(s.metadata.city=c);const u=await H(`transactions/authorize/${sessionStorage.getItem(p)}`,e,s),{errors:m}=u;m||(e.getElementById("order-info").style.display="block",e.getElementById("order-id").innerHTML=u.transaction_id,ue.onOrderCreated&&ue.onOrderCreated(u))}}))})(this.shadowRoot),((e,n)=>{null==e||e.querySelectorAll(".nav").forEach((t=>{t.addEventListener("click",(()=>{const r=t.getAttribute("data-to-step"),s=t.getAttribute("data-validate-step");if(s&&!Y(s,e))return;n(r);const i=new CustomEvent(`sprinque-to-step${r}`,{bubbles:!0});t.dispatchEvent(i)}))}))})(this.shadowRoot,this.changeStep),n&&await(async(e,n,t)=>{var r,s,i;const a=await H(`buyers/${n}`,e,void 0,"GET"),{address:{address_line1:o,address_line2:d,city:l,country:{code:c},zip_code:u},business_name:p,registration_number:m,buyer_users:b}=a;e.querySelector(y).value=c,e.querySelector(h).value=p,e.querySelector(q).value=m,null===(r=null==e?void 0:e.querySelector(h))||void 0===r||r.removeAttribute("disabled"),null===(s=null==e?void 0:e.querySelector(q))||void 0===s||s.removeAttribute("disabled");const g=null==e?void 0:e.querySelector(A);null==g||g.removeAttribute("disabled");const{searchByVat:v=""}=null===(i=e.getElementById(`country-${c}`))||void 0===i?void 0:i.dataset;V(v,e),e.querySelector($).value=o,e.querySelector(T).value=d,e.querySelector(I).value=l,e.querySelector(C).value=u;const f=b.find((({email_otp_validated:e})=>e))||b[0];e.querySelector(_).value=f.first_name,e.querySelector(N).value=f.last_name,e.querySelector(B).value=f.email,e.querySelector(j).value=f.phone,ae("4",t,e)})(this.shadowRoot,n,this.changeStep))}}const pe={en:{translation:{business:{title:"Select your business",description:"To approve a payment term for your order we need your company information to run a soft and quick credit check.",country:"Country",selectCountry:"Select country",loading:"Loading",companyName:"Company name",vatId:"VAT ID",search:"Search",registrationNumber:"Registration number",billingEmail:"Billing or Accounts Payable email",cantFind:"Can’t find your business?",cantFindInstruction:"You can continue by manually filling the details below."},address:{title:"Company address",description:"Please add your company registration address",line1:"Address",line2:"Apartment, suite, etc",city:"City",zip:"Postal code"},contact:{title:"User details",description:"Please provide your details for this purchase.",name:"Name",surname:"Last name",email:"Business email address",phone:"Phone number"},otp:{title:"Verify your email",description:"We sent a verification code to",notReceivedText:"Did’t receive the code?",resendCode:"Click to resend",timerBeforeText:"in",timerAfterText:"seconds"},order:{title:"Congratulations!",description:"You’ve been approved to pay with net terms. Select the payment term that best suits your company",totalAmount:"Total amount",confirmOrder:"Confirm order",free:"Free",net7:"Net 7 days",net15:"Net 15 days",net30:"Net 30 days",net45:"Net 45 days",net60:"Net 60 days",net90:"Net 90 days"},success:{title:"Buyer registered",description:"You can execute callback instead of this screen. Check console to see example...",creditDecision:"Credit decision",paymentTerms:"Payment terms",orderPlaced:"You've placed order",transactionId:"Transaction id"},general:{step:"Step",next:"Next",back:"Prev",confirm:"Confirm"},validation:{invalidCountryCode:"Invalid country code",phoneIsShort:"Phone number is too short",phoneIsLong:"Phone number is too long",invalidPhone:"Please input a valid phone number",fillAllFields:"Please fill all required fields",invalidEmail:"Please input a valid email",wrongOtp:"The code you entered is incorrect. Please try again"}}},nl:{translation:{"address.city":"Stad","address.cityExample":"Amsterdam","address.description":"Controleer of dit het juiste adres is door de volgende stap te volgen. Als dit niet het juiste adres is, werk het dan handmatig bij.","address.line1":"Adres","address.line1Example":"Prinsengracht","address.line2":"Appartement, suite, enz.","address.line2Example":"526 H","address.title":"Adres van het bedrijf","address.zip":"Postcode","address.zipExample":"1017 KJ","business.billingEmail":"Facturering of crediteuren e-mail","business.cantFind":"Kan je jouw bedrijf niet vinden?","business.cantFindInstruction":"Je kunt doorgaan door onderstaande gegevens handmatig in te vullen.","business.companyName":"Bedrijfsnaam","business.country":"Land","business.description":"Voer eerst je bedrijfsgegevens in om jouw aankoop goed te keuren.","business.loading":"Laden","business.registrationNumber":"Registratienummer","business.registrationNumberExample":"819770500000","business.search":"Zoeken","business.selectCountry":"Selecteer land","business.startTyping":"Begin met typen","business.title":"Selecteer jouw bedrijf","business.vatId":"BTW-NUMMER","contact.description":"Maak een contactprofiel aan naar wie facturen en betalingsherinneringen zullen worden gestuurd.","contact.email":"E-mail gebruiker","contact.emailExample":"john@company.io","contact.name":"Voornaam","contact.nameExample":"John","contact.phone":"Telefoonnummer","contact.phoneExample":"+3168798526","contact.surname":"Achternaam","contact.surnameExample":"Doe","contact.title":"Contact aanmaken","general.back":"Terug","general.confirm":"Bevestig","general.next":"Volgende","general.step":"Stap","order.confirmOrder":"Bevestig bestelling","order.description":"je bent goedgekeurd om met netto termijnen te betalen. Selecteer de betalingstermijn die het beste bij jouw bedrijf past","order.free":"Gratis","order.net15":"Netto 15 dagen","order.net30":"Netto 30 dagen","order.net45":"Netto 45 dagen","order.net60":"Netto 60 dagen","order.net7":"Netto 7 dagen","order.net90":"Netto 90 dagen","order.title":"Gefeliciteerd!","order.totalAmount":"Totaal bedrag","otp.description":"Om er zeker van te zijn dat je het echt bent, hebben we een code gestuurd naar","otp.notReceivedText":"Als je de code niet hebt ontvangen, controleer dan je spamfolder of","otp.resendCode":"code opnieuw verzenden","otp.timerAfterText":"seconden","otp.timerBeforeText":"over","otp.title":"Controleer je e-mail","regNumber.errors.deleteFourLastDigits":"Verwijder de laatste 4 cijfers","regNumber.errors.formatIs":"Het formaat van het registratienummer moet zijn","regNumber.errors.itIsVat":"De waarde lijkt een btw-nummer te zijn. Volg het formaat zoals","regNumber.errors.required":"Registratienummer en landcode zijn vereist","success.creditDecision":"Kredietbeslissing","success.description":"Je kunt callback uitvoeren in plaats van dit scherm. Controleer de console om een voorbeeld te zien...","success.orderPlaced":"Je hebt een bestelling geplaatst","success.paymentTerms":"Betalingsvoorwaarden","success.title":"Koper geregistreerd","success.transactionId":"Transactie-id","validation.fillAllFields":"Gelieve alle verplichte velden in te vullen","validation.invalidCountryCode":"Ongeldige landcode","validation.invalidEmail":"Voer een geldig e-mailadres in","validation.invalidPhone":"Voer een geldig telefoonnummer in","validation.phoneIsLong":"Het telefoonnummer is te lang","validation.phoneIsShort":"Het telefoonnummer is te kort","validation.wrongOtp":"De ingevoerde code is onjuist. Probeer het opnieuw"}},de:{translation:{"address.city":"Stadt","address.cityExample":"Amsterdam","address.description":"Vergewissere Dich, dass dies die richtige Adresse ist, bevor Du auf Weiter klickst. Wenn dies nicht die richtige Adresse ist, aktualisiere sie bitte manuell.","address.line1":"Adresse","address.line1Example":"Prinsengracht","address.line2":"Wohnung, Appartement, etc.","address.line2Example":"526 H","address.title":"Adresse des Unternehmens","address.zip":"Postleitzahl","address.zipExample":"1017 KJ","business.billingEmail":"Geschäftliche E-Mail-Adresse","business.cantFind":"Du kannst Dein Unternehmen nicht finden?","business.cantFindInstruction":"Du kannst fortfahren, indem Du die folgenden Angaben manuell ausfüllst.","business.companyName":"Name des Unternehmens","business.country":"Land","business.description":"Gebe zunächst Deine Unternehmensdaten ein, um Deinen Kauf zu genehmigen.","business.loading":"Laden","business.registrationNumber":"Handelsregisternummer","business.registrationNumberExample":"819770500000","business.search":"Suche","business.selectCountry":"Land","business.startTyping":"Beginne mit dem Tippen","business.title":"Bitte wähle Dein Unternehmen","business.vatId":"USt-IdNr","contact.description":"Bitte lege ein Kontaktprofil an, an das Rechnungen und Zahlungserinnerungen gesendet werden sollen.","contact.email":"Benutzer-E-Mail","contact.emailExample":"john@company.io","contact.name":"Vorname","contact.nameExample":"John","contact.phone":"Telefonnummer","contact.phoneExample":"+3168798526","contact.surname":"Nachname","contact.surnameExample":"Doe","contact.title":"Kontakt erstellen","general.back":"Zurück","general.confirm":"Bestätigen","general.next":"Weiter","general.step":"Schritt","order.confirmOrder":"Bestellung bestätigen","order.description":"Du wurdest für den Kauf auf Rechnung zugelassen. Wähle das Zahlungsziel, das am besten zu Deinem Unternehmen passt","order.free":"Kostenlos","order.net15":"15 Tage","order.net30":"30 Tage","order.net45":"45 Tage","order.net60":"60 Tage","order.net7":"7 Tage","order.net90":"90 Tage","order.title":"Herzlichen Glückwunsch!","order.totalAmount":"Gesamtbetrag","otp.description":"Um sicherzugehen, dass Du es wirklich bist, haben wir einen Code an diese E-Mail geschickt: ","otp.notReceivedText":"Wenn Sie den Code nicht erhalten haben, überprüfen Sie bitte Ihren Spam-Ordner oder","otp.resendCode":"Code erneut senden","otp.timerAfterText":"Sekunden","otp.timerBeforeText":"in","otp.title":"Überprüfen Deine E-Mail","regNumber.errors.deleteFourLastDigits":"Bitte entfernen Sie die letzten 4 Ziffern","regNumber.errors.formatIs":"Das Format der Handelsregisternummer sollte wie folgt aussehen","regNumber.errors.itIsVat":"Der Wert scheint eine USt-IdNr. zu sein. Bitte folgen Sie dem Format wie","regNumber.errors.required":"Handelsregisternummer und Ländercode sind erforderlich","success.creditDecision":"Kreditentscheidung","success.description":"Du kannst anstelle dieses Bildschirms einen Rückruf (Callback) ausführen. Prüfe die Konsole, um ein Beispiel zu sehen...","success.orderPlaced":"Du hast eine Bestellung aufgegeben","success.paymentTerms":"Zahlungsbedingungen","success.title":"Käufer registriert","success.transactionId":"Transaktions-ID","validation.fillAllFields":"Bitte fülle alle erforderlichen Felder aus","validation.invalidCountryCode":"Ungültiger Ländercode","validation.invalidEmail":"Bitte gebe eine gültige E-Mail ein","validation.invalidPhone":"Bitte gebe eine gültige Telefonnummer ein","validation.phoneIsLong":"Die Telefonnummer ist zu lang","validation.phoneIsShort":"Die Telefonnummer ist zu kurz","validation.wrongOtp":"Der von Dir eingegebene Code ist falsch. Bitte versuche es erneut"}},es:{translation:{"address.city":"Ciudad","address.cityExample":"Amsterdam","address.description":"Confirma que es la dirección correcta siguiendo el siguiente paso. Si esta no es la dirección de tu empresa, actualízala manualmente.","address.line1":"Dirección","address.line1Example":"Prinsengracht","address.line2":"Apartamento, suite, etc.","address.line2Example":"526 H","address.title":"Dirección de la empresa","address.zip":"Código postal","address.zipExample":"1017 KJ","business.billingEmail":"Email de facturación o cuentas a pagar","business.cantFind":"¿No encuentras tu empresa?","business.cantFindInstruction":"Puedes continuar rellenando manualmente los datos de tu empresa.","business.companyName":"Nombre de la empresa","business.country":"País","business.description":"Primero ingresa la información de tu empresa para aprobar tu compra.","business.loading":"Cargando","business.registrationNumber":"Número de registro","business.registrationNumberExample":"819770500000","business.search":"Buscar","business.selectCountry":"Selecciona el país","business.startTyping":"Empieza a escribir","business.title":"Selecciona tu empresa","business.vatId":"VAT ID","contact.description":"Crea un contacto al que se enviarán las facturas y los recordatorios de pago.","contact.email":"Email ","contact.emailExample":"john@company.io","contact.name":"Nombre","contact.nameExample":"Juan","contact.phone":"Número de teléfono","contact.phoneExample":"+3168798526","contact.surname":"Apellido","contact.surnameExample":"Doe","contact.title":"Crear contacto","general.back":"Atrás","general.confirm":"Confirmar","general.next":"Siguiente","general.step":"Paso","order.confirmOrder":"Confirmar pedido","order.description":"Tu empresa ha sido aprobada para pagar con factura. Selecciona el plazo de pago que mejor se adapte a tu empresa","order.free":"Libre","order.net15":"Neto 15 días","order.net30":"Neto 30 días","order.net45":"Neto 45 días","order.net60":"Neto 60 días","order.net7":"Neto 7 días","order.net90":"Neto 90 días","order.title":"¡Felicidades!","order.totalAmount":"La cantidad total","otp.description":"Para asegurarnos de que realmente eres tú, hemos enviado un código a","otp.notReceivedText":"Si no has recibido el código, comprueba tu carpeta de spam o","otp.resendCode":"reenviar código","otp.timerAfterText":"segundos","otp.timerBeforeText":"en","otp.title":"Verifica tu correo electrónico","regNumber.errors.deleteFourLastDigits":"Por favor, elimina los 4 últimos dígitos","regNumber.errors.formatIs":"El formato del número de registro debe ser el siguiente","regNumber.errors.itIsVat":"El valor parece ser un VAT ID. El formato es el siguiente","regNumber.errors.required":"Se requiere el número de registro y el código de país","success.creditDecision":"Decisión de crédito","success.description":"Puede ejecutar callback en lugar de esta pantalla. Compruebe la consola para ver un ejemplo...","success.orderPlaced":"Has realizado el pedido con éxito","success.paymentTerms":"Plazos de pago","success.title":"Comprador registrado","success.transactionId":"Id de transacción","validation.fillAllFields":"Rellena todos los campos obligatorios","validation.invalidCountryCode":"Código de país no válido","validation.invalidEmail":"Por favor, introduce un email válido","validation.invalidPhone":"Ingresa un número de teléfono válido","validation.phoneIsLong":"El número es demasiado largo","validation.phoneIsShort":"El número es demasiado corto","validation.wrongOtp":"El código introducido es incorrecto. Por favor, inténtalo de nuevo."}},fr:{translation:{"address.city":"Ville","address.cityExample":"Amsterdam","address.description":"Confirmez qu'il s'agit de la bonne adresse en passant à l'étape suivante. S'il ne s'agit pas de la bonne adresse, veuillez la mettre à jour manuellement.","address.line1":"Adresse","address.line1Example":"Prinsengracht","address.line2":"Appartement, suite, etc.","address.line2Example":"526 H","address.title":"Adresse de l'entreprise","address.zip":"Code postal","address.zipExample":"1017 KJ","business.billingEmail":"Courriel de la facturation ou des comptes à payer","business.cantFind":"Vous ne trouvez pas votre entreprise ?","business.cantFindInstruction":"Vous pouvez continuer en remplissant manuellement les détails ci-dessous.","business.companyName":"Nom de l'entreprise","business.country":"Pays","business.description":"Saisissez d'abord les informations relatives à votre entreprise pour approuver votre achat.","business.loading":"Chargement","business.registrationNumber":"Numéro d'enregistrement","business.registrationNumberExample":"819770500000","business.search":"Rechercher","business.selectCountry":"Sélectionnez un pays","business.startTyping":"Commencez à taper","business.title":"Veuillez sélectionner votre entreprise","business.vatId":"NUMÉRO DE TVA","contact.description":"Veuillez créer un profil de contact auquel les factures et les rappels de paiement seront envoyés.","contact.email":"Courriel de l'utilisateur","contact.emailExample":"john@company.io","contact.name":"Prénom","contact.nameExample":"Jean","contact.phone":"Numéro de téléphone","contact.phoneExample":"+3168798526","contact.surname":"Nom de famille","contact.surnameExample":"Une biche","contact.title":"Créer un contact","general.back":"Retour","general.confirm":"Confirmer","general.next":"Suivant","general.step":"Étape","order.confirmOrder":"Confirmer la commande","order.description":"Vous avez été autorisé à payer avec des conditions nettes. Sélectionnez le délai de paiement qui convient le mieux à votre entreprise","order.free":"Gratuit","order.net15":"Net 15 jours","order.net30":"Net 30 jours","order.net45":"Net 45 jours","order.net60":"Net 60 jours","order.net7":"Net 7 jours","order.net90":"Net 90 jours","order.title":"Félicitations !","order.totalAmount":"Montant total","otp.description":"Pour s'assurer qu'il s'agit bien de vous, nous avons envoyé un code à","otp.notReceivedText":"Si vous n'avez pas reçu le code, veuillez vérifier votre dossier spam ou","otp.resendCode":"Renvoyer le code","otp.timerAfterText":"secondes","otp.timerBeforeText":"en","otp.title":"Vérifiez votre adresse électronique","regNumber.errors.deleteFourLastDigits":"Veuillez enlever les 4 derniers chiffres","regNumber.errors.formatIs":"Le format du numéro d'enregistrement doit être le suivant","regNumber.errors.itIsVat":"La valeur semble être un numéro de TVA. Veuillez suivre le format suivant","regNumber.errors.required":"Le numéro d'enregistrement et le code pays sont requis","success.creditDecision":"Décision de crédit","success.description":"Vous pouvez exécuter un callback au lieu de cet écran. Vérifiez la console pour voir un exemple...","success.orderPlaced":"Vous avez passé commande","success.paymentTerms":"Conditions de paiement","success.title":"Acheteur enregistré","success.transactionId":"Identifiant de la transaction","validation.fillAllFields":"Veuillez remplir tous les champs obligatoires","validation.invalidCountryCode":"Code pays non valide","validation.invalidEmail":"Veuillez saisir une adresse électronique valide","validation.invalidPhone":"Veuillez saisir un numéro de téléphone valide","validation.phoneIsLong":"Le numéro de téléphone est trop long","validation.phoneIsShort":"Le numéro de téléphone est trop court","validation.wrongOtp":"Le code que vous avez saisi est incorrect. Veuillez réessayer"}}};class me{constructor(){this.open=async({getTokenUrl:e="",token:n="",env:t="sandbox",lang:r="en",onBuyerResponse:s,onOrderCreated:i,order:a,buyerId:l})=>{let u;if(s&&(ue.onBuyerResponse=s),i&&(ue.onOrderCreated=i),a&&(ue.order=a),e){const n=await fetch(`${e}`);u=await n.json()}(u&&u.access||n)&&(await d.default.init({lng:r,debug:"development"===process.env.NODE_ENV,resources:pe}),document.getElementsByTagName("body")[0].insertAdjacentHTML("beforeend",`<sprinque-modal token=${n||u.access} getTokenUrl=${e} env=${t} ${l&&`buyer-id=${l}`} lang=${r} />`),window.customElements.get(c)||window.customElements.define(c,ue)),"localhost"!==location.hostname&&o.init({orgId:"o-1ESJKB-na1"})},this.close=()=>{P()}}}const be=new me,ge=be.open,ve=be.close;e.Sprinque=me,e.close=ve,e.open=ge,Object.defineProperty(e,"__esModule",{value:!0})}));