{"version":3,"file":"SignIn.DMV4cStt.mjs","names":["useState","useProject","useIsInitializing","useRef","useMemo","useCallback","signIn"],"sources":["https:/framerusercontent.com/modules/qwGt3Yo5bTbVCabM4ng2/8NW1v5SSw5g2q2GBvlch/SignIn.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useCallback,useEffect,useMemo,useRef,useState}from\"react\";// @ts-ignore\nimport{addPropertyControls,ControlType,RenderTarget,withCSS}from\"framer\";import{signIn,useIsInitializing,useProject}from\"https://cdn.jsdelivr.net/npm/@framerauth/sdk@2/dist/framerauth.mjs\";import BaseForm,{basePropertyControls}from\"https://framerusercontent.com/modules/tU0OhNHakDNO2P6BFnP9/DkAA5y3AozKVoSSPI9gf/BaseForm.js\";import GoogleRecaptcha from\"https://framerusercontent.com/modules/F9ebKQnqqvVDmi64jIaf/foI0zSSonNSCAW3AjFin/GoogleRecaptcha.js\";//////////////////////////////////\n/////// FORM CONFIGURATION ///////\n//////////////////////////////////\n// Define inputs\nconst baseInputs=[{displayName:\"Email\",name:\"email\",type:\"string\",format:\"email\",required:true,overridable:false,placeholder:\"Email\",render:true,hidden:false},{displayName:\"Password\",name:\"password\",type:\"string\",format:\"password\",required:true,overridable:false,placeholder:\"Password\",render:true,hidden:false}];function isCaptchaRequired(captcha){if(!captcha)return false;if(captcha.provider!==\"google-recaptcha\")return false;if(!captcha.protectedActions)return true;return Boolean(captcha.protectedActions.signIn);}function getCaptchaSiteKey(captcha){return captcha?.siteKey??\"\";}function isFramerEditorTarget(){const target=RenderTarget.current();return target===RenderTarget.canvas||target===RenderTarget.thumbnail;}function hasFramerAuthRuntime(){return typeof window!==\"undefined\"&&Boolean(window.FramerAuth);}const formId=\"sign_in\"// Unique form ID for this form.\n;const defaultButtonLabel=\"Sign In\"// Default submit button label on this form.\n;const exposePasswordVisibilityToggle=true// Expose password visibility toggle property for password inputs.\n;const buttonLabelKey=`${formId}_button_label`// Key for button label property control.\n;/**\n * SignIn.tsx\n * By Joel Whitaker\n *\n * @framerDisableUnlink\n *\n * @framerIntrinsicWidth 300\n * @framerIntrinsicHeight 40\n *\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight any\n */const SignIn=withCSS(function SignIn({...baseProps}){const[inputs,setInputs]=useState(baseInputs);const projectState=useProject();const{project,fetchProject}=projectState;const projectLoading=projectState.isLoading??projectState.loading;const sdkState=useIsInitializing();const sdkInitializing=sdkState.initializing;const hasRequestedProjectRef=useRef(false);const[captchaToken,setCaptchaToken]=useState(null);const[captchaResetKey,setCaptchaResetKey]=useState(0);const runtimeAvailable=hasFramerAuthRuntime();const captchaRequired=isCaptchaRequired(project?.captcha);const captchaSiteKey=getCaptchaSiteKey(project?.captcha);const captchaMisconfigured=captchaRequired&&!captchaSiteKey;const shouldWaitForProject=runtimeAvailable&&!isFramerEditorTarget();const shouldRenderCaptcha=captchaRequired;const isProjectInitializing=shouldWaitForProject&&(Boolean(sdkInitializing)||Boolean(projectLoading));const projectUnavailable=runtimeAvailable&&shouldWaitForProject&&!Boolean(sdkInitializing)&&!Boolean(projectLoading)&&!project;useEffect(()=>{if(shouldWaitForProject||hasRequestedProjectRef.current||project){return;}hasRequestedProjectRef.current=true;fetchProject().catch(()=>{});},[shouldWaitForProject,project,fetchProject]);const buttonProps=useMemo(()=>{// Map button label to button\n// This is to avoid style copy-pasting of the button label.\nreturn{...baseProps.button,label:baseProps.button[buttonLabelKey]};},[baseProps.button,baseProps.button[buttonLabelKey]]);useEffect(()=>{// Map input labels to inputs\nif(baseProps.inputFields){const newInputs=[];baseInputs.forEach((input,_idx)=>{const inputControlName=snakeToCamel(input.name);if(!(inputControlName in baseProps.inputFields)){// If the input is not in the inputFields object, skip it.\nreturn;}const inputField=baseProps.inputFields[inputControlName];const render=inputField.render||true;const hidden=inputField.hidden||false;const displayName=inputField.displayName;const placeholder=displayName;if(render===true){newInputs.push({...input,hidden,displayName,placeholder});}});setInputs(newInputs);}},[undefined,baseProps.inputFields]);const onCaptchaError=useCallback(()=>{setCaptchaResetKey(key=>key+1);setCaptchaToken(null);baseProps.onError?.();},[baseProps.onError]);const captchaAddon=shouldRenderCaptcha&&captchaSiteKey?/*#__PURE__*/_jsx(GoogleRecaptcha,{siteKey:captchaSiteKey,resetKey:captchaResetKey,onVerify:setCaptchaToken,onExpire:()=>setCaptchaToken(null),onError:()=>setCaptchaToken(null)}):null;const onSubmit=async formData=>{if(projectUnavailable){return{ok:false,message:\"FramerAuth is unavailable because the project configuration could not be loaded. Please refresh or contact support.\"};}if(captchaMisconfigured){return{ok:false,message:\"CAPTCHA is not configured correctly. Please contact support.\"};}if(captchaRequired&&captchaSiteKey&&!captchaToken){return{ok:false,message:\"Please complete the CAPTCHA.\"};}const signInPayload={email:formData.email,password:formData.password};if(captchaRequired&&captchaSiteKey&&captchaToken){signInPayload.fetchOptions={headers:{\"x-captcha-response\":captchaToken}};}const signInResponse=await signIn(signInPayload);if(signInResponse.error){setCaptchaResetKey(key=>key+1);setCaptchaToken(null);return{ok:false,message:signInResponse.error.message};}setCaptchaResetKey(key=>key+1);setCaptchaToken(null);return{ok:true,message:\"Successfully Signed in.\"};};return /*#__PURE__*/_jsx(BaseForm,{...baseProps,link:baseProps.link,button:buttonProps,fields:inputs,isInitializing:isProjectInitializing,onSubmit:onSubmit,submitAddon:captchaAddon,onError:onCaptchaError});},[]);const snakeToCamel=str=>{return str.split(\"_\").map((word,index)=>{if(index===0){return word;}return word.charAt(0).toUpperCase()+word.slice(1);}).join(\"\");};// Here we can override property controls if we don't want to expose them to the user.\n// We generate the inputs property controls dynamically based on the inputs array.\nconst inputsPropertyControls={};baseInputs.forEach((input,_idx)=>{const inputControlName=snakeToCamel(input.name);inputsPropertyControls[inputControlName]={title:`${input.displayName}`,type:ControlType.Object,controls:{render:input.overridable===true?{title:\"Render\",type:ControlType.Boolean,defaultValue:true}:undefined,hidden:input.overridable===true?{title:\"Hidden\",type:ControlType.Boolean,defaultValue:false,hidden:props=>props.render===true}:undefined,displayName:{title:\"Display Name\",type:ControlType.String,defaultValue:input.displayName,hidden:props=>props.render===true&&props.hidden===false}}};});const exportBasePropertyControls={...basePropertyControls,link:{title:\"Redirect\",type:ControlType.Link},inputFields:{title:\"Inputs\",type:ControlType.Object,controls:inputsPropertyControls},input:{...basePropertyControls.input,controls:{...basePropertyControls.input.controls,icon:exposePasswordVisibilityToggle?{type:ControlType.Object,title:\"Icon\",controls:{showPasswordVisibilityIcon:{title:\"Activated\",type:ControlType.Boolean,defaultValue:true},color:{title:\"Color\",type:ControlType.Color,defaultValue:\"#000\",hidden:props=>!props.showPasswordVisibilityIcon}}}:undefined}},button:{// Inject default button label\n...basePropertyControls.button,controls:{...basePropertyControls.button.controls,label:undefined,[buttonLabelKey]:{...basePropertyControls.button.controls.label,defaultValue:defaultButtonLabel}}}};// @ts-ignore - TS doesn't like our basePropertyControls type.\naddPropertyControls(SignIn,exportBasePropertyControls);SignIn.defaultProps={...BaseForm.defaultProps,...SignIn.defaultProps};export default SignIn;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"SignIn\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any\",\"framerIntrinsicHeight\":\"40\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"fixed\",\"framerDisableUnlink\":\"*\",\"framerIntrinsicWidth\":\"300\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}