import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/auth/LoginWithEmailBlock.vue");import { FormTextInput as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { FormButton as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { default as __nuxt_component_2 } from "/_nuxt/node_modules/nuxt/dist/app/components/nuxt-link.js?v=e4f18c29"; /* Injection by vite-plugin-vue-inspector Start */ import { createVNode as __createVNode,createElementVNode as __createElementVNode,createElementBlock as __createElementBlock } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29" function _interopVNode(vnode) { if (vnode && vnode.props && 'data-v-inspector' in vnode.props) { const data = vnode.props['data-v-inspector'] delete vnode.props['data-v-inspector'] Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false }) } return vnode } function _createVNode(...args) { return _interopVNode(__createVNode(...args)) } function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) } function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } /* Injection by vite-plugin-vue-inspector End */ import { defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { useForm } from "/_nuxt/node_modules/.cache/vite/client/deps/vee-validate.js?v=e4f18c29"; import { isEmail, isRequired } from "/_nuxt/lib/common/helpers/validation.ts"; import { ToastNotificationType, useGlobalToast } from "/_nuxt/lib/common/composables/toast.ts"; import { ensureError } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js"; import { useAuthManager } from "/_nuxt/lib/auth/composables/auth.ts"; import { forgottenPasswordRoute } from "/_nuxt/lib/common/helpers/route.ts"; import { useMounted } from "/_nuxt/node_modules/@vueuse/core/index.mjs?v=e4f18c29"; import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts"; import { ref, computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "AuthLoginWithEmailBlock", props: { challenge: { type: String, required: true }, workspaceInvite: { type: Object, required: false } }, setup(__props, { expose: __expose }) { __expose(); graphql(` fragment AuthLoginWithEmailBlock_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator { id email user { id } } `); const props = __props; const { handleSubmit, setValues } = useForm(); const loading = ref(false); const emailRules = [isEmail]; const passwordRules = [isRequired]; const isMounted = useMounted(); const { loginWithEmail } = useAuthManager(); const { triggerNotification } = useGlobalToast(); const inviteEmail = computed(() => props.workspaceInvite?.email); const isInviteForExistingUser = computed(() => !!props.workspaceInvite?.user); const shouldForceInviteEmail = computed( () => !!(inviteEmail.value && isInviteForExistingUser.value) ); const onSubmit = handleSubmit(async ({ email, password }) => { try { loading.value = true; await loginWithEmail({ email, password, challenge: props.challenge }); } catch (e) { triggerNotification({ type: ToastNotificationType.Danger, title: "Login failed", description: `${ensureError(e).message}` }); } finally { loading.value = false; } }); watch( shouldForceInviteEmail, (shouldForce) => { if (shouldForce) { setValues({ email: inviteEmail.value || "" }); } }, { immediate: true } ); const __returned__ = { props, handleSubmit, setValues, loading, emailRules, passwordRules, isMounted, loginWithEmail, triggerNotification, inviteEmail, isInviteForExistingUser, shouldForceInviteEmail, onSubmit, get forgottenPasswordRoute() { return forgottenPasswordRoute; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { resolveComponent as _resolveComponent, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { class: "flex flex-col space-y-2", "data-v-inspector": "components/auth/LoginWithEmailBlock.vue:3:5" }; const _hoisted_2 = { class: "mt-1 text-center text-body-xs text-foreground-3 select-none", "data-v-inspector": "components/auth/LoginWithEmailBlock.vue:39:5" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_FormTextInput = __nuxt_component_0; const _component_FormButton = __nuxt_component_1; const _component_NuxtLink = __nuxt_component_2; return _openBlock(), _createElementBlock( "form", { method: "post", onSubmit: _cache[0] || (_cache[0] = (...args) => $setup.onSubmit && $setup.onSubmit(...args)), "data-v-inspector": "components/auth/LoginWithEmailBlock.vue:2:3" }, [ _createElementVNode("div", _hoisted_1, [ _createVNode(_component_FormTextInput, { type: "email", name: "email", label: "E-mail", placeholder: "Enter your email", size: "lg", color: "foundation", rules: $setup.emailRules, "show-label": "", disabled: !!($setup.loading || $setup.shouldForceInviteEmail), "auto-focus": "", autocomplete: "email", "data-v-inspector": "components/auth/LoginWithEmailBlock.vue:4:7" }, null, 8, ["disabled"]), _createVNode(_component_FormTextInput, { type: "password", name: "password", label: "Password", placeholder: "Enter your password", color: "foundation", size: "lg", rules: $setup.passwordRules, "show-label": "", disabled: $setup.loading, autocomplete: "current-password", "data-v-inspector": "components/auth/LoginWithEmailBlock.vue:17:7" }, null, 8, ["disabled"]) ]), _createVNode(_component_FormButton, { size: "lg", submit: "", "full-width": "", class: "mt-8 mb-4", disabled: $setup.loading || !$setup.isMounted, "data-v-inspector": "components/auth/LoginWithEmailBlock.vue:30:5" }, { default: _withCtx(() => [..._cache[1] || (_cache[1] = [ _createTextVNode( " Log in ", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ }, 8, ["disabled"]), _createElementVNode("div", _hoisted_2, [ _cache[3] || (_cache[3] = _createTextVNode( " Forgot your password? ", -1 /* CACHED */ )), _createVNode(_component_NuxtLink, { to: $setup.forgottenPasswordRoute, class: "text-foreground", "data-v-inspector": "components/auth/LoginWithEmailBlock.vue:41:7" }, { default: _withCtx(() => [..._cache[2] || (_cache[2] = [ _createTextVNode( " Reset password ", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ }, 8, ["to"]) ]) ], 32 /* NEED_HYDRATION */ ); } _sfc_main.__hmrId = "e562ee45"; typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main); import.meta.hot.on("file-changed", ({ file }) => { __VUE_HMR_RUNTIME__.CHANGED_FILE = file; }); import.meta.hot.accept((mod) => { if (!mod) return; const { default: updated, _rerender_only } = mod; if (_rerender_only) { __VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render); } else { __VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated); } }); import _export_sfc from "/_nuxt/@id/__x00__plugin-vue:export-helper"; export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "D:/speckle-server/packages/frontend-2/components/auth/LoginWithEmailBlock.vue"]]); //# sourceMappingURL=data:application/json;base64,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WUFGQztBQUFBLFlBRUQ7QUFBQTtBQUFBO0FBQUE7Ozs7TUFDQSxvQkFLTSxPQUxOLFlBS007QUFBQTtVQUxtSTtBQUFBLFVBRXZJO0FBQUE7QUFBQTtBQUFBLHFCQUVXO0FBQUEsVUFGQSxJQUFJO0FBQUEsVUFBd0IsT0FBTTtBQUFBLFVBQWtCLG9CQUFpQjtBQUFBOzRCQUErQyxNQUUvSDtBQUFBO2NBRitIO0FBQUEsY0FFL0g7QUFBQTtBQUFBO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIkxvZ2luV2l0aEVtYWlsQmxvY2sudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8Zm9ybSBtZXRob2Q9XCJwb3N0XCIgQHN1Ym1pdD1cIm9uU3VibWl0XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0aC9Mb2dpbldpdGhFbWFpbEJsb2NrLnZ1ZToyOjNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHNwYWNlLXktMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dGgvTG9naW5XaXRoRW1haWxCbG9jay52dWU6Mzo1XCI+XHJcbiAgICAgIDxGb3JtVGV4dElucHV0XHJcbiAgICAgICAgdHlwZT1cImVtYWlsXCJcclxuICAgICAgICBuYW1lPVwiZW1haWxcIlxyXG4gICAgICAgIGxhYmVsPVwiRS1tYWlsXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZW1haWxcIlxyXG4gICAgICAgIHNpemU9XCJsZ1wiXHJcbiAgICAgICAgY29sb3I9XCJmb3VuZGF0aW9uXCJcclxuICAgICAgICA6cnVsZXM9XCJlbWFpbFJ1bGVzXCJcclxuICAgICAgICBzaG93LWxhYmVsXHJcbiAgICAgICAgOmRpc2FibGVkPVwiISEobG9hZGluZyB8fCBzaG91bGRGb3JjZUludml0ZUVtYWlsKVwiXHJcbiAgICAgICAgYXV0by1mb2N1c1xyXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cImVtYWlsXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0aC9Mb2dpbldpdGhFbWFpbEJsb2NrLnZ1ZTo0OjdcIlxyXG4gICAgICAvPlxyXG4gICAgICA8Rm9ybVRleHRJbnB1dFxyXG4gICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXHJcbiAgICAgICAgbmFtZT1cInBhc3N3b3JkXCJcclxuICAgICAgICBsYWJlbD1cIlBhc3N3b3JkXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgcGFzc3dvcmRcIlxyXG4gICAgICAgIGNvbG9yPVwiZm91bmRhdGlvblwiXHJcbiAgICAgICAgc2l6ZT1cImxnXCJcclxuICAgICAgICA6cnVsZXM9XCJwYXNzd29yZFJ1bGVzXCJcclxuICAgICAgICBzaG93LWxhYmVsXHJcbiAgICAgICAgOmRpc2FibGVkPVwibG9hZGluZ1wiXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dGgvTG9naW5XaXRoRW1haWxCbG9jay52dWU6MTc6N1wiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgIHNpemU9XCJsZ1wiXHJcbiAgICAgIHN1Ym1pdFxyXG4gICAgICBmdWxsLXdpZHRoXHJcbiAgICAgIGNsYXNzPVwibXQtOCBtYi00XCJcclxuICAgICAgOmRpc2FibGVkPVwibG9hZGluZyB8fCAhaXNNb3VudGVkXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0aC9Mb2dpbldpdGhFbWFpbEJsb2NrLnZ1ZTozMDo1XCJcclxuICAgID5cclxuICAgICAgTG9nIGluXHJcbiAgICA8L0Zvcm1CdXR0b24+XHJcbiAgICA8ZGl2IGNsYXNzPVwibXQtMSB0ZXh0LWNlbnRlciB0ZXh0LWJvZHkteHMgdGV4dC1mb3JlZ3JvdW5kLTMgc2VsZWN0LW5vbmVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luV2l0aEVtYWlsQmxvY2sudnVlOjM5OjVcIj5cclxuICAgICAgRm9yZ290IHlvdXIgcGFzc3dvcmQ/XHJcbiAgICAgIDxOdXh0TGluayA6dG89XCJmb3Jnb3R0ZW5QYXNzd29yZFJvdXRlXCIgY2xhc3M9XCJ0ZXh0LWZvcmVncm91bmRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luV2l0aEVtYWlsQmxvY2sudnVlOjQxOjdcIj5cclxuICAgICAgICBSZXNldCBwYXNzd29yZFxyXG4gICAgICA8L051eHRMaW5rPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9mb3JtPlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAndmVlLXZhbGlkYXRlJ1xyXG5pbXBvcnQgeyBpc0VtYWlsLCBpc1JlcXVpcmVkIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9oZWxwZXJzL3ZhbGlkYXRpb24nXHJcbmltcG9ydCB7IFRvYXN0Tm90aWZpY2F0aW9uVHlwZSwgdXNlR2xvYmFsVG9hc3QgfSBmcm9tICd+fi9saWIvY29tbW9uL2NvbXBvc2FibGVzL3RvYXN0J1xyXG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHsgdXNlQXV0aE1hbmFnZXIgfSBmcm9tICd+fi9saWIvYXV0aC9jb21wb3NhYmxlcy9hdXRoJ1xyXG5pbXBvcnQgeyBmb3Jnb3R0ZW5QYXNzd29yZFJvdXRlIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9oZWxwZXJzL3JvdXRlJ1xyXG5pbXBvcnQgeyB1c2VNb3VudGVkIH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJ1xyXG5pbXBvcnQgeyBncmFwaHFsIH0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwnXHJcbmltcG9ydCB0eXBlIHsgQXV0aExvZ2luV2l0aEVtYWlsQmxvY2tfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50IH0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3JhcGhxbCdcclxuXHJcbnR5cGUgRm9ybVZhbHVlcyA9IHsgZW1haWw6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9XHJcblxyXG5ncmFwaHFsKGBcclxuICBmcmFnbWVudCBBdXRoTG9naW5XaXRoRW1haWxCbG9ja19QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xyXG4gICAgaWRcclxuICAgIGVtYWlsXHJcbiAgICB1c2VyIHtcclxuICAgICAgaWRcclxuICAgIH1cclxuICB9XHJcbmApXHJcblxyXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPHtcclxuICBjaGFsbGVuZ2U6IHN0cmluZ1xyXG4gIHdvcmtzcGFjZUludml0ZT86IEF1dGhMb2dpbldpdGhFbWFpbEJsb2NrX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JGcmFnbWVudFxyXG59PigpXHJcblxyXG5jb25zdCB7IGhhbmRsZVN1Ym1pdCwgc2V0VmFsdWVzIH0gPSB1c2VGb3JtPEZvcm1WYWx1ZXM+KClcclxuXHJcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGVtYWlsUnVsZXMgPSBbaXNFbWFpbF1cclxuY29uc3QgcGFzc3dvcmRSdWxlcyA9IFtpc1JlcXVpcmVkXVxyXG5cclxuY29uc3QgaXNNb3VudGVkID0gdXNlTW91bnRlZCgpXHJcbmNvbnN0IHsgbG9naW5XaXRoRW1haWwgfSA9IHVzZUF1dGhNYW5hZ2VyKClcclxuY29uc3QgeyB0cmlnZ2VyTm90aWZpY2F0aW9uIH0gPSB1c2VHbG9iYWxUb2FzdCgpXHJcblxyXG5jb25zdCBpbnZpdGVFbWFpbCA9IGNvbXB1dGVkKCgpID0+IHByb3BzLndvcmtzcGFjZUludml0ZT8uZW1haWwpXHJcbmNvbnN0IGlzSW52aXRlRm9yRXhpc3RpbmdVc2VyID0gY29tcHV0ZWQoKCkgPT4gISFwcm9wcy53b3Jrc3BhY2VJbnZpdGU/LnVzZXIpXHJcbmNvbnN0IHNob3VsZEZvcmNlSW52aXRlRW1haWwgPSBjb21wdXRlZChcclxuICAoKSA9PiAhIShpbnZpdGVFbWFpbC52YWx1ZSAmJiBpc0ludml0ZUZvckV4aXN0aW5nVXNlci52YWx1ZSlcclxuKVxyXG5cclxuY29uc3Qgb25TdWJtaXQgPSBoYW5kbGVTdWJtaXQoYXN5bmMgKHsgZW1haWwsIHBhc3N3b3JkIH0pID0+IHtcclxuICB0cnkge1xyXG4gICAgbG9hZGluZy52YWx1ZSA9IHRydWVcclxuICAgIGF3YWl0IGxvZ2luV2l0aEVtYWlsKHsgZW1haWwsIHBhc3N3b3JkLCBjaGFsbGVuZ2U6IHByb3BzLmNoYWxsZW5nZSB9KVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuRGFuZ2VyLFxyXG4gICAgICB0aXRsZTogJ0xvZ2luIGZhaWxlZCcsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBgJHtlbnN1cmVFcnJvcihlKS5tZXNzYWdlfWBcclxuICAgIH0pXHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxyXG4gIH1cclxufSlcclxuXHJcbndhdGNoKFxyXG4gIHNob3VsZEZvcmNlSW52aXRlRW1haWwsXHJcbiAgKHNob3VsZEZvcmNlKSA9PiB7XHJcbiAgICBpZiAoc2hvdWxkRm9yY2UpIHtcclxuICAgICAgc2V0VmFsdWVzKHsgZW1haWw6IGludml0ZUVtYWlsLnZhbHVlIHx8ICcnIH0pXHJcbiAgICB9XHJcbiAgfSxcclxuICB7IGltbWVkaWF0ZTogdHJ1ZSB9XHJcbilcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL2F1dGgvTG9naW5XaXRoRW1haWxCbG9jay52dWUifQ==