{"version":3,"file":"HS_Form_Component.C39OYjrt.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/U3LblWFuwe9ucjCgFqqo/cfwnvxsYoq5ytA9pJM6Q/HS_Form_Component.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef,useState}from\"react\";import{addPropertyControls,ControlType,RenderTarget,useTracking}from\"framer\";/**\n * HubSpot form embed for Framer.\n *\n * Requires this tag in Site Settings -> Custom Code -> start of <head>:\n * <script src=\"https://js.hsforms.net/forms/embed/40882779.js\" defer></script>\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n */// How long to wait for HubSpot before showing the form anyway, so a\n// missed ready event can never leave the form invisible.\nconst FADE_FALLBACK_MS=4e3;export default function HS_Form_Component(props){const{portalId,formId,region,minHeight,trackingId,fadeIn}=props;const track=useTracking();const trackedRef=useRef(false);const boxRef=useRef(null);// Render the container only after mount. If HubSpot fills a\n// server-rendered container before Framer hydrates, React rebuilds the\n// subtree and destroys the form for good.\nconst[mounted,setMounted]=useState(false);useEffect(()=>setMounted(true),[]);// Opt-in fade: stay hidden until HubSpot says this form is drawn.\n// The canvas always shows the form so it stays editable.\nconst isCanvas=RenderTarget.current()===RenderTarget.canvas;const[ready,setReady]=useState(false);const visible=!fadeIn||isCanvas||ready;useEffect(()=>{if(!fadeIn||isCanvas||!mounted||ready)return;const show=()=>setReady(true);const onReady=event=>{const detail=event.detail;if(!detail||detail.formId===formId)show();};window.addEventListener(\"hs-form-event:on-ready\",onReady);// Backup signal: the form's iframe finished loading.\nlet loadTimer=0;const onFrameLoad=()=>{loadTimer=window.setTimeout(show,300);};const watchFrame=()=>{const frame=boxRef.current?.querySelector(\"iframe\");if(!frame)return false;frame.addEventListener(\"load\",onFrameLoad,{once:true});return true;};const observer=new MutationObserver(()=>{if(watchFrame())observer.disconnect();});if(!watchFrame()&&boxRef.current){observer.observe(boxRef.current,{childList:true,subtree:true});}const fallback=window.setTimeout(show,FADE_FALLBACK_MS);return()=>{window.removeEventListener(\"hs-form-event:on-ready\",onReady);observer.disconnect();window.clearTimeout(loadTimer);window.clearTimeout(fallback);};},[fadeIn,isCanvas,mounted,ready,formId]);useEffect(()=>{if(!trackingId||!formId)return;const onSuccess=event=>{const detail=event.detail;if(!detail||detail.formId!==formId)return;if(trackedRef.current)return;trackedRef.current=true;track(trackingId);};window.addEventListener(\"hs-form-event:on-submission:success\",onSuccess);return()=>window.removeEventListener(\"hs-form-event:on-submission:success\",onSuccess);},[formId,trackingId,track]);useEffect(()=>{trackedRef.current=false;},[portalId,formId,region]);// Load the embed script if it isn't already on the page. No-op on the\n// published site, where the <head> tag above provides it. This exists for\n// the Framer canvas and preview, which don't run Custom Code.\nuseEffect(()=>{if(!portalId)return;const src=`https://js.hsforms.net/forms/embed/${portalId}.js`;if(document.querySelector(`script[src=\"${src}\"]`))return;const script=document.createElement(\"script\");script.src=src;script.defer=true;document.body.appendChild(script);},[portalId]);if(!portalId||!formId)return null;const fadeStyle=fadeIn?{opacity:visible?1:0,transform:visible?\"none\":\"translateY(16px)\",transition:\"opacity 0.6s cubic-bezier(0.22, 1, 0.36, 1), transform 0.6s cubic-bezier(0.22, 1, 0.36, 1)\"}:{};return /*#__PURE__*/_jsxs(\"div\",{ref:boxRef,className:\"hs-form-fade\",style:{width:\"100%\",minHeight,...fadeStyle},children:[/*#__PURE__*/_jsx(\"style\",{children:`@media (prefers-reduced-motion: reduce){.hs-form-fade{transition:none!important;transform:none!important}}`}),mounted&&/*#__PURE__*/_jsx(\"div\",{className:\"hs-form-frame\",\"data-portal-id\":portalId,\"data-form-id\":formId,\"data-region\":region})]});}addPropertyControls(HS_Form_Component,{portalId:{title:\"Portal ID\",type:ControlType.String,placeholder:\"e.g. 40882779\"},formId:{title:\"Form ID\",type:ControlType.String,placeholder:\"e.g. 9fa498b8-...\"},region:{title:\"Region\",type:ControlType.Enum,options:[\"na1\",\"eu1\"],optionTitles:[\"North America (na1)\",\"Europe (eu1)\"]},trackingId:{title:\"Tracking\",type:ControlType.TrackingId},minHeight:{title:\"Min Height\",type:ControlType.Number,defaultValue:250,min:0,step:10,unit:\"px\"},fadeIn:{title:\"Fade In\",type:ControlType.Boolean,defaultValue:false,enabledTitle:\"On Ready\",disabledTitle:\"Off\",description:\"Fades the form in once HubSpot has drawn it.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"HS_Form_Component\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./HS_Form_Component.map"],"mappings":"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"}