/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = "./src/js/view/login-register.js");
/******/ })
/************************************************************************/
/******/ ({

/***/ "./src/js/view/login-register.js":
/*!***************************************!*\
  !*** ./src/js/view/login-register.js ***!
  \***************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("eael.hooks.addAction(\"init\", \"ea\", function () {\n  if (eael.elementStatusCheck('eaelLoginRegister')) {\n    return false;\n  }\n  var EALoginRegister = function EALoginRegister($scope, $) {\n    var $wrap = $scope.find('.eael-login-registration-wrapper'); // cache wrapper\n    var widgetId = $wrap.data('widget-id');\n    var recaptchaSiteKey = $wrap.data('recaptcha-sitekey');\n    var recaptchaSiteKeyV3 = $wrap.data('recaptcha-sitekey-v3');\n    var isProAndAjaxEnabled = typeof $wrap.data('is-ajax') !== 'undefined' && $wrap.data('is-ajax') == 'yes';\n    var loggedInLocation = $scope.find('[data-logged-in-location]').data('logged-in-location');\n    var $loginFormWrapper = $scope.find(\"#eael-login-form-wrapper\");\n    var $lostpasswordFormWrapper = $scope.find(\"#eael-lostpassword-form-wrapper\");\n    var $resetpasswordFormWrapper = $scope.find(\"#eael-resetpassword-form-wrapper\");\n    var loginRcTheme = $loginFormWrapper.data('recaptcha-theme');\n    var loginRcSize = $loginFormWrapper.data('recaptcha-size');\n    var $regFormWrapper = $scope.find(\"#eael-register-form-wrapper\");\n    var regRcTheme = $regFormWrapper.data('recaptcha-theme');\n    var regRcSize = $regFormWrapper.data('recaptcha-size');\n    var lostpasswordRcTheme = $lostpasswordFormWrapper.data('recaptcha-theme');\n    var lostpasswordRcSize = $lostpasswordFormWrapper.data('recaptcha-size');\n    var loginRecaptchaVersion = $wrap.data('login-recaptcha-version');\n    var registerRecaptchaVersion = $wrap.data('register-recaptcha-version');\n    var lostpasswordRecaptchaVersion = $wrap.data('lostpassword-recaptcha-version');\n    var $regLinkAction = $scope.find('#eael-lr-reg-toggle');\n    var $loginLinkAction = $scope.find('#eael-lr-login-toggle');\n    var $lostpasswordLinkAction = $scope.find('#eael-lr-lostpassword-toggle');\n    var $lostpasswordLoginLinkAction = $scope.find('#eael-lr-login-toggle-lostpassword');\n    var $passField = $loginFormWrapper.find('#eael-user-password');\n    var $passFieldRegister = $regFormWrapper.find('#form-field-password');\n    var $passConfirmFieldRegister = $regFormWrapper.find('#form-field-confirm_pass');\n    var $pass1Field = $resetpasswordFormWrapper.find('#eael-pass1');\n    var $pass2Field = $resetpasswordFormWrapper.find('#eael-pass2');\n    var recaptchaAvailable = typeof grecaptcha !== 'undefined' && grecaptcha !== null;\n    var params = new URLSearchParams(location.search);\n    var loginRecaptchaNode = document.getElementById('login-recaptcha-node-' + widgetId);\n    var registerRecaptchaNode = document.getElementById('register-recaptcha-node-' + widgetId);\n    var lostpasswordRecaptchaNode = document.getElementById('lostpassword-recaptcha-node-' + widgetId);\n    if (loggedInLocation !== undefined && loggedInLocation !== '') {\n      location.replace(loggedInLocation);\n    }\n    if ('form' === $regLinkAction.data('action')) {\n      $regLinkAction.on('click', function (e) {\n        e.preventDefault();\n        if (params.has('eael-lostpassword')) {\n          params[\"delete\"]('eael-lostpassword');\n        }\n        if (!params.has('eael-register')) {\n          params.append('eael-register', 1);\n        }\n        window.history.replaceState({}, '', \"\".concat(location.pathname, \"?\").concat(params));\n        $loginFormWrapper.hide();\n        $lostpasswordFormWrapper.hide();\n        $regFormWrapper.fadeIn();\n      });\n    }\n    if ('form' === $loginLinkAction.data('action')) {\n      $loginLinkAction.on('click', function (e) {\n        if (params.has('eael-register')) {\n          params[\"delete\"]('eael-register');\n        } else if (params.has('eael-lostpassword')) {\n          params[\"delete\"]('eael-lostpassword');\n        }\n        window.history.replaceState({}, '', \"\".concat(location.pathname, \"?\").concat(params));\n        e.preventDefault();\n        $regFormWrapper.hide();\n        $regFormWrapper.find('.eael-form-validation-container').html('');\n        $lostpasswordFormWrapper.hide();\n        $loginFormWrapper.fadeIn();\n      });\n    }\n    if ('form' === $lostpasswordLoginLinkAction.data('action')) {\n      $lostpasswordLoginLinkAction.on('click', function (e) {\n        if (params.has('eael-register')) {\n          params[\"delete\"]('eael-register');\n        } else if (params.has('eael-lostpassword')) {\n          params[\"delete\"]('eael-lostpassword');\n        }\n        window.history.replaceState({}, '', \"\".concat(location.pathname, \"?\").concat(params));\n        e.preventDefault();\n        $lostpasswordFormWrapper.hide();\n        $regFormWrapper.hide();\n        $loginFormWrapper.fadeIn();\n      });\n    }\n    if ('form' === $lostpasswordLinkAction.data('action')) {\n      $lostpasswordLinkAction.on('click', function (e) {\n        e.preventDefault();\n        if (!params.has('eael-lostpassword')) {\n          params.append('eael-lostpassword', 1);\n        }\n        window.history.replaceState({}, '', \"\".concat(location.pathname, \"?\").concat(params));\n        $lostpasswordFormWrapper.find('.eael-form-validation-container').html('');\n        $lostpasswordFormWrapper.find(\".eael-lr-form-group\").css(\"display\", 'bloock').removeClass('eael-d-none');\n        $lostpasswordFormWrapper.find(\"#eael-lostpassword-submit\").css(\"display\", 'bloock').removeClass('eael-d-none');\n        $regFormWrapper.hide();\n        $loginFormWrapper.hide();\n        $lostpasswordFormWrapper.fadeIn();\n      });\n    }\n\n    // Password Visibility Toggle\n    $(document).on('click', '#wp-hide-pw, #wp-hide-pw1, #wp-hide-pw2, #wp-hide-pw-register', function (e) {\n      var $buttonId = $(this).attr('id');\n      switch ($buttonId) {\n        case 'wp-hide-pw1':\n          togglePasswordVisibility($pass1Field);\n          togglePasswordVisibility($pass2Field);\n          break;\n        case 'wp-hide-pw2':\n          togglePasswordVisibility($pass2Field);\n          break;\n        case 'wp-hide-pw-register':\n          togglePasswordVisibility($passFieldRegister);\n          if ($passConfirmFieldRegister) {\n            togglePasswordVisibility($passConfirmFieldRegister);\n          }\n          break;\n        default:\n          togglePasswordVisibility($passField);\n          break;\n      }\n    });\n    function togglePasswordVisibility($selector) {\n      var fieldType = $selector.attr('type') === 'text' ? 'password' : 'text';\n      $selector.attr('type', fieldType);\n      $icon = $selector.parent().find('span');\n      if (fieldType === 'password') {\n        $icon.removeClass('dashicons-hidden').addClass('dashicons-visibility');\n      } else {\n        $icon.removeClass('dashicons-visibility').addClass('dashicons-hidden');\n      }\n    }\n    function getCookie(cname) {\n      var name = cname + \"=\",\n        decodedCookie = decodeURIComponent(document.cookie),\n        ca = decodedCookie.split(';');\n      for (var i = 0; i < ca.length; i++) {\n        var c = ca[i];\n        while (c.charAt(0) == ' ') {\n          c = c.substring(1);\n        }\n        if (c.indexOf(name) == 0) {\n          return c.substring(name.length, c.length);\n        }\n      }\n      return \"\";\n    }\n    function removeCookie(cname) {\n      document.cookie = cname + \"=;Max-Age=0;\";\n    }\n    $(document).ready(function () {\n      //Validation error message is not show when the Registration page is selected\n      $(\"[name='eael-login-submit']\").on('click', function () {\n        localStorage.setItem('eael-is-login-form', 'true');\n      });\n      var eael_get_login_status = localStorage.getItem('eael-is-login-form');\n      if (eael_get_login_status === 'true') {\n        localStorage.removeItem('eael-is-login-form');\n        setTimeout(function () {\n          $('#eael-lr-login-toggle').trigger('click');\n        }, 100);\n      }\n\n      //\n      var eaelGetTokenPromise = new Promise(function (eaelGetTokenResolve, eaelGetTokenReject) {\n        eael.getToken();\n        var interval = setInterval(function () {\n          if (eael.noncegenerated === true && typeof localize.nonce !== 'undefined') {\n            eaelGetTokenResolve(localize.nonce);\n            clearInterval(interval);\n          }\n        }, 100);\n      });\n      eaelGetTokenPromise.then(function (updatedNonce) {\n        $('#eael-login-nonce, #eael-register-nonce, #eael-lostpassword-nonce, #eael-resetpassword-nonce').val(updatedNonce);\n      });\n      if (!isProAndAjaxEnabled) {\n        var isRecaptchaVersion3 = false;\n        isRecaptchaVersion3 = loginRecaptchaVersion === 'v3' || registerRecaptchaVersion === 'v3' || lostpasswordRecaptchaVersion === 'v3';\n        if (recaptchaAvailable && isRecaptchaVersion3) {\n          grecaptcha.ready(function () {\n            grecaptcha.execute(recaptchaSiteKeyV3, {\n              action: 'eael_login_register_form'\n            }).then(function (token) {\n              if ($('form input[name=\"g-recaptcha-response\"]', $scope).length === 0) {\n                $('form', $scope).append('<input type=\"hidden\" name=\"g-recaptcha-response\" value=\"' + token + '\">');\n              } else {\n                $('form input[name=\"g-recaptcha-response\"]', $scope).val(token);\n              }\n            });\n          });\n        }\n      }\n      var errormessage = getCookie('eael_login_error_' + widgetId);\n      if (errormessage) {\n        $('.eael-form-validation-container', $scope).html(\"<p class=\\\"eael-form-msg invalid\\\">\".concat(DOMPurify.sanitize(errormessage), \"</p>\"));\n        removeCookie('eael_login_error_' + widgetId);\n      }\n\n      //This register error message\n      var registerErrorMessage = getCookie('eael_register_errors_' + widgetId);\n      if (registerErrorMessage) {\n        $('.eael-form-validation-container', $scope).html(\"<div class=\\\"eael-form-msg invalid\\\">\".concat(DOMPurify.sanitize(registerErrorMessage), \"</div>\"));\n        removeCookie('eael_register_errors_' + widgetId);\n      }\n    });\n\n    // reCAPTCHA\n    function onloadLRcb() {\n      if (typeof grecaptcha.render != \"function\") {\n        return false;\n      }\n      if (loginRecaptchaNode) {\n        if (registerRecaptchaVersion !== 'v3' && lostpasswordRecaptchaVersion !== 'v3') {\n          try {\n            grecaptcha.render(loginRecaptchaNode, {\n              'sitekey': recaptchaSiteKey,\n              'theme': loginRcTheme,\n              'size': loginRcSize\n            });\n          } catch (error) {\n            // duplicate instance\n          }\n        }\n      }\n      if (registerRecaptchaNode) {\n        if (loginRecaptchaVersion !== 'v3' && lostpasswordRecaptchaVersion !== 'v3') {\n          try {\n            grecaptcha.render(registerRecaptchaNode, {\n              'sitekey': recaptchaSiteKey,\n              'theme': regRcTheme,\n              'size': regRcSize\n            });\n          } catch (error) {\n            // duplicate instance\n          }\n        }\n      }\n      if (lostpasswordRecaptchaNode) {\n        if (loginRecaptchaVersion !== 'v3' && registerRecaptchaVersion !== 'v3') {\n          try {\n            grecaptcha.render(lostpasswordRecaptchaNode, {\n              'sitekey': recaptchaSiteKey,\n              'theme': lostpasswordRcTheme,\n              'size': lostpasswordRcSize\n            });\n          } catch (error) {\n            // duplicate instance\n          }\n        }\n      }\n    }\n\n    // ============================================================\n    // Email OTP Verification\n    // ============================================================\n    var $loginOtp = $loginFormWrapper.find('.eael-lr-otp-wrapper');\n    var $registerOtp = $regFormWrapper.find('.eael-lr-otp-wrapper');\n\n    // The Pro plugin renders an animated character (`.eael-animated-character-wrapper`) above\n    // the login form via the `eael/login-register/before-login-form` action. When the OTP UI\n    // takes over the form area we need to hide that character too, otherwise it floats over\n    // an empty space above the OTP input. We resolve it relative to the OTP wrapper so multiple\n    // widgets on the same page are correctly scoped.\n    function eaelOtpHideCharacter($otpEl) {\n      var $formContainer = $otpEl.closest('.lr-form-wrapper');\n      var $character = $formContainer.length ? $formContainer.find('.eael-animated-character-wrapper') : $otpEl.closest('section').find('.eael-animated-character-wrapper');\n      if ($character.length) {\n        $character.hide();\n      }\n    }\n    function eaelOtpShow($otpEl, $formEl, response) {\n      if (!$otpEl || !$otpEl.length) {\n        return;\n      }\n      if (response && response.otp_token) {\n        $otpEl.find('.eael-lr-otp-token').val(response.otp_token);\n      }\n      if (response && response.otp_cooldown) {\n        $otpEl.attr('data-cooldown', response.otp_cooldown);\n      }\n      $otpEl.removeClass('eael-d-none');\n      if ($formEl && $formEl.length) {\n        $formEl.hide();\n      }\n      eaelOtpHideCharacter($otpEl);\n      eaelOtpStartCooldown($otpEl);\n      var $msg = $otpEl.find('.eael-lr-otp-message');\n      if (response && response.message) {\n        $msg.removeClass('invalid').addClass('valid').text(response.message);\n      } else {\n        $msg.removeClass('invalid valid').text('');\n      }\n      $otpEl.find('.eael-lr-otp-input').val('').trigger('focus');\n    }\n    function eaelOtpStartCooldown($otpEl, overrideRemaining) {\n      var fullCooldown = parseInt($otpEl.attr('data-cooldown'), 10) || 60;\n      var $resend = $otpEl.find('.eael-lr-otp-resend');\n      var $cdText = $otpEl.find('.eael-lr-otp-cooldown-text');\n      var remaining = typeof overrideRemaining === 'number' && !isNaN(overrideRemaining) ? overrideRemaining : fullCooldown;\n\n      // Bust any previous countdown so resend → restart works without piling up intervals.\n      var prevInterval = $otpEl.data('cooldown-interval');\n      if (prevInterval) {\n        clearInterval(prevInterval);\n      }\n      if (remaining <= 0) {\n        $resend.removeClass('eael-lr-otp-disabled').removeAttr('aria-disabled');\n        $cdText.text('');\n        return;\n      }\n      $resend.addClass('eael-lr-otp-disabled').attr('aria-disabled', 'true');\n      $cdText.text(' (' + remaining + 's)');\n      var interval = setInterval(function () {\n        remaining--;\n        if (remaining <= 0) {\n          clearInterval(interval);\n          $otpEl.removeData('cooldown-interval');\n          $resend.removeClass('eael-lr-otp-disabled').removeAttr('aria-disabled');\n          $cdText.text('');\n          return;\n        }\n        $cdText.text(' (' + remaining + 's)');\n      }, 1000);\n      $otpEl.data('cooldown-interval', interval);\n    }\n    function eaelOtpVerify($otpEl) {\n      var token = $otpEl.find('.eael-lr-otp-token').val();\n      var code = $otpEl.find('.eael-lr-otp-input').val();\n      var $msg = $otpEl.find('.eael-lr-otp-message');\n      var $btn = $otpEl.find('.eael-lr-otp-verify-btn');\n      if (!token) {\n        $msg.removeClass('valid').addClass('invalid').text('Verification session expired. Please start over.');\n        return;\n      }\n      if (!/^\\d{6}$/.test(code)) {\n        $msg.removeClass('valid').addClass('invalid').text('Please enter the 6-digit code.');\n        return;\n      }\n      $btn.prop('disabled', true);\n      $.ajax({\n        url: $otpEl.data('ajax-url'),\n        method: 'POST',\n        dataType: 'json',\n        data: {\n          action: 'eael_lr_verify_otp',\n          _eael_otp_nonce: $otpEl.data('otp-nonce'),\n          otp_token: token,\n          otp_code: code\n        }\n      }).done(function (response) {\n        if (response && response.success) {\n          // 1) Show the success message in the OTP message slot, in a clearly successful state.\n          // 2) Disable the input/resend so the user can't keep poking at a verified session.\n          // 3) Hold for ~4s so the user actually reads the message.\n          // 4) Then either redirect (if the server provided a URL) or reload to land them on\n          //    the post-success state of the page.\n          $msg.removeClass('invalid').addClass('valid').text(response.data.message || 'Verified successfully.');\n          $otpEl.find('.eael-lr-otp-input').prop('disabled', true);\n          $otpEl.find('.eael-lr-otp-resend').addClass('eael-lr-otp-disabled').attr('aria-disabled', 'true');\n          $btn.prop('disabled', true);\n          setTimeout(function () {\n            if (response.data.redirect_to) {\n              window.location.href = response.data.redirect_to;\n            } else {\n              window.location.reload();\n            }\n          }, 4000);\n        } else {\n          var m = response && response.data && response.data.message ? response.data.message : 'Verification failed.';\n          $msg.removeClass('valid').addClass('invalid').text(m);\n          $btn.prop('disabled', false);\n        }\n      }).fail(function () {\n        $msg.removeClass('valid').addClass('invalid').text('Network error. Please try again.');\n        $btn.prop('disabled', false);\n      });\n    }\n    function eaelOtpResend($otpEl) {\n      var token = $otpEl.find('.eael-lr-otp-token').val();\n      var $msg = $otpEl.find('.eael-lr-otp-message');\n      var $resend = $otpEl.find('.eael-lr-otp-resend');\n      if ($resend.hasClass('eael-lr-otp-disabled')) {\n        return;\n      }\n      if (!token) {\n        $msg.removeClass('valid').addClass('invalid').text('Verification session expired. Please start over.');\n        return;\n      }\n      $.ajax({\n        url: $otpEl.data('ajax-url'),\n        method: 'POST',\n        dataType: 'json',\n        data: {\n          action: 'eael_lr_send_otp',\n          _eael_otp_nonce: $otpEl.data('otp-nonce'),\n          otp_token: token\n        }\n      }).done(function (response) {\n        if (response && response.success) {\n          if (response.data.cooldown) {\n            $otpEl.attr('data-cooldown', response.data.cooldown);\n          }\n          $msg.removeClass('invalid').addClass('valid').text(response.data.message || 'A new code has been sent.');\n          eaelOtpStartCooldown($otpEl);\n        } else {\n          var m = response && response.data && response.data.message ? response.data.message : 'Could not resend code.';\n          $msg.removeClass('valid').addClass('invalid').text(m);\n        }\n      }).fail(function () {\n        $msg.removeClass('valid').addClass('invalid').text('Network error. Please try again.');\n      });\n    }\n\n    // Bind verify and resend handlers.\n    $scope.find('.eael-lr-otp-wrapper').each(function () {\n      var $otpEl = $(this);\n      var isPreview = $otpEl.hasClass('eael-lr-otp-editor-preview');\n      var hasToken = !!$otpEl.find('.eael-lr-otp-token').val();\n      var isAutoShow = !$otpEl.hasClass('eael-d-none') && hasToken;\n\n      // If the OTP UI was rendered visible (cookie-based reload after non-AJAX submission)\n      // OR an editor-only preview is active, surface the wrapper and ensure the parent\n      // section isn't being suppressed by the form's default-hide class.\n      if (isAutoShow || isPreview) {\n        $otpEl.removeClass('eael-d-none');\n        $otpEl.closest('section').removeClass('eael-lr-d-none');\n\n        // Hide the corresponding form so only the OTP UI is visible.\n        if ($otpEl.data('flow') === 'login') {\n          $loginFormWrapper.find('form#eael-login-form').hide();\n          $loginFormWrapper.removeClass('eael-lr-d-none');\n        } else if ($otpEl.data('flow') === 'register') {\n          $regFormWrapper.find('form#eael-register-form').hide();\n          $regFormWrapper.removeClass('eael-lr-d-none');\n        }\n\n        // Also hide the Pro animated character if it's present.\n        eaelOtpHideCharacter($otpEl);\n        if (isAutoShow) {\n          // One-shot cookie — drop it now so a refresh after success doesn't replay.\n          var _widgetId = $otpEl.data('widget-id');\n          var cookiePath = typeof eaelLR !== 'undefined' && eaelLR.cookiePath ? eaelLR.cookiePath : '/';\n          document.cookie = 'eael_lr_otp_token_' + _widgetId + '=; Max-Age=0; path=' + cookiePath;\n\n          // Resume the cooldown from where it left off across page reloads.\n          // PHP computes the remaining seconds from the OTP transient (`last_sent` + `cooldown`)\n          // and ships it via data-remaining-cooldown. If 0, the resend link is immediately enabled.\n          var remaining = parseInt($otpEl.attr('data-remaining-cooldown'), 10);\n          eaelOtpStartCooldown($otpEl, isNaN(remaining) ? undefined : remaining);\n        }\n      }\n      $otpEl.on('click', '.eael-lr-otp-verify-btn', function (e) {\n        e.preventDefault();\n        eaelOtpVerify($otpEl);\n      });\n      $otpEl.on('keydown', '.eael-lr-otp-input', function (e) {\n        if (e.key === 'Enter') {\n          e.preventDefault();\n          eaelOtpVerify($otpEl);\n        }\n      });\n      $otpEl.on('click', '.eael-lr-otp-resend', function (e) {\n        e.preventDefault();\n        eaelOtpResend($otpEl);\n      });\n    });\n\n    // Global AJAX listener: catches any login/register submission (Pro AJAX path or otherwise)\n    // whose response carries `otp_required: true`, regardless of which JS layer fired the request.\n    // Scoped via .eaelOtp namespace and rebound per-widget so multiple widgets on a page each get\n    // routed to their own OTP wrapper.\n    $(document).off('ajaxSuccess.eaelOtp_' + widgetId).on('ajaxSuccess.eaelOtp_' + widgetId, function (event, xhr, settings) {\n      var response = xhr.responseJSON;\n      if (typeof response === 'undefined') {\n        try {\n          response = JSON.parse(xhr.responseText);\n        } catch (e) {\n          return;\n        }\n      }\n      if (!response || !response.success || !response.data || !response.data.otp_required) {\n        return;\n      }\n\n      // Identify which form fired the request by sniffing the serialized POST body.\n      // We deliberately key off the per-form nonce fields (`eael-login-nonce` /\n      // `eael-register-nonce`) rather than the submit-button names — jQuery's $form.serialize()\n      // does NOT include <input type=\"submit\"> values, so the previous sniff was always false\n      // for the Pro AJAX path. The nonce fields are guaranteed hidden inputs and always serialize.\n      var body = typeof settings.data === 'string' ? settings.data : '';\n      var isRegister = body.indexOf('eael-register-nonce') !== -1;\n      var isLogin = body.indexOf('eael-login-nonce') !== -1 && !isRegister;\n\n      // Make sure the response is for *this* widget instance (not another on the same page).\n      if (body.indexOf('widget_id=' + encodeURIComponent(widgetId)) === -1 && body.indexOf('widget_id=' + widgetId) === -1) {\n        return;\n      }\n      if (isRegister && $registerOtp.length) {\n        eaelOtpShow($registerOtp, $regFormWrapper.find('form#eael-register-form'), response.data);\n      } else if (isLogin && $loginOtp.length) {\n        eaelOtpShow($loginOtp, $loginFormWrapper.find('form#eael-login-form'), response.data);\n      }\n    });\n\n    // ============================================================\n    // Prevent Pro AJAX handler from reloading when OTP is required\n    // ============================================================\n    // Pro's eaelAjaxCall() treats any { success: true } response as \"done\" and schedules\n    // location.reload() after 1 s for login forms, regardless of content.\n    // When OTP is required the PHP returns wp_send_json_success({ otp_required: true }),\n    // so Pro's timer fires and wipes the OTP form off the screen.\n    //\n    // We intercept via $.ajaxPrefilter — scoped to this widget's login/register\n    // submissions — and skip Pro's success callback when otp_required is set.\n    // Our ajaxSuccess listener above handles the OTP display, so nothing is lost.\n    $.ajaxPrefilter(function (filterOptions) {\n      var reqData = typeof filterOptions.data === 'string' ? filterOptions.data : '';\n      var isThisWidget = reqData.indexOf('widget_id=' + encodeURIComponent(widgetId)) !== -1 || reqData.indexOf('widget_id=' + widgetId) !== -1;\n      var isLoginOrRegister = reqData.indexOf('eael-login-nonce') !== -1 || reqData.indexOf('eael-register-nonce') !== -1;\n      if (!isThisWidget || !isLoginOrRegister || !filterOptions.success) {\n        return;\n      }\n      var origSuccess = filterOptions.success;\n      filterOptions.success = function (data) {\n        if (data && data.success && data.data && data.data.otp_required) {\n          // OTP response: bail out of Pro's handler so no reload is scheduled.\n          // The ajaxSuccess listener scoped to this widget will show the OTP form.\n          return;\n        }\n        origSuccess.apply(this, arguments);\n      };\n    });\n\n    // Also expose the legacy hook for any custom integrations that explicitly fire it.\n    if (typeof eael !== 'undefined' && eael.hooks && eael.hooks.addAction) {\n      eael.hooks.addAction('eael/lr/ajax-response', 'ea_' + widgetId, function (response, $form) {\n        if (!response || !response.success || !response.data || !response.data.otp_required) {\n          return;\n        }\n        if ($form && $form.attr('id') === 'eael-login-form') {\n          eaelOtpShow($loginOtp, $loginFormWrapper.find('form#eael-login-form'), response.data);\n        } else if ($form && $form.attr('id') === 'eael-register-form') {\n          eaelOtpShow($registerOtp, $regFormWrapper.find('form#eael-register-form'), response.data);\n        }\n      });\n    }\n    if (recaptchaAvailable && isEditMode) {\n      // on elementor editor, window load event already fired, so run recaptcha\n      onloadLRcb();\n    } else {\n      // on frontend, load even is yet to fire, so wait and fire recaptcha\n      var navData = window.performance.getEntriesByType(\"navigation\");\n      if (navData.length > 0 && navData[0].loadEventEnd > 0) {\n        if (recaptchaAvailable) {\n          onloadLRcb();\n        }\n      } else {\n        $(window).on('load', function () {\n          if (recaptchaAvailable) {\n            onloadLRcb();\n          }\n        });\n      }\n    }\n  };\n  elementorFrontend.hooks.addAction(\"frontend/element_ready/eael-login-register.default\", EALoginRegister);\n  function renderTurnstile($scope) {\n    if ($scope.find('.eael-login-registration-wrapper').length) {\n      var $turnstiles = $scope.find('.cf-turnstile');\n      if ($turnstiles.length && typeof turnstile !== 'undefined') {\n        $turnstiles.each(function () {\n          turnstile.render(this);\n        });\n      }\n    }\n  }\n  jQuery(document).on('elementor/popup/show', function (event, id, instance) {\n    renderTurnstile(instance.$element);\n  });\n  eael.hooks.addAction(\"ea-lightbox-triggered\", \"ea\", function ($selector) {\n    var $scope = jQuery($selector);\n    $scope.find('.cf-turnstile').html('');\n    renderTurnstile($scope);\n  });\n});\n\n//# sourceURL=webpack:///./src/js/view/login-register.js?");

/***/ })

/******/ });