{"version":3,"file":"ExitPopups.BDAY9rbS.mjs","names":["useState","useCallback","useRef","useMemo","React.Fragment"],"sources":["https:/framerusercontent.com/modules/dqjn6gCuTEn0Xu5AvSvt/UfiNc0x97rYP6KOerFwO/ExitPopups.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{motion,AnimatePresence}from\"framer-motion\";import{useState,useEffect,useCallback,useMemo,useRef}from\"react\";// ═══════════════════════════════════════════════════════════════════════════════\n// CONSTANTS & DEFAULTS\n// ═══════════════════════════════════════════════════════════════════════════════\n/**\n * Default prop values - beautiful, conversion-optimized defaults\n * These are designed to work out-of-the-box for most SaaS use cases\n */const defaultProps={// Trigger defaults\ntriggerMode:\"exitIntent\",exitIntentSensitivity:30,scrollDepthPercent:50,timeDelaySeconds:15,idleTimeSeconds:30,showOncePerSession:true,// Content defaults\nheadline:\"Wait! Don't leave yet\",subheadline:\"Subscribe to our newsletter and get 20% off your first order.\",badgeText:\"Limited Time\",ctaButtonText:\"Claim My Discount\",ctaButtonUrl:\"#\",closeButtonText:\"No thanks\",// Image & Layout defaults\npopupLayout:\"textOnly\",image:\"\",imageRadius:12,// Styling defaults\ncolorScheme:\"dark\",accentColor:\"#404040\",backgroundOpacity:.92,showBackdrop:true,backdropBlur:true,borderRadius:24,// Auto-close defaults\nautoCloseSeconds:0,showAutoCloseProgressBar:true,progressBarPosition:\"bottom\",pauseProgressOnHover:true,// Animation defaults\nanimationType:\"slideUp\",animationDuration:.4,// Position defaults\nposition:\"center\",edgeSpacing:24,popupWidth:480,// Close button defaults\nshowCloseButton:true,closeButtonPosition:\"inside\",// Advanced defaults\ntrackConversions:false};/**\n * Generate a unique component ID for session storage\n * Uses a simple hash of the headline for uniqueness\n */const generateComponentId=headline=>{let hash=0;for(let i=0;i<headline.length;i++){const char=headline.charCodeAt(i);hash=(hash<<5)-hash+char;hash=hash&hash;}return`exitPopup_${Math.abs(hash).toString(36)}`;};// ═══════════════════════════════════════════════════════════════════════════════\n// CUSTOM HOOKS - TRIGGER LOGIC\n// ═══════════════════════════════════════════════════════════════════════════════\n/**\n * useSessionStorage - Manages session-based dismiss state\n *\n * Uses localStorage to track if popup was already dismissed this session.\n * Falls back gracefully if localStorage is unavailable (e.g., incognito mode).\n *\n * @param key - Unique storage key for this popup instance\n * @param enabled - Whether session tracking is enabled\n * @returns [isDismissed, setDismissed] tuple\n */function useSessionStorage(key,enabled){const[isDismissed,setIsDismissed]=useState(false);// Check localStorage on mount\nuseEffect(()=>{if(!enabled)return;try{const stored=localStorage.getItem(key);if(stored===\"true\"){setIsDismissed(true);}}catch{// localStorage unavailable (e.g., incognito mode)\n// Silently fail - popup will show again\n}},[key,enabled]);// Function to mark as dismissed\nconst markDismissed=useCallback(()=>{if(!enabled)return;try{localStorage.setItem(key,\"true\");setIsDismissed(true);}catch{// Silently fail if localStorage unavailable\n}},[key,enabled]);return[isDismissed,markDismissed];}/**\n * useExitIntent - Detects mouse movement toward browser chrome\n *\n * Monitors mouse Y position relative to viewport. When the cursor moves\n * above the sensitivity threshold (default 30px from top), it triggers\n * the callback. This typically indicates user is moving toward:\n * - Browser back button\n * - Close tab button\n * - URL bar\n *\n * Only fires once per enable cycle to prevent spam.\n *\n * @param sensitivity - Pixels from top to trigger (default 30)\n * @param enabled - Whether detection is active\n * @param onTrigger - Callback when exit intent is detected\n */function useExitIntent(sensitivity,enabled,onTrigger){const hasFiredRef=useRef(false);const onTriggerRef=useRef(onTrigger);// Keep callback ref updated\nuseEffect(()=>{onTriggerRef.current=onTrigger;},[onTrigger]);useEffect(()=>{if(!enabled){hasFiredRef.current=false;return;}const handleMouseMove=event=>{// Only trigger if mouse is near top of viewport\n// and hasn't already fired this session\nif(event.clientY<sensitivity&&!hasFiredRef.current){hasFiredRef.current=true;onTriggerRef.current();}};// Small delay before enabling to prevent immediate trigger\n// (e.g., if user's mouse starts at top of page)\nconst timeoutId=setTimeout(()=>{document.addEventListener(\"mousemove\",handleMouseMove);},1e3);return()=>{clearTimeout(timeoutId);document.removeEventListener(\"mousemove\",handleMouseMove);};},[sensitivity,enabled]);}/**\n * useScrollDepth - Triggers popup when user scrolls past a percentage\n *\n * Calculates scroll position as a percentage of total scrollable height.\n * Triggers when user has scrolled past the specified threshold.\n *\n * Formula: (scrollY + windowHeight) / documentHeight * 100\n * This accounts for the visible viewport, so 100% means bottom is visible.\n *\n * @param percent - Scroll percentage to trigger (0-100)\n * @param enabled - Whether detection is active\n * @param onTrigger - Callback when scroll depth is reached\n */function useScrollDepth(percent,enabled,onTrigger){const hasFiredRef=useRef(false);const onTriggerRef=useRef(onTrigger);useEffect(()=>{onTriggerRef.current=onTrigger;},[onTrigger]);useEffect(()=>{if(!enabled){hasFiredRef.current=false;return;}const handleScroll=()=>{if(hasFiredRef.current)return;const scrollY=window.scrollY||window.pageYOffset;const windowHeight=window.innerHeight;const documentHeight=document.documentElement.scrollHeight;// Calculate current scroll percentage\n// (scrollY + windowHeight) = how much of page has been revealed\nconst currentPercent=(scrollY+windowHeight)/documentHeight*100;if(currentPercent>=percent){hasFiredRef.current=true;onTriggerRef.current();}};// Check immediately in case page is already scrolled\nhandleScroll();// Debounce scroll handler for performance\nlet ticking=false;const debouncedScroll=()=>{if(!ticking){window.requestAnimationFrame(()=>{handleScroll();ticking=false;});ticking=true;}};window.addEventListener(\"scroll\",debouncedScroll,{passive:true});return()=>{window.removeEventListener(\"scroll\",debouncedScroll);};},[percent,enabled]);}/**\n * useTimeDelay - Triggers popup after a set duration\n *\n * Simple timeout-based trigger. Starts counting from when the hook\n * becomes enabled. Cleans up properly on unmount.\n *\n * @param seconds - Delay in seconds before triggering\n * @param enabled - Whether the timer should start\n * @param onTrigger - Callback when time has elapsed\n */function useTimeDelay(seconds,enabled,onTrigger){const onTriggerRef=useRef(onTrigger);useEffect(()=>{onTriggerRef.current=onTrigger;},[onTrigger]);useEffect(()=>{if(!enabled||seconds<=0)return;const timeoutId=setTimeout(()=>{onTriggerRef.current();},seconds*1e3);return()=>{clearTimeout(timeoutId);};},[seconds,enabled]);}/**\n * useIdleDetection - Triggers popup when user becomes inactive\n *\n * Tracks user activity via mouse movement, keyboard input, clicks,\n * and touch events. Resets idle timer on any activity. Triggers\n * when no activity is detected for the specified duration.\n *\n * This is useful for re-engaging users who might have gotten\n * distracted or left the tab open.\n *\n * @param seconds - Idle duration in seconds before triggering\n * @param enabled - Whether detection is active\n * @param onTrigger - Callback when idle timeout is reached\n */function useIdleDetection(seconds,enabled,onTrigger){const hasFiredRef=useRef(false);const timeoutRef=useRef(null);const onTriggerRef=useRef(onTrigger);useEffect(()=>{onTriggerRef.current=onTrigger;},[onTrigger]);useEffect(()=>{if(!enabled||seconds<=0){hasFiredRef.current=false;return;}const resetTimer=()=>{// Don't reset if already fired\nif(hasFiredRef.current)return;// Clear existing timeout\nif(timeoutRef.current){clearTimeout(timeoutRef.current);}// Set new timeout\ntimeoutRef.current=setTimeout(()=>{if(!hasFiredRef.current){hasFiredRef.current=true;onTriggerRef.current();}},seconds*1e3);};// Activity events to monitor\nconst events=[\"mousemove\",\"mousedown\",\"keydown\",\"touchstart\",\"scroll\"];// Start the timer initially\nresetTimer();// Add listeners for all activity events\nevents.forEach(event=>{window.addEventListener(event,resetTimer,{passive:true});});return()=>{// Cleanup\nif(timeoutRef.current){clearTimeout(timeoutRef.current);}events.forEach(event=>{window.removeEventListener(event,resetTimer);});};},[seconds,enabled]);}/**\n * Converts any color format to rgba with specified alpha\n * Handles: hex (#RGB, #RRGGBB), rgb(), rgba(), hsl(), named colors\n */function colorToRgba(color,alpha){if(!color)return`rgba(99, 102, 241, ${alpha})`// fallback to indigo\n;// Handle hex colors\nif(color.startsWith(\"#\")){let hex=color.slice(1);// Convert 3-char hex to 6-char\nif(hex.length===3){hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];}const r=parseInt(hex.slice(0,2),16);const g=parseInt(hex.slice(2,4),16);const b=parseInt(hex.slice(4,6),16);if(isNaN(r)||isNaN(g)||isNaN(b)){return`rgba(99, 102, 241, ${alpha})`// fallback\n;}return`rgba(${r}, ${g}, ${b}, ${alpha})`;}// Handle rgb() and rgba() formats\nconst rgbMatch=color.match(/rgba?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/);if(rgbMatch){return`rgba(${rgbMatch[1]}, ${rgbMatch[2]}, ${rgbMatch[3]}, ${alpha})`;}// Handle hsl() and hsla() - convert to RGB\nconst hslMatch=color.match(/hsla?\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%/);if(hslMatch){const h=parseFloat(hslMatch[1])/360;const s=parseFloat(hslMatch[2])/100;const l=parseFloat(hslMatch[3])/100;let r,g,b;if(s===0){r=g=b=l;}else{const hue2rgb=(p,q,t)=>{if(t<0)t+=1;if(t>1)t-=1;if(t<1/6)return p+(q-p)*6*t;if(t<1/2)return q;if(t<2/3)return p+(q-p)*(2/3-t)*6;return p;};const q=l<.5?l*(1+s):l+s-l*s;const p=2*l-q;r=hue2rgb(p,q,h+1/3);g=hue2rgb(p,q,h);b=hue2rgb(p,q,h-1/3);}return`rgba(${Math.round(r*255)}, ${Math.round(g*255)}, ${Math.round(b*255)}, ${alpha})`;}// Fallback for named colors - create a temp element to compute\n// Since we're in a component context, just return a fallback\nreturn`rgba(99, 102, 241, ${alpha})`;}// Alias for backwards compatibility\nconst hexToRgba=colorToRgba;/**\n * getSchemeStyles - Generates complete style objects for each color scheme\n *\n * This is the heart of the styling system. Each scheme has carefully\n * crafted colors, shadows, and effects for a premium look.\n *\n * @param scheme - The color scheme preset\n * @param accentColor - Primary accent color (buttons, highlights)\n * @param backgroundOpacity - Card background opacity\n * @param borderRadius - Card corner radius in pixels\n * @returns Complete style configuration for all elements\n */function getSchemeStyles(scheme,accentColor,backgroundOpacity,borderRadius){// ─── Base Typography ─────────────────────────────────────────────────────\nconst fontFamily=\"'Onest', sans-serif\";const headingFontFamily=\"'Gambarino', serif\";// ─── Dark Scheme ─────────────────────────────────────────────────────────\n// Premium dark glassmorphism with subtle blur\nif(scheme===\"dark\"){return{card:{backgroundColor:`rgba(23, 23, 23, ${backgroundOpacity})`,backdropFilter:\"blur(12px)\",WebkitBackdropFilter:\"blur(12px)\",border:\"1px solid rgba(255, 255, 255, 0.08)\",boxShadow:`\n                    0 25px 50px -12px rgba(0, 0, 0, 0.5),\n                    0 0 0 1px rgba(148, 163, 184, 0.1),\n                    inset 0 1px 0 0 rgba(148, 163, 184, 0.1)\n                `},backdrop:{backgroundColor:\"rgba(0, 0, 0, 0.6)\"},headline:{color:\"#F1F5F9\",fontFamily,fontSize:22,fontWeight:600,lineHeight:1.3,letterSpacing:\"-0.01em\"},subheadline:{color:\"#94A3B8\",fontFamily,fontSize:15,fontWeight:400,lineHeight:1.6},badge:{backgroundColor:\"rgba(255, 255, 255, 0.08)\",color:\"#94A3B8\",fontFamily,fontSize:11,fontWeight:600,textTransform:\"uppercase\",letterSpacing:\"0.05em\",padding:\"5px 10px\",borderRadius:6},ctaButton:{backgroundColor:accentColor,color:\"#FFFFFF\",fontFamily,fontSize:15,fontWeight:600,padding:\"14px 24px\",borderRadius:borderRadius/2,border:\"none\",cursor:\"pointer\",boxShadow:`0 4px 14px ${hexToRgba(accentColor,.4)}`,transition:\"all 0.2s ease\"},ctaButtonHover:{y:-2,boxShadow:`0 8px 24px ${hexToRgba(accentColor,.5)}`},dismissButton:{backgroundColor:\"transparent\",color:\"#64748B\",fontFamily,fontSize:13,fontWeight:400,padding:\"10px\",border:\"none\",cursor:\"pointer\",transition:\"color 0.2s ease\"},closeButton:{backgroundColor:\"transparent\",color:\"#475569\",border:\"none\",borderRadius:\"50%\",cursor:\"pointer\"},closeButtonHover:{backgroundColor:\"rgba(255, 255, 255, 0.1)\",color:\"#94A3B8\"},progressBar:{backgroundColor:accentColor,boxShadow:`0 0 10px ${hexToRgba(accentColor,.5)}`},progressBarTrack:{backgroundColor:\"rgba(148, 163, 184, 0.2)\"}};}// ─── Light Scheme ────────────────────────────────────────────────────────\n// Clean white card with soft shadows\nif(scheme===\"light\"){return{card:{backgroundColor:`rgba(255, 255, 255, ${backgroundOpacity})`,border:\"1px solid rgba(226, 232, 240, 0.8)\",boxShadow:`\n                    0 20px 50px -10px rgba(0, 0, 0, 0.15),\n                    0 10px 20px -5px rgba(0, 0, 0, 0.08),\n                    0 0 0 1px rgba(226, 232, 240, 0.5)\n                `},backdrop:{backgroundColor:\"rgba(15, 23, 42, 0.4)\"},headline:{color:\"#0F172A\",fontFamily,fontSize:22,fontWeight:600,lineHeight:1.3,letterSpacing:\"-0.01em\"},subheadline:{color:\"#475569\",fontFamily,fontSize:15,fontWeight:400,lineHeight:1.6},badge:{backgroundColor:hexToRgba(accentColor,.1),color:accentColor,fontFamily,fontSize:11,fontWeight:600,textTransform:\"uppercase\",letterSpacing:\"0.05em\",padding:\"5px 10px\",borderRadius:6},ctaButton:{backgroundColor:accentColor,color:\"#FFFFFF\",fontFamily:headingFontFamily,fontSize:15,fontWeight:600,padding:\"14px 24px\",borderRadius:borderRadius/2,border:\"none\",cursor:\"pointer\",boxShadow:`0 4px 14px ${hexToRgba(accentColor,.3)}`,transition:\"all 0.2s ease\"},ctaButtonHover:{y:-2,boxShadow:`0 8px 24px ${hexToRgba(accentColor,.4)}`},dismissButton:{backgroundColor:\"transparent\",color:\"#64748B\",fontFamily,fontSize:13,fontWeight:400,padding:\"10px\",border:\"none\",cursor:\"pointer\",transition:\"color 0.2s ease\"},closeButton:{backgroundColor:\"transparent\",color:\"#94A3B8\",border:\"none\",borderRadius:\"50%\",cursor:\"pointer\"},closeButtonHover:{backgroundColor:\"rgba(0, 0, 0, 0.05)\",color:\"#64748B\"},progressBar:{backgroundColor:accentColor,boxShadow:`0 0 8px ${hexToRgba(accentColor,.4)}`},progressBarTrack:{backgroundColor:\"rgba(0, 0, 0, 0.08)\"}};}// ─── Gradient Scheme ─────────────────────────────────────────────────────\n// Accent color gradient - more prominent and vibrant\nif(scheme===\"gradient\"){return{card:{background:`\n                    linear-gradient(145deg, \n                        ${hexToRgba(accentColor,.35)} 0%, \n                        ${hexToRgba(accentColor,.2)} 25%,\n                        rgba(15, 23, 42, ${backgroundOpacity}) 60%,\n                        rgba(10, 15, 30, ${backgroundOpacity}) 100%\n                    )\n                `,backdropFilter:\"blur(20px)\",WebkitBackdropFilter:\"blur(20px)\",border:\"none\",boxShadow:`\n                    0 25px 50px -12px rgba(0, 0, 0, 0.6),\n                    0 0 60px ${hexToRgba(accentColor,.25)},\n                    0 0 100px ${hexToRgba(accentColor,.15)},\n                    inset 0 1px 0 0 ${hexToRgba(accentColor,.2)},\n                    inset 0 0 40px ${hexToRgba(accentColor,.05)}\n                `},backdrop:{backgroundColor:\"rgba(0, 0, 0, 0.7)\",background:`radial-gradient(ellipse at center, ${hexToRgba(accentColor,.08)} 0%, rgba(0, 0, 0, 0.7) 70%)`},headline:{color:\"#FFFFFF\",fontFamily,fontSize:22,fontWeight:600,lineHeight:1.3,letterSpacing:\"-0.01em\",textShadow:`0 2px 20px ${hexToRgba(accentColor,.3)}`},subheadline:{color:\"#E2E8F0\",fontFamily,fontSize:15,fontWeight:400,lineHeight:1.6},badge:{background:`linear-gradient(135deg, ${accentColor} 0%, ${hexToRgba(accentColor,.8)} 100%)`,color:\"#FFFFFF\",fontFamily,fontSize:11,fontWeight:600,textTransform:\"uppercase\",letterSpacing:\"0.05em\",padding:\"6px 12px\",borderRadius:6,boxShadow:`0 4px 20px ${hexToRgba(accentColor,.5)}, 0 0 30px ${hexToRgba(accentColor,.3)}`},ctaButton:{background:`linear-gradient(135deg, ${accentColor} 0%, ${hexToRgba(accentColor,.85)} 100%)`,color:\"#FFFFFF\",fontFamily,fontSize:15,fontWeight:600,padding:\"14px 24px\",borderRadius:borderRadius/2,border:`1px solid ${hexToRgba(accentColor,.5)}`,cursor:\"pointer\",boxShadow:`\n                    0 4px 20px ${hexToRgba(accentColor,.5)},\n                    0 0 40px ${hexToRgba(accentColor,.3)},\n                    inset 0 1px 0 0 rgba(255, 255, 255, 0.2)\n                `,transition:\"all 0.2s ease\"},ctaButtonHover:{y:-2,boxShadow:`\n                    0 8px 30px ${hexToRgba(accentColor,.6)},\n                    0 0 60px ${hexToRgba(accentColor,.4)}\n                `},dismissButton:{backgroundColor:\"transparent\",color:hexToRgba(accentColor,.7),fontFamily,fontSize:13,fontWeight:400,padding:\"10px\",border:\"none\",cursor:\"pointer\",transition:\"color 0.2s ease\"},closeButton:{backgroundColor:\"transparent\",color:hexToRgba(accentColor,.6),border:\"none\",borderRadius:\"50%\",cursor:\"pointer\"},closeButtonHover:{backgroundColor:hexToRgba(accentColor,.2),color:\"#FFFFFF\"},progressBar:{background:`linear-gradient(90deg, ${accentColor} 0%, ${hexToRgba(accentColor,.8)} 100%)`,boxShadow:`0 0 20px ${hexToRgba(accentColor,.7)}, 0 0 40px ${hexToRgba(accentColor,.4)}`},progressBarTrack:{backgroundColor:hexToRgba(accentColor,.15)}};}// ─── Glass Scheme ────────────────────────────────────────────────────────\n// Full frosted glass effect with glow\nreturn{card:{backgroundColor:`rgba(255, 255, 255, ${backgroundOpacity*.08})`,backdropFilter:\"blur(20px) saturate(180%)\",WebkitBackdropFilter:\"blur(20px) saturate(180%)\",border:\"1px solid rgba(255, 255, 255, 0.2)\",boxShadow:`\n                0 25px 50px -12px rgba(0, 0, 0, 0.4),\n                0 0 0 1px rgba(255, 255, 255, 0.1),\n                inset 0 1px 0 0 rgba(255, 255, 255, 0.15),\n                inset 0 -1px 0 0 rgba(0, 0, 0, 0.1)\n            `},backdrop:{backgroundColor:\"rgba(0, 0, 0, 0.5)\",backdropFilter:\"blur(2px)\",WebkitBackdropFilter:\"blur(2px)\"},headline:{color:\"#FFFFFF\",fontFamily,fontSize:22,fontWeight:600,lineHeight:1.3,letterSpacing:\"-0.01em\",textShadow:\"0 2px 10px rgba(0, 0, 0, 0.3)\"},subheadline:{color:\"rgba(255, 255, 255, 0.8)\",fontFamily,fontSize:15,fontWeight:400,lineHeight:1.6},badge:{backgroundColor:\"rgba(255, 255, 255, 0.15)\",color:\"#FFFFFF\",fontFamily,fontSize:11,fontWeight:600,textTransform:\"uppercase\",letterSpacing:\"0.05em\",padding:\"5px 10px\",borderRadius:6,backdropFilter:\"blur(10px)\",WebkitBackdropFilter:\"blur(10px)\",border:\"1px solid rgba(255, 255, 255, 0.1)\"},ctaButton:{backgroundColor:\"rgba(255, 255, 255, 0.2)\",color:\"#FFFFFF\",fontFamily,fontSize:15,fontWeight:600,padding:\"14px 24px\",borderRadius:borderRadius/2,border:\"1px solid rgba(255, 255, 255, 0.3)\",cursor:\"pointer\",backdropFilter:\"blur(10px)\",WebkitBackdropFilter:\"blur(10px)\",boxShadow:\"0 4px 14px rgba(0, 0, 0, 0.2)\",transition:\"all 0.2s ease\"},ctaButtonHover:{y:-2,boxShadow:\"0 8px 24px rgba(0, 0, 0, 0.3)\"},dismissButton:{backgroundColor:\"transparent\",color:\"rgba(255, 255, 255, 0.6)\",fontFamily,fontSize:13,fontWeight:400,padding:\"10px\",border:\"none\",cursor:\"pointer\",transition:\"color 0.2s ease\"},closeButton:{backgroundColor:\"transparent\",color:\"rgba(255, 255, 255, 0.5)\",border:\"none\",borderRadius:\"50%\",cursor:\"pointer\"},closeButtonHover:{backgroundColor:\"rgba(255, 255, 255, 0.1)\",color:\"rgba(255, 255, 255, 0.9)\"},progressBar:{backgroundColor:\"rgba(255, 255, 255, 0.8)\",boxShadow:\"0 0 10px rgba(255, 255, 255, 0.5)\"},progressBarTrack:{backgroundColor:\"rgba(255, 255, 255, 0.15)\"}};}/**\n * Backdrop animation variants\n * Simple fade for the overlay\n */const backdropVariants={initial:{opacity:0},animate:{opacity:1},exit:{opacity:0}};/**\n * getAnimationVariants - Returns animation configuration for each animation type\n *\n * Animation Types:\n * - fadeIn: Simple opacity fade\n * - slideUp: Slide from bottom with fade\n * - slideDown: Slide from top with fade\n * - scaleIn: Scale up from 0.9 with fade\n * - bounceIn: Spring-like overshoot animation\n *\n * Each animation includes:\n * - initial: Starting state (hidden)\n * - animate: Visible state\n * - exit: Leaving state (reverses entry)\n *\n * @param animationType - The type of animation to use\n * @param duration - Animation duration in seconds\n * @param targetOpacity - Target opacity for the animate state (default: 1)\n * @returns Framer Motion variants object\n */function getAnimationVariants(animationType,duration,targetOpacity=1){// Base transition for most animations\nconst baseTransition={duration,ease:[.16,1,.3,1]};// Spring transition for bouncy animations\nconst springTransition={type:\"spring\",stiffness:400,damping:30};switch(animationType){// ─── Fade In ─────────────────────────────────────────────────────────\n// Simple opacity transition, subtle and professional\ncase\"fadeIn\":return{initial:{opacity:0},animate:{opacity:targetOpacity,transition:baseTransition},exit:{opacity:0}};// ─── Slide Up ────────────────────────────────────────────────────────\n// Slides in from below, great for center modals\ncase\"slideUp\":return{initial:{opacity:0,y:60},animate:{opacity:targetOpacity,y:0,transition:baseTransition},exit:{opacity:0,y:60}};// ─── Slide Down ──────────────────────────────────────────────────────\n// Slides in from above, good for top bars\ncase\"slideDown\":return{initial:{opacity:0,y:-60},animate:{opacity:targetOpacity,y:0,transition:baseTransition},exit:{opacity:0,y:-60}};// ─── Scale In ────────────────────────────────────────────────────────\n// Subtle scale with fade, elegant and modern\ncase\"scaleIn\":return{initial:{opacity:0,scale:.92},animate:{opacity:targetOpacity,scale:1,transition:baseTransition},exit:{opacity:0,scale:.92}};// ─── Bounce In ───────────────────────────────────────────────────────\n// Spring-like overshoot, playful and attention-grabbing\ncase\"bounceIn\":return{initial:{opacity:0,scale:.8,y:20},animate:{opacity:targetOpacity,scale:1,y:0,transition:springTransition},exit:{opacity:0,scale:.85,y:10}};// Default to slideUp\ndefault:return{initial:{opacity:0,y:60},animate:{opacity:targetOpacity,y:0,transition:baseTransition},exit:{opacity:0,y:60}};}}/**\n * getContentStaggerVariants - Returns staggered animation for content elements\n *\n * Creates a cascading reveal effect where each content element\n * animates slightly after the previous one.\n *\n * @param baseDelay - Starting delay for the first element\n * @param staggerAmount - Delay between each element\n * @returns Container and item variants for staggered animation\n */function getContentStaggerVariants(baseDelay=.1,staggerAmount=.05){return{container:{animate:{transition:{staggerChildren:staggerAmount,delayChildren:baseDelay}}},item:{initial:{opacity:0,y:8},animate:{opacity:1,y:0,transition:{duration:.3,ease:[.16,1,.3,1]}}}};}// ═══════════════════════════════════════════════════════════════════════════════\n// AUTO-CLOSE SYSTEM\n// ═══════════════════════════════════════════════════════════════════════════════\n/**\n * useAutoClose - Manages auto-close countdown with pause-on-hover\n *\n * Features:\n * - Countdown timer that decrements in real-time\n * - Pauses when user hovers over the popup\n * - Resumes when mouse leaves\n * - Triggers close callback when timer reaches 0\n * - Returns progress percentage for progress bar\n *\n * @param seconds - Total countdown duration in seconds (0 = disabled)\n * @param isPaused - Whether countdown is paused (e.g., on hover)\n * @param isActive - Whether the popup is visible/active\n * @param onComplete - Callback when countdown completes\n * @returns Object with progress (0-100) and remaining time in ms\n */function useAutoClose(seconds,isPaused,isActive,onComplete){// Calculate totalMs from seconds - recalculate when seconds changes\nconst totalMs=seconds*1e3;const[remainingMs,setRemainingMs]=useState(totalMs);const onCompleteRef=useRef(onComplete);const intervalRef=useRef(null);// Keep callback ref updated\nuseEffect(()=>{onCompleteRef.current=onComplete;},[onComplete]);// Reset timer when seconds prop changes or popup becomes active\nuseEffect(()=>{if(seconds>0&&isActive){setRemainingMs(seconds*1e3);}else if(seconds<=0){// Reset to 0 when disabled\nsetRemainingMs(0);}},[seconds,isActive]);// Main countdown logic\nuseEffect(()=>{// Don't run if disabled, paused, or not active\nif(seconds<=0||!isActive){// Clear any existing interval\nif(intervalRef.current){clearInterval(intervalRef.current);intervalRef.current=null;}return;}// If paused, don't start/continue the interval but keep it cleared\nif(isPaused){if(intervalRef.current){clearInterval(intervalRef.current);intervalRef.current=null;}return;}// Update every 50ms for smooth progress bar\nconst updateInterval=50;intervalRef.current=setInterval(()=>{setRemainingMs(prev=>{// Check if countdown complete\nif(prev<=updateInterval){// Clear interval first\nif(intervalRef.current){clearInterval(intervalRef.current);intervalRef.current=null;}// Trigger callback - use requestAnimationFrame for better timing\nrequestAnimationFrame(()=>{onCompleteRef.current();});return 0;}return prev-updateInterval;});},updateInterval);// Cleanup on unmount or when dependencies change\nreturn()=>{if(intervalRef.current){clearInterval(intervalRef.current);intervalRef.current=null;}};},[seconds,isPaused,isActive]);// Calculate progress percentage (100 = full, 0 = empty)\n// Use current totalMs (recalculated from seconds) for accurate progress\nconst progress=seconds>0&&totalMs>0?remainingMs/totalMs*100:0;return{progress,remainingMs};}function ProgressBar({progress,position,trackStyle,barStyle,borderRadius}){// Don't render if progress is 0 or invalid\nif(progress<=0||!isFinite(progress)){return null;}// Calculate border radius for progress bar ends\nconst barBorderRadius=position===\"top\"?`${borderRadius}px ${borderRadius}px 0 0`:`0 0 ${borderRadius}px ${borderRadius}px`;// Calculate horizontal inset - go edge-to-edge when no border radius\nconst horizontalInset=borderRadius>0?1:0;return /*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",// Only inset when there's border radius to ensure clean alignment\nleft:horizontalInset,right:horizontalInset,[position]:0,height:3,overflow:\"hidden\",borderRadius:barBorderRadius,...trackStyle},children:/*#__PURE__*/_jsx(motion.div,{initial:{width:\"100%\"},animate:{width:`${Math.min(100,Math.max(0,progress))}%`},transition:{duration:.1,ease:\"linear\"},style:{height:\"100%\",borderRadius:barBorderRadius,...barStyle}})});}/**\n * getPositionStyles - Returns layout styles based on position mode\n *\n * Position Modes:\n * - center: Classic modal in viewport center (default)\n * - topLeft: Corner notification in top-left\n * - topRight: Corner notification in top-right\n * - bottomRight: Corner notification in bottom-right\n * - bottomLeft: Corner notification in bottom-left\n *\n * @param position - The position mode\n * @param edgeSpacing - Distance from viewport edges (for corner positions)\n * @param width - Card width (for corner positions)\n * @param borderRadius - Card border radius\n * @returns Complete style configuration for backdrop and card\n */function getPositionStyles(position,edgeSpacing,width,borderRadius){const widthValue=typeof width===\"number\"?`${width}px`:width;switch(position){// ─── Center Modal ──────────────────────────────────────────────────────\n// Classic centered popup with backdrop\ncase\"center\":return{backdrop:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},card:{position:\"relative\",width:widthValue,maxWidth:\"90vw\",margin:\"auto\"}};// ─── Top Left Corner ──────────────────────────────────────────────────\n// Corner notification in top-left with edge spacing\ncase\"topLeft\":return{backdrop:{display:\"flex\",alignItems:\"flex-start\",justifyContent:\"flex-start\",padding:edgeSpacing},card:{position:\"relative\",width:widthValue,maxWidth:`calc(100vw - ${edgeSpacing*2}px)`},closeButton:{top:edgeSpacing,left:edgeSpacing}};// ─── Top Right Corner ─────────────────────────────────────────────────\n// Corner notification in top-right with edge spacing\ncase\"topRight\":return{backdrop:{display:\"flex\",alignItems:\"flex-start\",justifyContent:\"flex-end\",padding:edgeSpacing},card:{position:\"relative\",width:widthValue,maxWidth:`calc(100vw - ${edgeSpacing*2}px)`},closeButton:{top:edgeSpacing,right:edgeSpacing}};// ─── Bottom Right Corner ───────────────────────────────────────────────\n// Corner notification in bottom-right with edge spacing\ncase\"bottomRight\":return{backdrop:{display:\"flex\",alignItems:\"flex-end\",justifyContent:\"flex-end\",padding:edgeSpacing},card:{position:\"relative\",width:widthValue,maxWidth:`calc(100vw - ${edgeSpacing*2}px)`},closeButton:{bottom:edgeSpacing,right:edgeSpacing}};// ─── Bottom Left Corner ───────────────────────────────────────────────\n// Corner notification in bottom-left with edge spacing\ncase\"bottomLeft\":return{backdrop:{display:\"flex\",alignItems:\"flex-end\",justifyContent:\"flex-start\",padding:edgeSpacing},card:{position:\"relative\",width:widthValue,maxWidth:`calc(100vw - ${edgeSpacing*2}px)`},closeButton:{bottom:edgeSpacing,left:edgeSpacing}};// Default to center\ndefault:return{backdrop:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},card:{position:\"relative\",width:widthValue,maxWidth:\"90vw\",margin:\"auto\"}};}}/**\n * getResponsivePositionStyles - Adapts position for mobile screens\n *\n * On mobile (< 640px), certain positions adapt:\n * - Corner positions become full-width with padding\n * - Center remains centered but with more padding\n *\n * @param position - The position mode\n * @param edgeSpacing - Distance from viewport edges\n * @param width - Card width\n * @param borderRadius - Card border radius\n * @returns Responsive-adapted position styles\n */function getResponsivePositionStyles(position,edgeSpacing,width,borderRadius){const baseStyles=getPositionStyles(position,edgeSpacing,width,borderRadius);// Mobile breakpoint: 640px\n// On mobile, corner positions become full-width\nif(position===\"topLeft\"||position===\"topRight\"||position===\"bottomRight\"||position===\"bottomLeft\"){return{...baseStyles,card:{...baseStyles.card,width:`calc(100vw - ${edgeSpacing*2}px)`,maxWidth:`calc(100vw - ${edgeSpacing*2}px)`}};}return baseStyles;}// ═══════════════════════════════════════════════════════════════════════════════\n// ACCESSIBILITY & UTILITIES\n// ═══════════════════════════════════════════════════════════════════════════════\n/**\n * useFocusTrap - Traps focus within the popup for accessibility\n *\n * When popup is visible, focus is trapped inside. Pressing Tab cycles\n * through focusable elements within the popup. Escape key closes popup.\n *\n * @param isActive - Whether focus trap should be active\n * @param onEscape - Callback when Escape key is pressed\n * @returns Ref to attach to the container element\n */function useFocusTrap(isActive,onEscape){const containerRef=useRef(null);useEffect(()=>{if(!isActive)return;const handleKeyDown=event=>{// Escape key closes popup\nif(event.key===\"Escape\"){event.preventDefault();onEscape();return;}// Tab key handling for focus trap\nif(event.key===\"Tab\"&&containerRef.current){const focusableElements=containerRef.current.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])');if(focusableElements.length===0)return;const firstElement=focusableElements[0];const lastElement=focusableElements[focusableElements.length-1];// If Shift+Tab on first element, go to last\nif(event.shiftKey&&document.activeElement===firstElement){event.preventDefault();lastElement.focus();return;}// If Tab on last element, go to first\nif(!event.shiftKey&&document.activeElement===lastElement){event.preventDefault();firstElement.focus();return;}}};document.addEventListener(\"keydown\",handleKeyDown);// Focus the container itself instead of first focusable element\n// This prevents the CTA button from appearing with a focus ring on popup open\nif(containerRef.current){// Focus the container for keyboard navigation, not the button\ncontainerRef.current.focus();}return()=>{document.removeEventListener(\"keydown\",handleKeyDown);};},[isActive,onEscape]);return containerRef;}/**\n * Safe localStorage access with error handling\n *\n * @param key - Storage key\n * @param value - Value to set (optional)\n * @returns Stored value or null if unavailable\n */function safeLocalStorage(key,value){try{if(value!==undefined){localStorage.setItem(key,value);return value;}return localStorage.getItem(key);}catch{// localStorage unavailable (e.g., incognito mode, quota exceeded)\nreturn null;}}function PopupImage({src,alt,radius,layout,colorScheme,widthOverride}){// Handle both string URLs and ResponsiveImage objects\nconst imageSrc=typeof src===\"string\"?src:src?.src;const imageSrcSet=typeof src===\"string\"?undefined:src?.srcSet;const imageAlt=alt||(typeof src===\"string\"?\"Popup image\":src?.alt||\"Popup image\");if(!imageSrc)return null;const isHorizontal=layout===\"imageLeft\"||layout===\"imageRight\";// For horizontal layouts, use a fixed aspect ratio container\n// When wrapped (widthOverride provided): use height: 100% to fill wrapper\n// When direct child (no widthOverride): use alignSelf: stretch to match flex container\nconst horizontalImageStyle={width:widthOverride||\"45%\",minHeight:200,flexShrink:0,...widthOverride?{height:\"100%\"}// When wrapped, fill the wrapper's height\n:{alignSelf:\"stretch\"},overflow:\"hidden\",borderRadius:radius,backgroundColor:\"transparent\",display:\"flex\",alignItems:\"stretch\"};// For vertical layouts\nconst verticalImageStyle={width:widthOverride||\"100%\",height:180,flexShrink:0,overflow:\"hidden\",borderRadius:radius,backgroundColor:\"transparent\"};return /*#__PURE__*/_jsx(\"div\",{style:isHorizontal?horizontalImageStyle:verticalImageStyle,children:/*#__PURE__*/_jsx(\"img\",{src:imageSrc,srcSet:imageSrcSet,alt:imageAlt,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",display:\"block\"}})});}// ═══════════════════════════════════════════════════════════════════════════════\n// MAIN COMPONENT\n// ═══════════════════════════════════════════════════════════════════════════════\n/**\n * ExitPopups - A modern, conversion-optimized exit-intent popup component\n *\n * Features:\n * - Multiple trigger modes (exit intent, scroll depth, time delay, idle)\n * - Beautiful dark/light/gradient/glass themes\n * - Smooth Framer Motion animations\n * - Auto-close with pause-on-hover progress bar\n * - Session-aware (shows once per session by default)\n * - Fully customizable via Framer property controls\n *\n * @framerDisableUnlink\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n * @framerIntrinsicWidth 480\n * @framerIntrinsicHeight 300\n */function ExitPopupsComponent(props){// Always ensure we have props (safety check)\nif(!props){return /*#__PURE__*/_jsx(\"div\",{style:{padding:\"20px\",backgroundColor:\"#f0f0f0\"},children:\"Exit Popup Component\"});}// Merge props with defaults\nconst{// Trigger\ntriggerMode,exitIntentSensitivity,scrollDepthPercent,timeDelaySeconds,idleTimeSeconds,showOncePerSession,// Content\nheadline,subheadline,badgeText,ctaButtonText,ctaButtonUrl,closeButtonText,// Image & Layout\npopupLayout,image,imageRadius,// Styling\ncolorScheme,accentColor,backgroundOpacity,showBackdrop,backdropBlur,borderRadius,// Auto-close\nautoCloseSeconds,showAutoCloseProgressBar,progressBarPosition,pauseProgressOnHover,// Animation\nanimationType,animationDuration,// Position\nposition,edgeSpacing,popupWidth,// Close button\nshowCloseButton,closeButtonPosition,// Advanced\ntrackConversions,onCtaClick,onClose,// Framer\nstyle}={...defaultProps,...props};// ─── State ───────────────────────────────────────────────────────────────\nconst[isVisible,setIsVisible]=useState(false);const[isHovered,setIsHovered]=useState(false);const[isCopied,setIsCopied]=useState(false);// ─── Canvas Detection ────────────────────────────────────────────────────\nconst isCanvas=RenderTarget.current()===RenderTarget.canvas;// ─── Safe Defaults ───────────────────────────────────────────────────────\n// Safe defaults for content (prevent rendering errors)\nconst safeHeadline=headline||\"Exit Popup\";const safeSubheadline=subheadline||\"This is a preview of the exit popup component.\";const safeCtaText=ctaButtonText||\"Click Here\";const safeCloseText=closeButtonText||\"No thanks\";// ─── Component ID for Session Storage ────────────────────────────────────\nconst componentId=useMemo(()=>generateComponentId(safeHeadline),[safeHeadline]);// ─── Session Storage ─────────────────────────────────────────────────────\n// Track if popup was already shown/dismissed this session\nconst[isDismissedSession,markDismissedSession]=useSessionStorage(componentId,showOncePerSession??true);// ─── Trigger Callback ────────────────────────────────────────────────────\n// Unified callback for all trigger types\nconst handleTrigger=useCallback(()=>{// Don't show if already dismissed this session\nif(isDismissedSession)return;// Don't show if already visible\nif(isVisible)return;// Don't trigger in canvas mode (handled separately)\nif(isCanvas)return;setIsVisible(true);},[isDismissedSession,isVisible,isCanvas]);// ─── Trigger Hooks ───────────────────────────────────────────────────────\n// Each hook handles its own trigger mode detection\n// Only enabled when triggerMode matches and popup isn't already dismissed\n// Exit Intent: Mouse moving toward browser chrome\nuseExitIntent(exitIntentSensitivity??30,triggerMode===\"exitIntent\"&&!isDismissedSession&&!isCanvas,handleTrigger);// Scroll Depth: User scrolled past percentage threshold\nuseScrollDepth(scrollDepthPercent??50,triggerMode===\"scrollDepth\"&&!isDismissedSession&&!isCanvas,handleTrigger);// Time Delay: After specified seconds on page\nuseTimeDelay(timeDelaySeconds??15,triggerMode===\"timeDelay\"&&!isDismissedSession&&!isCanvas,handleTrigger);// Idle Detection: No user activity for specified duration\nuseIdleDetection(idleTimeSeconds??30,triggerMode===\"idle\"&&!isDismissedSession&&!isCanvas,handleTrigger);// ─── Canvas Mode ─────────────────────────────────────────────────────────\n// Show popup immediately in canvas mode for preview\nuseEffect(()=>{if(isCanvas){setIsVisible(true);}},[isCanvas]);// ─── Handlers ────────────────────────────────────────────────────────────\nconst handleClose=useCallback(()=>{setIsVisible(false);// Mark as dismissed for session (if enabled)\nmarkDismissedSession();onClose?.();},[markDismissedSession,onClose]);// ─── Accessibility ───────────────────────────────────────────────────────\n// Focus trap for keyboard navigation\nconst containerRef=useFocusTrap(isVisible&&!isCanvas,handleClose);const handleCtaClick=useCallback(()=>{navigator.clipboard.writeText(\"CALM4\").then(()=>{console.log(\"copied OK\");}).catch(err=>{console.log(\"clipboard error:\",err);});const el=document.createElement(\"textarea\");el.value=\"CALM4\";el.setAttribute(\"readonly\",\"\");el.style.cssText=\"position:fixed;top:-9999px;opacity:0;pointer-events:none;\";document.body.appendChild(el);el.focus();el.select();el.setSelectionRange(0,el.value.length);const ok=document.execCommand(\"copy\");document.body.removeChild(el);if(!ok&&typeof navigator?.clipboard?.writeText===\"function\"){navigator.clipboard.writeText(\"CALM4\").catch(()=>{});}setIsCopied(true);if(trackConversions){window.dispatchEvent(new CustomEvent(\"exitPopupConversion\",{detail:{componentId,headline:safeHeadline}}));}onCtaClick?.();setTimeout(()=>{if(ctaButtonUrl&&ctaButtonUrl!==\"#\"){if(ctaButtonUrl.startsWith(\"#\")){const target=document.getElementById(ctaButtonUrl.slice(1));if(target)target.scrollIntoView({behavior:\"smooth\",block:\"start\"});}else{window.location.href=ctaButtonUrl;}}handleClose();},1200);},[trackConversions,componentId,safeHeadline,onCtaClick,ctaButtonUrl,handleClose]);// ─── Auto-Close System ────────────────────────────────────────────────────\n// Determine if auto-close should pause (hover + pauseProgressOnHover enabled)\nconst shouldPauseAutoClose=isHovered&&(pauseProgressOnHover??true);// Use auto-close hook - handles countdown and triggers close\nconst{progress:autoCloseProgress}=useAutoClose(autoCloseSeconds??0,shouldPauseAutoClose,isVisible&&!isCanvas,handleClose);// ─── Computed Styles ─────────────────────────────────────────────────────\nconst computedBorderRadius=typeof borderRadius===\"number\"?borderRadius:24;// Get scheme-specific styles\nconst schemeStyles=useMemo(()=>{try{return getSchemeStyles(colorScheme||\"dark\",accentColor||\"#6366F1\",backgroundOpacity||.92,computedBorderRadius);}catch(error){// Fallback to dark theme if styling fails\nconsole.warn(\"ExitPopups: Error generating styles, using fallback\",error);return getSchemeStyles(\"dark\",\"#6366F1\",.92,computedBorderRadius);}},[colorScheme,accentColor,backgroundOpacity,computedBorderRadius]);// Get animation variants based on animationType prop\n// Pass backgroundOpacity so the card animates to the correct opacity level\nconst cardAnimationVariants=useMemo(()=>getAnimationVariants(animationType||\"slideUp\",animationDuration||.4,backgroundOpacity??1),[animationType,animationDuration,backgroundOpacity]);// Get staggered content animation variants\nconst contentStagger=useMemo(()=>getContentStaggerVariants(.1,.05),[]);// Get position-specific layout styles\n// Use popupWidth directly - no longer conflicts with Framer's layout width\nconst resolvedPopupWidth=typeof popupWidth===\"number\"?popupWidth:defaultProps.popupWidth;const positionStyles=useMemo(()=>getResponsivePositionStyles(position||\"center\",edgeSpacing??24,resolvedPopupWidth,computedBorderRadius),[position,edgeSpacing,resolvedPopupWidth,computedBorderRadius]);// Card container styles - merge position styles with scheme styles\n// Explicitly set borderRadius and overflow LAST to ensure they're always properly applied\n// Apply overall opacity to the entire card (including image) for the Card Opacity control\nconst cardStyles={padding:\"32px\",boxSizing:\"border-box\",position:\"relative\",flexShrink:0,flexGrow:0,// Apply opacity to entire card (background + content + image)\nopacity:backgroundOpacity??1,...positionStyles.card,...schemeStyles.card,// Apply these AFTER scheme styles to ensure they're never overwritten\nborderRadius:computedBorderRadius,overflow:\"hidden\",isolation:\"isolate\"};// Backdrop/overlay styles - merge position styles with backdrop config\nconst backdropStyles={position:\"fixed\",inset:0,zIndex:9999,...positionStyles.backdrop,...showBackdrop?schemeStyles.backdrop:{backgroundColor:\"transparent\"},...backdropBlur&&showBackdrop?{backdropFilter:\"blur(4px)\",WebkitBackdropFilter:\"blur(4px)\"}:{}};// Calculate close button styles - always inside the card\nconst getCloseButtonStyles=()=>{const buttonSize=32;// Account for border radius: position button so it sits comfortably in the corner\n// Use a small offset that works well with all border radius sizes (8, 16, 24px)\nconst insideOffset=Math.max(6,computedBorderRadius/4);return{position:\"absolute\",width:buttonSize,height:buttonSize,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",padding:0,zIndex:10,top:insideOffset,right:insideOffset,...schemeStyles.closeButton};};const closeButtonStyles=getCloseButtonStyles();// ─── Render ──────────────────────────────────────────────────────────────\n// Card content that's always visible (for Framer canvas)\n// This ensures Framer always sees something\n// popupWidth is now a dedicated prop that doesn't conflict with Framer's layout system\nconst canvasWidth=`${resolvedPopupWidth}px`;// Determine layout properties\nconst currentLayout=popupLayout||\"textOnly\";const isHorizontalLayout=currentLayout===\"imageLeft\"||currentLayout===\"imageRight\";const isVerticalLayout=currentLayout===\"imageTop\"||currentLayout===\"imageBottom\";const hasImage=!!image&&currentLayout!==\"textOnly\";// Text content block (reusable)\nconst renderTextContent=(animated=false,stagger)=>/*#__PURE__*/_jsxs(\"div\",{style:{flex:1,minWidth:0},children:[badgeText&&/*#__PURE__*/_jsx(\"div\",{style:{display:\"inline-block\",marginBottom:12,...schemeStyles.badge},children:badgeText}),/*#__PURE__*/_jsx(\"h2\",{style:{margin:0,marginBottom:8,...schemeStyles.headline},children:safeHeadline}),/*#__PURE__*/_jsx(\"p\",{style:{margin:0,marginBottom:24,...schemeStyles.subheadline},children:safeSubheadline.split(\"CALM4\").map((part,i,arr)=>i<arr.length-1?/*#__PURE__*/_jsxs(React.Fragment,{children:[part,/*#__PURE__*/_jsx(\"span\",{style:{backgroundColor:\"rgba(255, 255, 255, 0.12)\",color:\"#E2E8F0\",fontWeight:600,padding:\"1px 6px\",borderRadius:4,fontFamily:\"monospace\",letterSpacing:\"0.05em\"},children:\"CALM4\"})]},i):part)}),/*#__PURE__*/_jsx(\"button\",{style:{width:\"100%\",...schemeStyles.ctaButton},children:isCopied?\"Code Copied! ✓\":safeCtaText}),closeButtonText&&/*#__PURE__*/_jsx(\"button\",{style:{width:\"100%\",marginTop:12,...schemeStyles.dismissButton},children:safeCloseText})]});// Safety: Always return something visible\nconst cardPreview=/*#__PURE__*/_jsxs(\"div\",{style:{...cardStyles,// Override with explicit width after cardStyles to ensure consistency\nwidth:canvasWidth,maxWidth:\"90vw\",minHeight:200,position:\"relative\",display:\"block\",...style||{},// Apply these LAST to ensure they're never overridden by Framer props\nborderRadius:computedBorderRadius,overflow:\"hidden\",isolation:\"isolate\"},children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:isHorizontalLayout?\"row\":\"column\",gap:hasImage?20:0,alignItems:\"stretch\"},children:[hasImage&&(currentLayout===\"imageLeft\"||currentLayout===\"imageTop\")&&/*#__PURE__*/_jsx(PopupImage,{src:image||\"\",alt:\"Popup image\",radius:typeof imageRadius===\"number\"?imageRadius:12,layout:currentLayout,colorScheme:colorScheme||\"dark\"}),renderTextContent(),hasImage&&(currentLayout===\"imageRight\"||currentLayout===\"imageBottom\")&&/*#__PURE__*/_jsx(PopupImage,{src:image||\"\",alt:\"Popup image\",radius:typeof imageRadius===\"number\"?imageRadius:12,layout:currentLayout,colorScheme:colorScheme||\"dark\"})]}),showCloseButton&&/*#__PURE__*/_jsx(\"button\",{style:closeButtonStyles,children:/*#__PURE__*/_jsx(\"svg\",{width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",style:{display:\"block\"},children:/*#__PURE__*/_jsx(\"path\",{d:\"M1 1L13 13M1 13L13 1\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\"})})}),(autoCloseSeconds??0)>0&&showAutoCloseProgressBar&&/*#__PURE__*/_jsx(ProgressBar,{progress:65,position:progressBarPosition||\"bottom\",trackStyle:schemeStyles.progressBarTrack,barStyle:schemeStyles.progressBar,borderRadius:computedBorderRadius})]});// Always show card preview in canvas (Framer needs to see it)\n// In preview/published, show modal when visible, otherwise show card\nif(isCanvas){return cardPreview;}// In preview/published mode: show modal when visible\nif(isVisible){return /*#__PURE__*/_jsx(AnimatePresence,{mode:\"wait\",children:/*#__PURE__*/_jsx(motion.div,{variants:backdropVariants,initial:\"initial\",animate:\"animate\",exit:\"exit\",transition:{duration:animationDuration},style:backdropStyles,onClick:handleClose,onMouseEnter:()=>setIsHovered(true),onMouseLeave:()=>setIsHovered(false),role:\"dialog\",\"aria-modal\":\"true\",\"aria-labelledby\":\"exit-popup-headline\",\"aria-describedby\":\"exit-popup-description\",tabIndex:-1,children:/*#__PURE__*/_jsxs(motion.div,{ref:containerRef,variants:cardAnimationVariants,initial:\"initial\",animate:\"animate\",exit:\"exit\",style:{...cardStyles,// Explicitly set width constraints for live mode to match canvas preview\n// Use popupWidth (corrected for Framer layout values) instead of raw width\nwidth:canvasWidth,maxWidth:\"90vw\",display:\"block\",// Apply these LAST to ensure they're never overridden\nborderRadius:computedBorderRadius,overflow:\"hidden\",isolation:\"isolate\"},onClick:e=>e.stopPropagation(),role:\"document\",children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:isHorizontalLayout?\"row\":\"column\",gap:hasImage?20:0,alignItems:\"stretch\"},children:[hasImage&&(currentLayout===\"imageLeft\"||currentLayout===\"imageTop\")&&/*#__PURE__*/_jsx(motion.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},transition:{delay:.1,duration:.3},style:{// Match canvas mode: for horizontal layouts, motion.div takes 45% width\n// PopupImage's internal div needs to be 100% of this wrapper to match canvas behavior\n// Ensure it stretches to match text content height\n...isHorizontalLayout?{width:\"45%\",flexShrink:0,alignSelf:\"stretch\"}:{flexShrink:0}},children:/*#__PURE__*/_jsx(PopupImage,{src:image||\"\",alt:\"Popup image\",radius:typeof imageRadius===\"number\"?imageRadius:12,layout:currentLayout,colorScheme:colorScheme||\"dark\",widthOverride:isHorizontalLayout?\"100%\":undefined})}),/*#__PURE__*/_jsxs(\"div\",{style:{flex:1,minWidth:0},children:[badgeText&&/*#__PURE__*/_jsx(motion.div,{initial:contentStagger.item.initial,animate:contentStagger.item.animate,transition:{delay:.1},style:{display:\"inline-block\",marginBottom:12,...schemeStyles.badge},children:badgeText}),/*#__PURE__*/_jsx(motion.h2,{id:\"exit-popup-headline\",initial:contentStagger.item.initial,animate:contentStagger.item.animate,transition:{delay:.15},style:{margin:0,marginBottom:8,...schemeStyles.headline},children:safeHeadline}),/*#__PURE__*/_jsx(motion.p,{id:\"exit-popup-description\",initial:contentStagger.item.initial,animate:contentStagger.item.animate,transition:{delay:.2},style:{margin:0,marginBottom:24,...schemeStyles.subheadline},children:safeSubheadline.split(\"CALM4\").map((part,i,arr)=>i<arr.length-1?/*#__PURE__*/_jsxs(React.Fragment,{children:[part,/*#__PURE__*/_jsx(\"span\",{style:{backgroundColor:\"rgba(255, 255, 255, 0.12)\",color:\"#E2E8F0\",border:\"1px solid rgba(255, 255, 255, 0.2)\",fontWeight:600,padding:\"1px 6px\",borderRadius:4,fontFamily:\"monospace\",letterSpacing:\"0.05em\"},children:\"CALM4\"})]},i):part)}),/*#__PURE__*/_jsx(motion.button,{initial:contentStagger.item.initial,animate:contentStagger.item.animate,transition:{delay:.25},whileHover:schemeStyles.ctaButtonHover,whileTap:{scale:.98},onClick:handleCtaClick,style:{width:\"100%\",...schemeStyles.ctaButton},\"aria-label\":safeCtaText,children:isCopied?\"Code Copied! ✓\":safeCtaText}),closeButtonText&&/*#__PURE__*/_jsx(motion.button,{initial:contentStagger.item.initial,animate:contentStagger.item.animate,transition:{delay:.3},whileHover:{opacity:.8},onClick:handleClose,style:{width:\"100%\",marginTop:12,...schemeStyles.dismissButton},\"aria-label\":safeCloseText,children:safeCloseText})]}),hasImage&&(currentLayout===\"imageRight\"||currentLayout===\"imageBottom\")&&/*#__PURE__*/_jsx(motion.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},transition:{delay:.1,duration:.3},style:{// Match canvas mode: for horizontal layouts, motion.div takes 45% width\n// PopupImage's internal div needs to be 100% of this wrapper to match canvas behavior\n// Ensure it stretches to match text content height\n...isHorizontalLayout?{width:\"45%\",flexShrink:0,alignSelf:\"stretch\"}:{flexShrink:0}},children:/*#__PURE__*/_jsx(PopupImage,{src:image||\"\",alt:\"Popup image\",radius:typeof imageRadius===\"number\"?imageRadius:12,layout:currentLayout,colorScheme:colorScheme||\"dark\",widthOverride:isHorizontalLayout?\"100%\":undefined})})]}),showCloseButton&&/*#__PURE__*/_jsx(motion.button,{initial:{opacity:0},animate:{opacity:1},whileHover:{backgroundColor:schemeStyles.closeButtonHover.backgroundColor,color:schemeStyles.closeButtonHover.color},whileTap:{scale:.9},onClick:handleClose,style:closeButtonStyles,transition:{opacity:{delay:.2,duration:.3},backgroundColor:{duration:.2,ease:[.4,0,.2,1]},color:{duration:.2,ease:[.4,0,.2,1]}},\"aria-label\":\"Close popup\",children:/*#__PURE__*/_jsx(\"svg\",{width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",style:{display:\"block\"},children:/*#__PURE__*/_jsx(\"path\",{d:\"M1 1L13 13M1 13L13 1\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\"})})}),(autoCloseSeconds??0)>0&&showAutoCloseProgressBar&&isVisible&&/*#__PURE__*/_jsx(ProgressBar,{progress:autoCloseProgress,position:progressBarPosition||\"bottom\",trackStyle:schemeStyles.progressBarTrack,barStyle:schemeStyles.progressBar,borderRadius:computedBorderRadius})]},\"card\")},\"backdrop\")});}// In production/preview mode, return null when popup is not visible\n// This is correct - the popup should not be visible until triggered\nreturn null;}// ═══════════════════════════════════════════════════════════════════════════════\n// EXPORTED COMPONENT\n// ═══════════════════════════════════════════════════════════════════════════════\n/**\n * ExitPopups - A modern, conversion-optimized exit-intent popup component\n *\n * This is the main exported component for Framer.\n * Framer requires a default export for the paste/import process to work.\n */export default function ExitPopups(props){return /*#__PURE__*/_jsx(ExitPopupsComponent,{...props});}// Set default props on the exported component\nExitPopups.defaultProps=defaultProps;// ═══════════════════════════════════════════════════════════════════════════════\n// PROPERTY CONTROLS\n// ═══════════════════════════════════════════════════════════════════════════════\naddPropertyControls(ExitPopups,{// ═══════════════════════════════════════════════════════════════════════════\n// 📝 CONTENT\n// ═══════════════════════════════════════════════════════════════════════════\nheadline:{type:ControlType.String,title:\"Headline\",defaultValue:defaultProps.headline,placeholder:\"Enter headline text\",description:\"Main attention-grabbing title\"},subheadline:{type:ControlType.String,title:\"Subheadline\",defaultValue:defaultProps.subheadline,displayTextArea:true,placeholder:\"Enter supporting text\",description:\"Supporting message below headline\"},badgeText:{type:ControlType.String,title:\"Badge Label\",defaultValue:defaultProps.badgeText,placeholder:\"e.g., Limited Time\",description:\"Small highlighted label (leave empty to hide)\"},ctaButtonText:{type:ControlType.String,title:\"Button Text\",defaultValue:defaultProps.ctaButtonText,placeholder:\"Button text\",description:\"Primary action button text\"},ctaButtonUrl:{type:ControlType.String,title:\"Button URL\",defaultValue:defaultProps.ctaButtonUrl,placeholder:\"https://...\",description:\"URL to navigate when button is clicked\"},closeButtonText:{type:ControlType.String,title:\"Dismiss Link\",defaultValue:defaultProps.closeButtonText,placeholder:\"No thanks\",description:\"Text link to close popup (leave empty to hide)\"},// ═══════════════════════════════════════════════════════════════════════════\n// 🖼️ LAYOUT & IMAGE\n// ═══════════════════════════════════════════════════════════════════════════\npopupLayout:{type:ControlType.Enum,title:\"Layout\",options:[\"textOnly\",\"imageTop\",\"imageBottom\",\"imageLeft\",\"imageRight\"],optionTitles:[\"Text Only\",\"Image Top\",\"Image Bottom\",\"Image Left\",\"Image Right\"],defaultValue:defaultProps.popupLayout,description:\"Choose how content is arranged in the popup\"},image:{type:ControlType.ResponsiveImage,title:\"Image\",hidden:props=>props.popupLayout===\"textOnly\",description:\"Upload an image for the popup\"},imageRadius:{type:ControlType.Number,title:\"Image Corners\",min:0,max:32,step:4,unit:\"px\",defaultValue:defaultProps.imageRadius,hidden:props=>props.popupLayout===\"textOnly\"||!props.image,description:\"Round the corners of the image\"},// ═══════════════════════════════════════════════════════════════════════════\n// 🎨 APPEARANCE\n// ═══════════════════════════════════════════════════════════════════════════\ncolorScheme:{type:ControlType.Enum,title:\"Theme\",options:[\"dark\",\"light\",\"gradient\",\"glass\"],optionTitles:[\"Dark\",\"Light\",\"Gradient\",\"Glass\"],defaultValue:defaultProps.colorScheme,description:\"Visual style preset for the popup\"},accentColor:{type:ControlType.Color,title:\"Accent Color\",defaultValue:defaultProps.accentColor,description:\"Primary color for buttons, badges, progress bar, and card highlights on all themes.\"},borderRadius:{type:ControlType.Number,title:\"Card Corners\",min:0,max:32,step:4,unit:\"px\",defaultValue:defaultProps.borderRadius,description:\"Corner roundness of the popup card\"},backgroundOpacity:{type:ControlType.Number,title:\"Card Opacity\",min:.5,max:1,step:.05,defaultValue:defaultProps.backgroundOpacity,description:\"Transparency of the popup card background\"},showBackdrop:{type:ControlType.Boolean,title:\"Show Overlay\",defaultValue:defaultProps.showBackdrop,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Dark overlay behind the popup\"},backdropBlur:{type:ControlType.Boolean,title:\"Blur Background\",defaultValue:defaultProps.backdropBlur,enabledTitle:\"Yes\",disabledTitle:\"No\",hidden:props=>!props.showBackdrop,description:\"Apply blur effect to page content behind popup\"},// ═══════════════════════════════════════════════════════════════════════════\n// 📍 POSITION & SIZE\n// ═══════════════════════════════════════════════════════════════════════════\nposition:{type:ControlType.Enum,title:\"Screen Position\",options:[\"center\",\"topLeft\",\"topRight\",\"bottomRight\",\"bottomLeft\"],optionTitles:[\"Center\",\"Top Left\",\"Top Right\",\"Bottom Right\",\"Bottom Left\"],defaultValue:defaultProps.position,description:\"Where the popup appears on screen\"},popupWidth:{type:ControlType.Number,title:\"Popup Width\",min:280,max:800,step:20,unit:\"px\",defaultValue:defaultProps.popupWidth,description:\"Maximum width of the popup\"},edgeSpacing:{type:ControlType.Number,title:\"Edge Spacing\",min:4,max:48,step:4,unit:\"px\",defaultValue:defaultProps.edgeSpacing,hidden:props=>props.position===\"center\",description:\"Distance from screen edges for corner positions\"},// ═══════════════════════════════════════════════════════════════════════════\n// ⏱️ TRIGGER SETTINGS\n// ═══════════════════════════════════════════════════════════════════════════\ntriggerMode:{type:ControlType.Enum,title:\"Trigger Type\",options:[\"exitIntent\",\"scrollDepth\",\"timeDelay\",\"idle\"],optionTitles:[\"Exit Intent\",\"Scroll Depth\",\"Time Delay\",\"User Idle\"],defaultValue:defaultProps.triggerMode,description:\"How the popup is triggered to appear\"},exitIntentSensitivity:{type:ControlType.Number,title:\"Exit Sensitivity\",min:10,max:100,step:5,unit:\"px\",defaultValue:defaultProps.exitIntentSensitivity,hidden:props=>props.triggerMode!==\"exitIntent\",description:\"Distance from top of browser to trigger (lower = more sensitive)\"},scrollDepthPercent:{type:ControlType.Number,title:\"Scroll Trigger\",min:10,max:100,step:5,unit:\"%\",defaultValue:defaultProps.scrollDepthPercent,hidden:props=>props.triggerMode!==\"scrollDepth\",description:\"Show popup when user scrolls this far down the page\"},timeDelaySeconds:{type:ControlType.Number,title:\"Time Delay\",min:1,max:120,step:1,unit:\"s\",defaultValue:defaultProps.timeDelaySeconds,hidden:props=>props.triggerMode!==\"timeDelay\",description:\"Seconds to wait before showing popup\"},idleTimeSeconds:{type:ControlType.Number,title:\"Idle Timeout\",min:5,max:120,step:5,unit:\"s\",defaultValue:defaultProps.idleTimeSeconds,hidden:props=>props.triggerMode!==\"idle\",description:\"Show popup after user is inactive for this long\"},showOncePerSession:{type:ControlType.Boolean,title:\"Show Once\",defaultValue:defaultProps.showOncePerSession,enabledTitle:\"Once\",disabledTitle:\"Always\",description:\"Once = show once per session, Always = show every trigger\"},// ═══════════════════════════════════════════════════════════════════════════\n// ✨ ANIMATION\n// ═══════════════════════════════════════════════════════════════════════════\nanimationType:{type:ControlType.Enum,title:\"Animation Style\",options:[\"fadeIn\",\"slideUp\",\"slideDown\",\"scaleIn\",\"bounceIn\"],optionTitles:[\"Fade In\",\"Slide Up\",\"Slide Down\",\"Scale In\",\"Bounce In\"],defaultValue:defaultProps.animationType,description:\"How the popup enters and exits\"},animationDuration:{type:ControlType.Number,title:\"Animation Speed\",min:.2,max:2,step:.1,unit:\"s\",defaultValue:defaultProps.animationDuration,description:\"Duration of entry/exit animations\"},// ═══════════════════════════════════════════════════════════════════════════\n// ⏰ AUTO-CLOSE\n// ═══════════════════════════════════════════════════════════════════════════\nautoCloseSeconds:{type:ControlType.Number,title:\"Auto-Close Timer\",min:0,max:60,step:1,unit:\"s\",defaultValue:defaultProps.autoCloseSeconds,description:\"Automatically close after this many seconds (0 = disabled)\"},showAutoCloseProgressBar:{type:ControlType.Boolean,title:\"Show Timer Bar\",defaultValue:defaultProps.showAutoCloseProgressBar,enabledTitle:\"Show\",disabledTitle:\"Hide\",hidden:props=>!props.autoCloseSeconds||props.autoCloseSeconds===0,description:\"Visual countdown progress indicator\"},progressBarPosition:{type:ControlType.Enum,title:\"Timer Bar Position\",options:[\"top\",\"bottom\"],optionTitles:[\"Top\",\"Bottom\"],defaultValue:defaultProps.progressBarPosition,displaySegmentedControl:true,hidden:props=>!props.autoCloseSeconds||props.autoCloseSeconds===0||!props.showAutoCloseProgressBar,description:\"Where to show the countdown bar on the popup\"},pauseProgressOnHover:{type:ControlType.Boolean,title:\"Pause on Hover\",defaultValue:defaultProps.pauseProgressOnHover,enabledTitle:\"Yes\",disabledTitle:\"No\",hidden:props=>!props.autoCloseSeconds||props.autoCloseSeconds===0,description:\"Pause auto-close when user hovers over popup\"},// ═══════════════════════════════════════════════════════════════════════════\n// ❌ CLOSE BUTTON\n// ═══════════════════════════════════════════════════════════════════════════\nshowCloseButton:{type:ControlType.Boolean,title:\"Show X Button\",defaultValue:defaultProps.showCloseButton,enabledTitle:\"Show\",disabledTitle:\"Hide\",description:\"Display close (X) button on popup\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ExitPopups\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ExitPopups.map"],"mappings":"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"}