{"version":3,"file":"Modal_Trigger.BEvTJTG5.mjs","names":["useState","useRef","useCallback"],"sources":["https:/framerusercontent.com/modules/JUA3OOU8mIbTUbut3qBV/jqGafZ3phhfyfClaH9Fw/Modal_Trigger.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{startTransition,useCallback,useEffect,useRef,useState}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * User request implemented:\n * - Keep this component opening the connected canvas parent trigger without requiring any popup identifier.\n * - Show the popup once every 30 days per visitor using durable browser storage.\n * - Auto-trigger after 3 seconds on load or on desktop exit intent (mouse leaving toward viewport top).\n * - Do not rely on session-only storage as the primary gate.\n * - Maintain accessibility and proper timer/listener cleanup.\n */const MODAL_SHOWN_KEY=\"2026-regulatory-update-modal-shownAt\";const THIRTY_DAYS_MS=30*24*60*60*1e3;const AUTO_DELAY_MS=3e3;const RESOLVE_RETRY_DELAY_MS=300;const MAX_RESOLVE_RETRIES=3;const MAX_ANCESTOR_LEVELS=10;const activatedTargets=new WeakSet;export default function ModalTrigger({showOnMouseLeave,delayConfig,scrollConfig}){const[hasBeenTriggered,setHasBeenTriggered]=useState(false);const triggerRef=useRef(null);const resolveRetryTimeoutRef=useRef(null);const isResolvingRef=useRef(false);const hasActivatedInstanceRef=useRef(false);const stateRef=useRef(hasBeenTriggered);const _setHasBeenTriggered=newState=>{stateRef.current=newState;startTransition(()=>setHasBeenTriggered(newState));};const clearResolveTimer=useCallback(()=>{if(typeof window===\"undefined\")return;if(resolveRetryTimeoutRef.current!==null){window.clearTimeout(resolveRetryTimeoutRef.current);resolveRetryTimeoutRef.current=null;}isResolvingRef.current=false;},[]);const lockTriggered=useCallback(target=>{if(target){activatedTargets.add(target);}hasActivatedInstanceRef.current=true;_setHasBeenTriggered(true);},[]);const hasValidRecentRecord=useCallback(()=>{if(typeof window===\"undefined\")return false;try{const raw=window.localStorage.getItem(MODAL_SHOWN_KEY);if(!raw)return false;const timestamp=Number(raw);if(!Number.isFinite(timestamp))return false;const elapsed=Date.now()-timestamp;return elapsed>=0&&elapsed<THIRTY_DAYS_MS;}catch{return false;}},[]);// Initialize from localStorage so it only fires once per 30-day period.\nuseEffect(()=>{if(typeof window===\"undefined\")return;if(hasValidRecentRecord()){_setHasBeenTriggered(true);}},[hasValidRecentRecord]);const showModal=useCallback(node=>{if(stateRef.current||hasActivatedInstanceRef.current)return;if(hasValidRecentRecord()){_setHasBeenTriggered(true);return;}if(typeof window===\"undefined\")return;if(isResolvingRef.current)return;isResolvingRef.current=true;const resolveAndActivate=attempt=>{if(stateRef.current||hasActivatedInstanceRef.current){clearResolveTimer();return;}const target=resolveActivationTarget(node);if(target){if(activatedTargets.has(target)){lockTriggered();clearResolveTimer();return;}const didActivate=activateTarget(target);if(didActivate){lockTriggered(target);}clearResolveTimer();return;}if(attempt>=MAX_RESOLVE_RETRIES){clearResolveTimer();return;}resolveRetryTimeoutRef.current=window.setTimeout(()=>resolveAndActivate(attempt+1),RESOLVE_RETRY_DELAY_MS);};resolveAndActivate(0);},[clearResolveTimer,hasValidRecentRecord,lockTriggered]);const triggerOnMouseOut=useCallback(node=>e=>{if(stateRef.current||hasActivatedInstanceRef.current)return;// Desktop exit intent: pointer leaves viewport from the top edge.\n    const isLeavingDocument=e.relatedTarget===null;if(isLeavingDocument&&e.clientY<=0){showModal(node);}},[showModal]);useEffect(()=>{if(typeof window===\"undefined\")return;const triggerNode=triggerRef.current;if(!triggerNode||hasBeenTriggered)return;if(!showOnMouseLeave)return;const handler=triggerOnMouseOut(triggerNode);window.addEventListener(\"mouseout\",handler);return()=>window.removeEventListener(\"mouseout\",handler);},[triggerOnMouseOut,showOnMouseLeave,hasBeenTriggered]);useEffect(()=>{if(typeof window===\"undefined\")return;const triggerNode=triggerRef.current;if(!triggerNode||hasBeenTriggered)return;const delay=window.setTimeout(()=>showModal(triggerNode),AUTO_DELAY_MS);return()=>window.clearTimeout(delay);},[delayConfig.showOnDelay,delayConfig.delaySeconds,showModal,hasBeenTriggered]);useEffect(()=>{return()=>{clearResolveTimer();};},[clearResolveTimer]);return /*#__PURE__*/_jsx(\"div\",{ref:triggerRef,\"aria-hidden\":\"true\"});}const hasClickableSignals=element=>{if(element.tagName.toLowerCase()===\"button\")return true;if(element.getAttribute(\"role\")===\"button\")return true;if(element.hasAttribute(\"tabindex\"))return true;const maybeInteractive=element;return Boolean(maybeInteractive.onclick||maybeInteractive.onpointerdown||maybeInteractive.onpointerup||maybeInteractive.onmousedown||maybeInteractive.onmouseup||element.hasAttribute(\"onclick\"));};const resolveActivationTarget=node=>{let level=0;let current=node.parentElement;let nearestNonWrapper=null;while(current&&level<MAX_ANCESTOR_LEVELS){if(!nearestNonWrapper&&current!==node){nearestNonWrapper=current;}if(hasClickableSignals(current)){return current;}current=current.parentElement;level+=1;}return nearestNonWrapper;};const activateWithKeyboardEnter=target=>{try{const keyDownHandled=!target.dispatchEvent(new KeyboardEvent(\"keydown\",{key:\"Enter\",code:\"Enter\",bubbles:true,cancelable:true}));const keyUpHandled=!target.dispatchEvent(new KeyboardEvent(\"keyup\",{key:\"Enter\",code:\"Enter\",bubbles:true,cancelable:true}));return keyDownHandled||keyUpHandled;}catch{return false;}};const activateTarget=target=>{if(typeof target.click===\"function\"){try{target.click();return true;}catch{return activateWithKeyboardEnter(target);}}return activateWithKeyboardEnter(target);};addPropertyControls(ModalTrigger,{showOnMouseLeave:{type:ControlType.Boolean,title:\"MouseLeave\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},delayConfig:{type:ControlType.Object,title:\"Delay\",buttonTitle:\"Configure\",controls:{showOnDelay:{type:ControlType.Boolean,title:\"Trigger\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},delaySeconds:{type:ControlType.Number,title:\"Seconds\",defaultValue:10,min:0,max:300,step:5,displayStepper:true,unit:\" s\"}}},scrollConfig:{type:ControlType.Object,title:\"Scroll\",buttonTitle:\"Configure\",controls:{showOnScrollToPercentage:{type:ControlType.Boolean,title:\"Trigger\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},scrollPercentage:{type:ControlType.Number,title:\"Scroll %\",defaultValue:50,min:0,max:100,step:1,displayStepper:true,unit:\" %\"}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ModalTrigger\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Modal_Trigger.map"],"mappings":"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"}