{"version":3,"file":"DownloadGateButton.cFxtWiPi.mjs","names":["React.useCallback","React.useRef","React.useState","React.useMemo"],"sources":["https:/framerusercontent.com/modules/PbX51joOrMXBMjGizkaa/cufRzYThNaxDS8wrR4s0/DownloadGateButton.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType,useTracking}from\"framer\";// Matches type=\"email\" inputs AND plain text inputs that are clearly meant to hold an email\n// (name/id/placeholder/autocomplete containing \"email\"). Framer's default form fields are\n// frequently rendered as type=\"text\", so matching only input[type=\"email\"] misses them.\nconst EMAIL_LIKE_SELECTOR='input[type=\"email\"], input[autocomplete=\"email\"], input[name*=\"email\" i], input[id*=\"email\" i], input[placeholder*=\"email\" i]';/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight fixed\n */export default function DownloadGateButton(props){const readString=React.useCallback(value=>{return typeof value===\"string\"?value:\"\";},[]);const readNumber=React.useCallback((value,fallback)=>{return typeof value===\"number\"&&Number.isFinite(value)?value:fallback;},[]);const pickString=React.useCallback((primary,legacy)=>{const p=readString(primary);if(p!==\"\")return p;return readString(legacy);},[readString]);const readFileLikeUrl=React.useCallback(value=>{if(typeof value===\"string\")return value;if(value&&typeof value===\"object\"){const src=\"src\"in value&&typeof value.src===\"string\"?value.src:\"\";if(src)return src;const url=\"url\"in value&&typeof value.url===\"string\"?value.url:\"\";if(url)return url;}return\"\";},[]);const resolvedEmailInputSelector=pickString(props.emailInputSelector,props.emailSelector);const resolvedWebhookUrl=pickString(props.webhookUrl,props.webhookURL);const resolvedNotificationEmail=pickString(props.notificationEmail,props.notifyEmail);const resolvedTrackingVariable=pickString(props.trackingVariable,props.trackingVar);const resolvedFile=readFileLikeUrl(props.file);const resolvedFileUrlProp=pickString(props.fileUrl,props.fileURL);const resolvedIdleLabel=pickString(props.idleLabel,props.idleText);const resolvedPendingLabel=pickString(props.pendingLabel,props.pendingText);const resolvedSuccessLabel=pickString(props.successLabel,props.successText);const resolvedErrorLabel=pickString(props.errorLabel,props.errorText);const resolvedSuccessColor=pickString(props.successColor,props.successBG);const resolvedSuccessBorderColor=pickString(props.successBorderColor,props.successStroke);const resolvedButtonFont=props.buttonFont??{};const{style,openMode,backgroundColor,hoverColor,textColor,successTextColor,errorTextColor,errorColor,disabledColor,borderRadius,padding,idleIcon,successIcon,iconSize:iconSizeRaw,successBorderWidth:successBorderWidthRaw,onSubmit}=props;const iconSize=readNumber(iconSizeRaw,16);const successBorderWidth=readNumber(successBorderWidthRaw,1);const buttonRef=React.useRef(null);const[email,setEmail]=React.useState(\"\");const[status,setStatus]=React.useState(\"idle\");const[isHovered,setIsHovered]=React.useState(false);const track=useTracking();const isEmailValid=React.useMemo(()=>{const emailRegex=/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;return emailRegex.test(email.trim());},[email]);const resolvedFileUrl=React.useMemo(()=>{return(resolvedFile||resolvedFileUrlProp).trim();},[resolvedFile,resolvedFileUrlProp]);const resolvedDownloadFileName=React.useMemo(()=>{const trimmed=readString(props.fileName).trim();if(!trimmed)return\"\";return/\\.pdf$/i.test(trimmed)?trimmed:`${trimmed}.pdf`;},[props.fileName,readString]);const normalizedOpenMode=React.useMemo(()=>{return readString(openMode).trim().toLowerCase();},[openMode,readString]);const isDisabled=React.useMemo(()=>{if(status===\"pending\"||status===\"success\")return true;return!isEmailValid;},[isEmailValid,status]);const currentLabel=React.useMemo(()=>{if(status===\"pending\")return resolvedPendingLabel;if(status===\"success\")return resolvedSuccessLabel;if(status===\"error\")return resolvedErrorLabel;return resolvedIdleLabel;},[status,resolvedPendingLabel,resolvedSuccessLabel,resolvedErrorLabel,resolvedIdleLabel]);const detectEmailInput=React.useCallback(()=>{if(typeof document===\"undefined\")return null;const buttonEl=buttonRef.current;if(!buttonEl)return null;const trySelector=(root,selector)=>{if(!root||!selector)return null;try{const match=root.querySelector(selector);return match instanceof HTMLInputElement?match:null;}catch{// invalid selector (e.g. bad custom emailInputSelector) - don't crash detection\nreturn null;}};// Walk up from the button looking for the nearest ancestor that contains a\n// matching input, instead of jumping straight to a document-wide search once\n// the immediate parent comes up empty. The same \"email capture\" section is\n// often repeated more than once on a Framer page (footer signup, another\n// lead-gen block, etc.) with identical field names/classes - a global\n// querySelector would silently bind to whichever instance comes first in the\n// DOM rather than the one actually next to this button.\nconst findNearest=selector=>{let ancestor=buttonEl.parentElement;while(ancestor){const match=trySelector(ancestor,selector);if(match)return match;ancestor=ancestor.parentElement;}return null;};const customSelector=resolvedEmailInputSelector.trim();if(customSelector){const match=findNearest(customSelector);if(match)return match;}return findNearest(EMAIL_LIKE_SELECTOR);},[resolvedEmailInputSelector]);const findCaptureAncestor=React.useCallback(emailInput=>{if(typeof document===\"undefined\")return null;const buttonEl=buttonRef.current;if(!buttonEl)return null;// Prefer the nearest <form> around the button when available.\nconst nearestForm=buttonEl.closest(\"form\");if(nearestForm instanceof HTMLElement)return nearestForm;// Otherwise, walk up and pick the nearest ancestor that contains both\n// this button and the detected email input (same capture module region).\nif(emailInput){let ancestor=buttonEl.parentElement;while(ancestor){if(ancestor.contains(emailInput))return ancestor;ancestor=ancestor.parentElement;}}// Final fallback: nearest ancestor with any input fields.\nlet ancestor=buttonEl.parentElement;while(ancestor){if(ancestor.querySelector(\"input\"))return ancestor;ancestor=ancestor.parentElement;}return null;},[]);const collectPayloadFields=React.useCallback(emailInput=>{const payload={};if(typeof document===\"undefined\")return payload;const captureAncestor=findCaptureAncestor(emailInput);if(!captureAncestor)return payload;const allInputs=Array.from(captureAncestor.querySelectorAll(\"input\"));for(const input of allInputs){const key=input.name?.trim();if(!key)continue;if((input.type===\"checkbox\"||input.type===\"radio\")&&!input.checked){continue;}payload[key]=input.value??\"\";}return payload;},[findCaptureAncestor]);React.useEffect(()=>{if(typeof window===\"undefined\"||typeof document===\"undefined\")return;let boundInput=null;let unbind=null;const bind=input=>{if(boundInput===input)return;unbind?.();boundInput=input;const syncEmail=()=>{React.startTransition(()=>{setEmail(input.value||\"\");});};syncEmail();input.addEventListener(\"input\",syncEmail);input.addEventListener(\"change\",syncEmail);unbind=()=>{input.removeEventListener(\"input\",syncEmail);input.removeEventListener(\"change\",syncEmail);};};const tryBind=()=>{const input=detectEmailInput();if(input)bind(input);return input;};// If the target input isn't in the DOM yet (e.g. a sibling Framer frame that\n// mounts after this one), keep watching instead of giving up after one try.\nlet observer=null;if(!tryBind()){observer=new MutationObserver(()=>{if(tryBind()&&observer){observer.disconnect();observer=null;}});observer.observe(document.body,{childList:true,subtree:true});}return()=>{observer?.disconnect();unbind?.();};},[detectEmailInput]);React.useEffect(()=>{if(typeof window===\"undefined\"||typeof document===\"undefined\")return;if(status!==\"success\")return;if(!resolvedFileUrl)return;let cancelled=false;const openFile=async()=>{if(normalizedOpenMode===\"download\"){try{const fileResponse=await fetch(resolvedFileUrl);if(!fileResponse.ok){throw new Error(`File fetch failed with status ${fileResponse.status}`);}const blob=await fileResponse.blob();if(cancelled)return;const blobUrl=URL.createObjectURL(blob);const anchor=document.createElement(\"a\");anchor.href=blobUrl;anchor.download=resolvedDownloadFileName||\"\";anchor.style.display=\"none\";document.body.appendChild(anchor);anchor.click();document.body.removeChild(anchor);URL.revokeObjectURL(blobUrl);}catch(err){console.error(\"[DownloadGateButton] forced download failed, falling back to new tab:\",err);if(!cancelled){window.open(resolvedFileUrl,\"_blank\",\"noopener\");}}return;}window.open(resolvedFileUrl,\"_blank\",\"noopener\");};openFile();return()=>{cancelled=true;};},[status,resolvedFileUrl,normalizedOpenMode,resolvedDownloadFileName]);const handleClick=React.useCallback(async()=>{if(isDisabled)return;React.startTransition(()=>{setStatus(\"pending\");});let webhookStatusText=\"\";try{if(resolvedWebhookUrl.trim()){const payload={email:email.trim().toLowerCase()};const response=await fetch(resolvedWebhookUrl,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify(payload)});webhookStatusText=response.statusText||\"\";if(!response.ok){throw new Error(`Request failed with status ${response.status} ${response.statusText}`);}if(resolvedTrackingVariable.trim()){track(resolvedTrackingVariable.trim());}}if(onSubmit)onSubmit();React.startTransition(()=>{setStatus(\"success\");});}catch(error){console.error(\"[DownloadGateButton] submission failed:\",error,error instanceof Error?error.message:\"\",\"statusText:\",webhookStatusText);React.startTransition(()=>{setStatus(\"error\");});}},[isDisabled,resolvedWebhookUrl,email,onSubmit,detectEmailInput,collectPayloadFields,resolvedNotificationEmail,resolvedTrackingVariable,track]);const buttonBackground=React.useMemo(()=>{const resolvedErrorColor=readString(errorColor).trim();if(status===\"success\")return resolvedSuccessColor;if(status===\"error\")return resolvedErrorColor||backgroundColor;if(isDisabled)return disabledColor;if(isHovered)return hoverColor;return backgroundColor;},[status,errorColor,isDisabled,isHovered,resolvedSuccessColor,disabledColor,hoverColor,backgroundColor,readString]);const resolvedTextColor=React.useMemo(()=>{const successText=readString(successTextColor).trim();const errorText=readString(errorTextColor).trim();if(status===\"success\")return successText||textColor;if(status===\"error\")return errorText||textColor;return textColor;},[status,successTextColor,errorTextColor,textColor,readString]);const currentIcon=React.useMemo(()=>{if(status===\"success\")return successIcon?.src||idleIcon?.src||\"\";return idleIcon?.src||\"\";},[status,successIcon,idleIcon]);const hasIcon=React.useMemo(()=>readString(currentIcon).trim().length>0,[currentIcon,readString]);return /*#__PURE__*/_jsxs(\"button\",{ref:buttonRef,type:\"button\",role:\"button\",\"aria-disabled\":isDisabled,disabled:isDisabled,onClick:handleClick,onMouseEnter:()=>{React.startTransition(()=>setIsHovered(true));},onMouseLeave:()=>{React.startTransition(()=>setIsHovered(false));},style:{position:\"relative\",display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",gap:hasIcon?8:0,width:\"auto\",minWidth:\"max-content\",height:40,border:status===\"success\"?`${successBorderWidth}px solid ${resolvedSuccessBorderColor}`:\"none\",outline:\"none\",borderRadius,padding,background:buttonBackground,color:resolvedTextColor,cursor:isDisabled?\"not-allowed\":\"pointer\",opacity:isDisabled?.7:1,transition:\"background-color 0.2s ease, opacity 0.2s ease\",fontFamily:resolvedButtonFont.fontFamily,fontSize:resolvedButtonFont.fontSize,fontWeight:resolvedButtonFont.fontWeight,fontStyle:resolvedButtonFont.fontStyle,lineHeight:resolvedButtonFont.lineHeight,letterSpacing:resolvedButtonFont.letterSpacing,textAlign:resolvedButtonFont.textAlign,...style},children:[hasIcon?/*#__PURE__*/_jsx(\"img\",{src:currentIcon,alt:\"\",\"aria-hidden\":\"true\",style:{width:iconSize,height:iconSize,objectFit:\"contain\",flexShrink:0}}):null,/*#__PURE__*/_jsx(\"span\",{children:currentLabel})]});}DownloadGateButton.displayName=\"DownloadGateButton\";addPropertyControls(DownloadGateButton,{emailInputSelector:{type:ControlType.String,title:\"Email Selector\",defaultValue:\"\",placeholder:\".email-input\"},webhookUrl:{type:ControlType.String,title:\"Webhook URL\",defaultValue:\"\",placeholder:\"https://...\"},notificationEmail:{type:ControlType.String,title:\"Notify Email\",defaultValue:\"\",placeholder:\"team@example.com\"},trackingVariable:{type:ControlType.String,title:\"Tracking Variable\",defaultValue:\"\"},file:{type:ControlType.File,title:\"File\",allowedFileTypes:[\"pdf\"]},fileUrl:{type:ControlType.String,title:\"File URL\",defaultValue:\"\",placeholder:\"https://...\"},fileName:{type:ControlType.String,title:\"File Name\",defaultValue:\"\",placeholder:\"e.g. Pre-Plan Guide.pdf\"},openMode:{type:ControlType.Enum,title:\"Open Mode\",defaultValue:\"newTab\",options:[\"newTab\",\"download\"],optionTitles:[\"New Tab\",\"Download\"],displaySegmentedControl:true},idleLabel:{type:ControlType.String,title:\"Idle Label\",defaultValue:\"Download PDF\"},pendingLabel:{type:ControlType.String,title:\"Pending Label\",defaultValue:\"Sending…\"},successLabel:{type:ControlType.String,title:\"Success Label\",defaultValue:\"Success! Your file is ready\"},errorLabel:{type:ControlType.String,title:\"Error Label\",defaultValue:\"Something went wrong, try again\"},backgroundColor:{type:ControlType.Color,title:\"Background\",defaultValue:\"#177881\"},hoverColor:{type:ControlType.Color,title:\"Hover\",defaultValue:\"#5DA0A7\"},textColor:{type:ControlType.Color,title:\"Text\",defaultValue:\"#FFFFFF\"},successTextColor:{type:ControlType.Color,title:\"Success Text\",defaultValue:\"\"},errorTextColor:{type:ControlType.Color,title:\"Error Text\",defaultValue:\"\"},disabledColor:{type:ControlType.Color,title:\"Disabled\",defaultValue:\"#CCCCCC\"},successColor:{type:ControlType.Color,title:\"Success BG\",defaultValue:\"#2E7D32\"},errorColor:{type:ControlType.Color,title:\"Error BG\",defaultValue:\"\"},borderRadius:{type:ControlType.BorderRadius,title:\"Radius\",defaultValue:\"8px\"},padding:{type:ControlType.Padding,title:\"Padding\",defaultValue:\"12px\"},buttonFont:{type:ControlType.Font,title:\"Button Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:\"14px\",variant:\"Medium\",lineHeight:\"1em\",letterSpacing:\"-0.01em\"}},idleIcon:{type:ControlType.ResponsiveImage,title:\"Idle Icon\",description:\"Upload SVG/image for idle, pending, and error states.\"},successIcon:{type:ControlType.ResponsiveImage,title:\"Success Icon\",description:\"Upload SVG/image for success state (falls back to Idle Icon).\"},iconSize:{type:ControlType.Number,title:\"Icon Size\",defaultValue:16,min:8,max:64,step:1,unit:\"px\"},successBorderWidth:{type:ControlType.Number,title:\"Success Border\",defaultValue:1,min:0,max:8,step:1,unit:\"px\"},successBorderColor:{type:ControlType.Color,title:\"Success Stroke\",defaultValue:\"#2E7D32\"},onSubmit:{type:ControlType.EventHandler,title:\"On Submit\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"DownloadGateButton\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./DownloadGateButton.map"],"mappings":"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"}