{"version":3,"file":"js/3002-ec8e662c07b864ba9d95.chunk.js","mappings":"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","sources":["webpack://agra/./app/javascript/recaptcha.js","webpack://agra/./app/javascript/turnstile.js","webpack://agra/./app/javascript/components/buttons/recaptcha-submit-button.vue","webpack://agra/./app/javascript/components/buttons/recaptcha-submit-button.vue?57d8","webpack://agra/./app/javascript/components/buttons/turnstile-submit-button.vue","webpack://agra/./app/javascript/components/buttons/turnstile-submit-button.vue?ea9c","webpack://agra/./app/javascript/components/buttons/bot-protected-submit-button.vue","webpack://agra/./app/javascript/components/buttons/bot-protected-submit-button.vue?be28","webpack://agra/./app/javascript/components/buttons/friendly-captcha-submit-button.vue","webpack://agra/./app/javascript/components/buttons/friendly-captcha-submit-button.vue?3f41","webpack://agra/./app/javascript/components/buttons/hcaptcha-submit-button.vue","webpack://agra/./app/javascript/components/buttons/hcaptcha-submit-button.vue?ec2a"],"sourcesContent":["import Rails from '@rails/ujs'\n\nimport 'form-request-submit-polyfill'\nimport { domReady } from 'utils/dom-ready'\n\nlet initialized = false\nlet submittingForm = false\n\n// global from Google reCAPTCHA script include.\n/* eslint-disable no-undef */\n\nexport async function waitForRecaptchaLoaded(delay) {\n  return new Promise((resolve, reject) => {\n    if (typeof grecaptcha !== 'undefined' && grecaptcha !== null) {\n      resolve(grecaptcha)\n    } else {\n      // delay up to 10 seconds, checking with an increasing backoff.\n      if (delay < 10000) {\n        console.log('delaying ' + delay)\n\n        setTimeout(async function() {\n          resolve(await waitForRecaptchaLoaded(delay * 2))\n        }, delay)\n\n      } else {\n        reject('Google recaptcha service did not load')\n      }\n    }\n  })\n}\n\n// export for jest test\nexport async function waitForRecaptchaToken(recaptchaLoader, tokenField, targetForm) {\n  await waitForRecaptchaLoaded(200)\n  return new Promise((resolve) => {\n    grecaptcha.ready(() => {\n      grecaptcha.execute(window.Agra.Configuration.botProtection.siteKey, {\n        action: targetForm.dataset['captchaAction']\n      }).then((token) => {\n        tokenField.value = token\n        resolve(token)\n      })\n    })\n  })\n}\n\n// This method is used to enable reCAPTCHA on rails-ujs forms (not forms rendered by Vue).\nfunction setupRecaptcha() {\n  if (initialized) {\n    errorLogger.error('Re-initializing reCAPTCHA')\n  }\n\n  const recaptchaForms = Array.from(document.getElementsByClassName('bot-protected-form'))\n  const recaptchaLoader = document.getElementById('recaptcha-loader')\n\n  if (recaptchaForms !== null && recaptchaLoader !== null) {\n    // A page may contain several forms protected by reCAPTCHA. Need to hook to\n    // all of them to set the token on submit\n    recaptchaForms.forEach( (recaptchaForm) => {\n      recaptchaForm.addEventListener('ajax:complete', () => {\n        submittingForm = false\n      })\n\n      // We handle the event `submit` here, not `ajax:before`,\n      // because Rails full-page forms do not emit the event `ajax:before`.\n      recaptchaForm.addEventListener('submit', (event) => {\n        return recaptchaSubmit(event, recaptchaLoader)\n      })\n    })\n  }\n}\n\nfunction recaptchaSubmit(event, recaptchaLoader) {\n  console.log('performing submit')\n\n  const targetForm = event.target\n  // There may be more than one recaptcha token field in the page, so we ensure we retrieve\n  // the correct one scoping the search to the currently submitted form.\n  const tokenField = targetForm.querySelector('#recaptcha_token')\n\n  // If the token has already been filled in, great! Submit the form\n  if (tokenField.value.length > 0) {\n    return true // continue with the form submit\n  }\n\n  // Don't go through with this submit, will be re-submitted after recaptcha\n  // token is set and the .requestSubmit() call below is executed.\n  event.preventDefault()\n  event.stopPropagation()\n\n  Rails.disableElement(targetForm)\n\n  waitForRecaptchaToken(recaptchaLoader, tokenField, targetForm).then(function() {\n    if (submittingForm) {\n      errorLogger.error('Submitting form while last request hasn\\'t finished yet')\n    }\n    submittingForm = true\n\n    targetForm.requestSubmit() // Retry the submit now that we have a token\n  })\n  return false\n}\n\nfunction initialize() {\n  document.addEventListener('form:loaded', () => {\n    initialized = false\n    setupRecaptcha()\n    initialized = true\n  })\n\n  setupRecaptcha()\n  initialized = true\n}\n\ndocument.addEventListener('turbolinks:load', initialize)\ndomReady(initialize)\n","// The \"turnstile\" variable is defined in the script from Cloudflare.\n/* eslint-disable no-undef */\nexport async function waitForTurnstileLoaded(delay) {\n  return new Promise((resolve, reject) => {\n    if (typeof turnstile !== 'undefined' && turnstile !== null) {\n      resolve(turnstile)\n    } else {\n      // delay up to 10 seconds, checking with an increasing backoff.\n      if (delay < 10000) {\n        console.log('delaying ' + delay)\n\n        setTimeout(async function() {\n          resolve(await waitForTurnstileLoaded(delay * 2))\n        }, delay)\n\n      } else {\n        reject('Cloudflare Turnstile service did not load')\n      }\n    }\n  })\n}\n","<template>\n  <div>\n    <validation-errors v-if=\"showValidationError\" :errors=\"validationErrorMessages\" class=\"mb-1\" />\n    <submit-button :form-valid=\"formValid && recaptchaLoaded\"\n                   :label=\"label\" :submitting-label=\"submittingLabel\"\n                   :submit-in-progress=\"submitInProgress\" :class=\"buttonClass\"\n                   @click=\"submit\" />\n  </div>\n</template>\n\n<script>\nimport SubmitButton from './submit-button'\nimport ValidationErrors from '@/components/inputs/validation-errors'\n\nexport default {\n  components: { SubmitButton, ValidationErrors },\n\n  props: {\n    // This prop needs to be named `buttonClass` rather than `class` because ESLint will\n    // throw a vue/no-parsing-error error if a prop is named `class`.\n    buttonClass: {\n      type: String,\n      required: false\n    },\n\n    recaptchaAction: {\n      type: String,\n      required: true\n    },\n\n    formValid: {\n      type: Boolean,\n      required: false,\n      default: true\n    },\n\n    label: {\n      type: String,\n      required: true\n    },\n\n    submitInProgress: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n\n    submittingLabel: {\n      type: String,\n      required: false\n    },\n\n    validationErrors: {\n      type: Object,\n      required: false,\n      default: () => ({})\n    }\n  },\n\n  emits: ['submit-with-token'],\n\n  data() {\n    return {\n      recaptchaLoaded: false\n    }\n  },\n\n  computed: {\n    showValidationError() {\n      return this.validationErrors.recaptchaScore || this.validationErrors.recaptchaVerifyResult\n    },\n\n    validationErrorMessages() {\n      if (this.validationErrors.recaptchaVerifyResult) {\n        return this.validationErrors.recaptchaVerifyResult\n      } else {\n        return [this.i18n.t('public.bot_protection.rejected', {org_name: this.agraConfiguration.organisationName})]\n      }\n    }\n  },\n\n  created() {\n    // Lazy-loading the recaptcha initialization script.\n    const { waitForRecaptchaLoaded } = require('../../recaptcha')\n    this.waitForRecaptchaLoaded = waitForRecaptchaLoaded\n  },\n\n  mounted: async function() {\n    await this.waitForRecaptchaLoaded(200)\n    this.recaptchaLoaded = true\n  },\n\n  methods: {\n    waitForToken(action) {\n      const siteKey = this.agraConfiguration.botProtection.siteKey\n      return new Promise((resolve) => {\n        /* eslint-disable-next-line no-undef  */\n        grecaptcha.ready(() => {\n          /* eslint-disable-next-line no-undef  */\n          grecaptcha.execute(siteKey, { action })\n            .then((token) => {\n              resolve(token)\n            })\n        })\n      })\n    },\n\n    submit: async function() {\n      const recaptchaToken = await this.waitForToken(this.recaptchaAction)\n      this.$emit('submit-with-token', {recaptchaToken})\n    }\n  }\n}\n</script>\n","import { render } from \"./recaptcha-submit-button.vue?vue&type=template&id=ca0cfbc8\"\nimport script from \"./recaptcha-submit-button.vue?vue&type=script&lang=js\"\nexport * from \"./recaptcha-submit-button.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n  <div>\n    <div ref=\"turnstileContainer\" />\n    <validation-errors v-if=\"showValidationError\" :errors=\"[validationErrorMessage]\" class=\"mb-1\" />\n    <submit-button :form-valid=\"formValid && challengePassed\"\n                   :label=\"label\" :submitting-label=\"submittingLabel\"\n                   :submit-in-progress=\"submitInProgress\" :class=\"buttonClass\"\n                   @click=\"submit\" />\n  </div>\n</template>\n\n<script>\nimport { nextTick } from 'vue'\nimport SubmitButton from './submit-button'\nimport ValidationErrors from '@/components/inputs/validation-errors'\n\nconst FLEXIBLE_WIDGET_MIN_WIDTH = 300\nconst MOBILE_WINDOW_BUTTON_WIDTH_DIFFERENCE = 56\n\nexport default {\n  components: { SubmitButton, ValidationErrors },\n\n  props: {\n    // This prop needs to be named `buttonClass` rather than `class` because ESLint will\n    // throw a vue/no-parsing-error error if a prop is named `class`.\n    buttonClass: {\n      type: String,\n      required: false\n    },\n    formValid: {\n      type: Boolean,\n      required: false,\n      default: true\n    },\n    label: {\n      type: String,\n      required: true\n    },\n    submitInProgress: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    submittingLabel: {\n      type: String,\n      required: false\n    },\n    turnstileAction: {\n      type: String,\n      required: false\n    },\n    validationErrors: {\n      type: Object,\n      required: false,\n      default: () => ({})\n    }\n  },\n\n  emits: ['submit-with-token'],\n\n  data() {\n    return {\n      challengeToken: null,\n      elementWidth: null,\n      widgetId: null\n    }\n  },\n\n  computed: {\n    challengePassed() {\n      return !!this.challengeToken\n    },\n\n    showValidationError() {\n      return !!this.validationErrors.turnstileVerifyResult\n    },\n\n    validationErrorMessage() {\n      return this.i18n.t('public.bot_protection.rejected', {org_name: this.agraConfiguration.organisationName})\n    },\n\n    widgetSize() {\n      // What size of Turnstile widget should we use?\n      // See https://developers.cloudflare.com/turnstile/get-started/client-side-rendering/#widget-size\n      if (this.elementWidth >= FLEXIBLE_WIDGET_MIN_WIDTH) {\n        // The \"flexible\" size has a minimum width of 300px and stretches to 100% of the containing element\n        return 'flexible'\n      } else {\n        // The \"compact\" size is 150px wide\n        return 'compact'\n      }\n    }\n  },\n\n  watch: {\n    submitInProgress() {\n      if (!this.submitInProgress) {\n        // The submit has finished, and we're still here.\n        // This presumably means that the submit _failed_, and we may need to re-submit.\n        // Reset the challenge so we're ready.\n        this.challengeToken = null\n        /* eslint-disable-next-line no-undef  */\n        turnstile.reset(this.widgetId)\n      }\n    }\n  },\n\n  created() {\n    // Lazy-load the turnstile initialization script.\n    const { waitForTurnstileLoaded } = require('@/turnstile')\n    this.waitForTurnstileLoaded = waitForTurnstileLoaded\n  },\n\n  mounted() {\n    nextTick(() => {\n      this.elementWidth = this.$el.offsetWidth\n      if (this.elementWidth === 0) {\n        // On mobile, the form is hidden at first, which can cause offsetWidth to return 0.\n        // In that case, infer the form width from the window size.\n        this.elementWidth = window.innerWidth - MOBILE_WINDOW_BUTTON_WIDTH_DIFFERENCE\n      }\n    })\n\n    this.waitForTurnstileLoaded(200).then(() => {\n      this.renderTurnstile()\n    })\n  },\n\n  beforeUnmount() {\n    /* eslint-disable-next-line no-undef  */\n    turnstile.remove(this.widgetId)\n  },\n\n  methods: {\n    handleChallengeSuccess(token) {\n      this.challengeToken = token\n    },\n\n    handleExpiredChallenge() {\n      // Since the challenge has expired, any token we had is no longer valid.\n      this.challengeToken = null\n\n      // Reset the widget so we can solve a new challenge and get a new token.\n      /* eslint-disable-next-line no-undef  */\n      turnstile.reset(this.widgetId)\n    },\n\n    renderTurnstile() {\n      /* eslint-disable-next-line no-undef  */\n      this.widgetId = turnstile.render(this.$refs.turnstileContainer, {\n        sitekey: this.agraConfiguration.botProtection.siteKey,\n        action: this.turnstileAction,\n        callback: this.handleChallengeSuccess,\n        'expired-callback': this.handleExpiredChallenge,\n        appearance: 'interaction-only',\n        size: this.widgetSize\n      })\n    },\n\n    submit() {\n      this.$emit('submit-with-token', {turnstileToken: this.challengeToken})\n    }\n  }\n}\n</script>\n","import { render } from \"./turnstile-submit-button.vue?vue&type=template&id=75774162\"\nimport script from \"./turnstile-submit-button.vue?vue&type=script&lang=js\"\nexport * from \"./turnstile-submit-button.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n  <component :is=\"buttonComponent\" v-bind=\"extraButtonProps\" :label=\"label\" :submitting-label=\"submittingLabel\"\n             :form-valid=\"formValid\" :submit-in-progress=\"submitInProgress\" v-on=\"buttonListener\" @error=\"errorGettingToken\" />\n  <toast v-if=\"showError\" kind=\"error\">\n    <template #message-content>\n      <p>\n        {{ i18n.t('public.bot_protection.error_getting_token') }}\n      </p>\n    </template>\n  </toast>\n</template>\n\n<script>\nimport FriendlyCaptchaSubmitButton from '@/components/buttons/friendly-captcha-submit-button'\nimport HcaptchaSubmitButton from '@/components/buttons/hcaptcha-submit-button'\nimport RecaptchaSubmitButton from '@/components/buttons/recaptcha-submit-button'\nimport SubmitButton from '@/components/buttons/submit-button'\nimport Toast from '@/components/toast'\nimport TurnstileSubmitButton from '@/components/buttons/turnstile-submit-button.vue'\n\nexport default {\n  components: { FriendlyCaptchaSubmitButton, HcaptchaSubmitButton, RecaptchaSubmitButton, SubmitButton, Toast, TurnstileSubmitButton },\n\n  props: {\n    buttonClass: {\n      type: String,\n      required: false,\n      default: ''\n    },\n    calculateSolutionOnMount: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    formValid: {\n      type: Boolean,\n      required: false,\n      default: true\n    },\n    label: {\n      type: String,\n      required: true\n    },\n    captchaAction: {\n      type: String,\n      required: true\n    },\n    invisibleCaptcha: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    submitInProgress: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    submittingLabel: {\n      type: String,\n      required: false\n    },\n    validationErrors: {\n      type: Object,\n      required: false,\n      default: () => ({})\n    }\n  },\n\n  emits: ['submit'],\n\n  data() {\n    return {\n      showError: false\n    }\n  },\n\n  computed: {\n    buttonComponent() {\n      switch (this.agraConfiguration.botProtection.kind) {\n      case 'friendly-captcha':\n        return FriendlyCaptchaSubmitButton\n      case 'hcaptcha':\n        return HcaptchaSubmitButton\n      case 'recaptcha':\n        return RecaptchaSubmitButton\n      case 'turnstile':\n        return TurnstileSubmitButton\n      default:\n        return SubmitButton\n      }\n    },\n\n    buttonListener() {\n      // If we are rendering a regular submit button, we need to listen for a \"click\" event.\n      // But if we are rendering any of the bot protection buttons, we need to _ignore_ the \"click\" event\n      // because we only want to know about the \"submit-with-token\" event that happens once the challenge\n      // has been evaluated.\n      switch (this.agraConfiguration.botProtection.kind) {\n      case 'friendly-captcha':\n      case 'hcaptcha':\n      case 'recaptcha':\n      case 'turnstile':\n        return {\n          'submit-with-token': this.submitWithToken\n        }\n      default:\n        return {\n          click: this.submit\n        }\n      }\n    },\n\n    extraButtonProps() {\n      const buttonProps = {}\n\n      if (this.agraConfiguration.botProtection.kind === 'none') {\n        buttonProps.class = this.buttonClass\n      } else {\n        buttonProps.buttonClass = this.buttonClass\n        buttonProps.validationErrors = this.validationErrors\n      }\n\n      switch (this.agraConfiguration.botProtection.kind) {\n      case 'friendly-captcha':\n        buttonProps.invisibleCaptcha = this.invisibleCaptcha\n        buttonProps.calculateSolutionOnMount = this.calculateSolutionOnMount\n        break\n      case 'recaptcha':\n        buttonProps.recaptchaAction = this.captchaAction\n        break\n      case 'turnstile':\n        buttonProps.turnstileAction = this.captchaAction\n        break\n      }\n\n      return buttonProps\n    }\n  },\n\n  methods: {\n    errorGettingToken(error) {\n      this.showError = true\n      console.log('Error getting token:', error)\n    },\n\n    submit() {\n      this.$emit('submit', {})\n    },\n\n    submitWithToken(challengeResponse) {\n      this.$emit('submit', challengeResponse)\n    }\n  }\n}\n</script>\n","import { render } from \"./bot-protected-submit-button.vue?vue&type=template&id=d6a93706\"\nimport script from \"./bot-protected-submit-button.vue?vue&type=script&lang=js\"\nexport * from \"./bot-protected-submit-button.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n  <div ref=\"container\" :class=\"['frc-captcha', 'mb-4', {'d-none': invisibleCaptcha}]\" />\n\n  <validation-errors v-if=\"showValidationError\" :errors=\"[validationErrorMessage]\" class=\"mb-1\" />\n  <submit-button :form-valid=\"formValid\" :label=\"label\" :submitting-label=\"submittingLabel\"\n                 :submit-in-progress=\"disabledSubmit\" :class=\"buttonClass\"\n                 @click=\"handleButtonClick\" />\n</template>\n\n<script>\nimport SubmitButton from '@/components/buttons/submit-button'\nimport ValidationErrors from '@/components/inputs/validation-errors'\nimport { WidgetInstance } from 'friendly-challenge'\n\nexport default {\n  components: { SubmitButton, ValidationErrors },\n\n  props: {\n    // This prop needs to be named `buttonClass` rather than `class` because ESLint will\n    // throw a vue/no-parsing-error error if a prop is named `class`.\n    buttonClass: {\n      type: String,\n      required: false,\n      default: ''\n    },\n    calculateSolutionOnMount: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    formValid: {\n      type: Boolean,\n      required: false,\n      default: true\n    },\n    invisibleCaptcha: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    label: {\n      type: String,\n      required: true\n    },\n    submitInProgress: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    submittingLabel: {\n      type: String,\n      required: false\n    },\n    validationErrors: {\n      type: Object,\n      required: false,\n      default: () => ({})\n    }\n  },\n\n  emits: ['error', 'submit-with-token'],\n\n  data() {\n    return {\n      buttonClicked: false,\n      captchaSolution: null,\n      executingCaptcha: false\n    }\n  },\n\n  computed: {\n    disabledSubmit() {\n      return this.submitInProgress || this.executingCaptcha\n    },\n\n    puzzleEndpointUrl() {\n      return `https://${this.agraConfiguration.botProtection.hostname}/api/v1/puzzle`\n    },\n\n    showValidationError() {\n      return !!this.validationErrors.friendlyCaptchaVerifyResult\n    },\n\n    validationErrorMessage() {\n      return this.i18n.t('public.bot_protection.rejected', {org_name: this.agraConfiguration.organisationName})\n    }\n  },\n\n  watch: {\n    submitInProgress() {\n      if (!this.submitInProgress) {\n        // The submit has finished, and we're still here.\n        // This presumably means that the submit _failed_, and we may need to re-submit.\n        // Reset the widget so we're ready.\n        this.widget.reset()\n      }\n    }\n  },\n\n  mounted() {\n    const options = {\n      startedCallback: this.captchaStartedCallback,\n      doneCallback: this.captchaDoneCallback,\n      errorCallback: this.captchaErrorCallback,\n      language: this.i18n.locale(),\n      puzzleEndpoint: this.puzzleEndpointUrl,\n      sitekey: this.agraConfiguration.botProtection.siteKey,\n      startMode: this.calculateSolutionOnMount ? 'auto' : 'focus'\n    }\n\n    this.widget = new WidgetInstance(this.$refs.container, options)\n  },\n\n  unmounted() {\n    this.widget.destroy()\n  },\n\n  methods: {\n    captchaDoneCallback(solution) {\n      this.captchaSolution = solution\n      this.executingCaptcha = false\n\n      if (this.buttonClicked) {\n        this.submitAndReset()\n      }\n    },\n\n    captchaErrorCallback(outerError) {\n      this.executingCaptcha = false\n\n      const {code, description, error: exception} = outerError\n      const errorInfo = { code, description, cause: exception.rawError.toString() }\n\n      this.$emit('error', JSON.stringify(errorInfo))\n    },\n\n    captchaStartedCallback() {\n      this.executingCaptcha = true\n    },\n\n    handleButtonClick() {\n      this.buttonClicked = true\n\n      if (this.captchaSolution) {\n        this.submitAndReset()\n      } else if (!this.executingCaptcha) {\n        // Oops, somehow we did not start the captcha puzzle by the time the button was clicked.\n        // Do it now.\n        this.widget.reset()\n      }\n    },\n\n    submitAndReset() {\n      this.$emit('submit-with-token', {friendlyCaptchaSolution: this.captchaSolution})\n\n      this.buttonClicked = false\n      this.captchaSolution = null\n    }\n  }\n}\n</script>\n","import { render } from \"./friendly-captcha-submit-button.vue?vue&type=template&id=b15104f2\"\nimport script from \"./friendly-captcha-submit-button.vue?vue&type=script&lang=js\"\nexport * from \"./friendly-captcha-submit-button.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n  <div>\n    <vue-hcaptcha ref=\"hcaptcha\" :sitekey=\"hcaptchaSiteKey\" size=\"invisible\" :re-captcha-compat=\"false\"\n                  @verify=\"setHcaptchaResponseAndSubmit\" />\n    <validation-errors v-if=\"showValidationError\" :errors=\"[validationErrorMessage]\" class=\"mb-1\" />\n    <submit-button :form-valid=\"formValid\" :label=\"label\" :submitting-label=\"submittingLabel\"\n                   :submit-in-progress=\"submitInProgress\" :class=\"buttonClass\"\n                   @click=\"executeHcaptcha\" />\n  </div>\n</template>\n\n<script>\nimport SubmitButton from './submit-button'\nimport ValidationErrors from '@/components/inputs/validation-errors'\nimport VueHcaptcha from '@hcaptcha/vue3-hcaptcha'\n\nexport default {\n  components: { SubmitButton, ValidationErrors, VueHcaptcha },\n\n  props: {\n    // This prop needs to be named `buttonClass` rather than `class` because ESLint will\n    // throw a vue/no-parsing-error error if a prop is named `class`.\n    buttonClass: {\n      type: String,\n      required: false,\n      default: ''\n    },\n    formValid: {\n      type: Boolean,\n      required: false,\n      default: true\n    },\n    label: {\n      type: String,\n      required: true\n    },\n    submitInProgress: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    submittingLabel: {\n      type: String,\n      required: false\n    },\n    validationErrors: {\n      type: Object,\n      required: false,\n      default: () => ({})\n    }\n  },\n\n  emits: ['submit-with-token'],\n\n  data() {\n    return {\n      hcaptchaResponse: null\n    }\n  },\n\n  computed: {\n    hcaptchaSiteKey() {\n      return this.agraConfiguration.botProtection.siteKey\n    },\n\n    showValidationError() {\n      return !!this.validationErrors.hcaptchaVerifyResult\n    },\n\n    validationErrorMessage() {\n      return this.i18n.t('public.bot_protection.rejected', {org_name: this.agraConfiguration.organisationName})\n    }\n  },\n\n  methods: {\n    executeHcaptcha() {\n      this.$refs.hcaptcha.execute()\n    },\n\n    setHcaptchaResponseAndSubmit(token) {\n      this.hcaptchaResponse = token\n      this.$emit('submit-with-token', {hcaptchaResponse: this.hcaptchaResponse})\n    }\n  }\n}\n</script>\n","import { render } from \"./hcaptcha-submit-button.vue?vue&type=template&id=03538bc8\"\nimport script from \"./hcaptcha-submit-button.vue?vue&type=script&lang=js\"\nexport * from \"./hcaptcha-submit-button.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["initialized","submittingForm","async","waitForRecaptchaLoaded","delay","Promise","resolve","reject","grecaptcha","console","log","setTimeout","waitForRecaptchaToken","recaptchaLoader","tokenField","targetForm","ready","execute","window","Agra","Configuration","botProtection","siteKey","action","dataset","then","token","value","setupRecaptcha","errorLogger","error","recaptchaForms","Array","from","document","getElementsByClassName","getElementById","forEach","recaptchaForm","addEventListener","event","target","querySelector","length","preventDefault","stopPropagation","Rails","disableElement","requestSubmit","recaptchaSubmit","initialize","domReady","waitForTurnstileLoaded","turnstile","components","SubmitButton","ValidationErrors","props","buttonClass","type","String","required","recaptchaAction","formValid","Boolean","default","label","submitInProgress","submittingLabel","validationErrors","Object","emits","data","recaptchaLoaded","computed","showValidationError","this","recaptchaScore","recaptchaVerifyResult","validationErrorMessages","i18n","t","org_name","agraConfiguration","organisationName","created","require","mounted","methods","waitForToken","submit","recaptchaToken","$emit","_createElementBlock","$options","_createBlock","_component_validation_errors","key","errors","class","_createCommentVNode","_createTextVNode","_createVNode","_component_submit_button","$props","$data","_normalizeClass","onClick","ref","turnstileAction","challengeToken","elementWidth","widgetId","challengePassed","turnstileVerifyResult","validationErrorMessage","widgetSize","watch","reset","nextTick","$el","offsetWidth","innerWidth","renderTurnstile","beforeUnmount","remove","handleChallengeSuccess","handleExpiredChallenge","render","$refs","turnstileContainer","sitekey","callback","appearance","size","turnstileToken","_createElementVNode","_hoisted_1","FriendlyCaptchaSubmitButton","HcaptchaSubmitButton","RecaptchaSubmitButton","Toast","TurnstileSubmitButton","calculateSolutionOnMount","captchaAction","invisibleCaptcha","showError","buttonComponent","kind","buttonListener","submitWithToken","click","extraButtonProps","buttonProps","errorGettingToken","challengeResponse","_Fragment","_resolveDynamicComponent","_mergeProps","_toHandlers","onError","_component_toast","_withCtx","_toDisplayString","_ctx","_","buttonClicked","captchaSolution","executingCaptcha","disabledSubmit","puzzleEndpointUrl","hostname","friendlyCaptchaVerifyResult","widget","options","startedCallback","captchaStartedCallback","doneCallback","captchaDoneCallback","errorCallback","captchaErrorCallback","language","locale","puzzleEndpoint","startMode","WidgetInstance","container","unmounted","destroy","solution","submitAndReset","outerError","code","description","exception","errorInfo","cause","rawError","toString","JSON","stringify","handleButtonClick","friendlyCaptchaSolution","VueHcaptcha","hcaptchaResponse","hcaptchaSiteKey","hcaptchaVerifyResult","executeHcaptcha","hcaptcha","setHcaptchaResponseAndSubmit","_component_vue_hcaptcha","onVerify"],"sourceRoot":""}