{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/jNkcdCTKrLu6QETW4ObE/ppDjMMLFXE27hk5JK6Mz/Modal_Trigger.js"],
  "sourcesContent": ["import{jsx as _jsx}from\"react/jsx-runtime\";import{useCallback,useEffect,useRef,useState}from\"react\";import{addPropertyControls,ControlType}from\"framer\";/**\n * @framerIntrinsicHeight 0\n * @framerIntrinsicWidth 0\n */export default function ModalTrigger({showOnMouseLeave,delayConfig,scrollConfig}){const[hasBeenTriggered,setHasBeenTriggered]=useState(false);const triggerRef=useRef(null);// Event listeners added in the effect call don't have access to state\n// updates, so we'll use a ref and set both ref.current and state\n// in _setHasBeenTriggered.\nconst stateRef=useRef(hasBeenTriggered);const _setHasBeenTriggered=newState=>{stateRef.current=newState;setHasBeenTriggered(newState);};const showModal=useCallback(node=>{if(stateRef.current)return;simulateClick(node);_setHasBeenTriggered(true);},[]);const triggerOnMouseOut=useCallback(node=>e=>{// You can remove conditions if you'd prefer that the pop-up isn't\n    // triggered by the mouse leaving certain edges of the viewport.\n    if(// Top\n    e.clientY<=0||// Left\n    e.clientX<=0||// Right\n    e.clientX>=window.innerWidth||// Bottom\n    e.clientY>=window.innerHeight){showModal(node);}},[showModal]);// Listen for mouse leaving the viewport if showOnMouseLeave is true\nuseEffect(()=>{const triggerNode=triggerRef.current;if(triggerNode){if(showOnMouseLeave){window.addEventListener(\"mouseout\",triggerOnMouseOut(triggerNode));return()=>window.removeEventListener(\"mouseout\",triggerOnMouseOut(triggerNode));}}return;},[triggerOnMouseOut,showOnMouseLeave,showModal]);// Initialize a timer if showOnDelay is true\nuseEffect(()=>{const triggerNode=triggerRef.current;if(triggerNode){if(delayConfig.showOnDelay){const delay=setTimeout(()=>showModal(triggerNode),delayConfig.delaySeconds*1e3);return()=>clearTimeout(delay);}}return;},[delayConfig.showOnDelay,delayConfig.delaySeconds,showModal]);// Listen for clicks on the button and disable our triggers\n// if the button has been clicked\nuseEffect(()=>{const triggerNode=triggerRef.current;if(triggerNode){const preventTriggers=()=>_setHasBeenTriggered(true);const button=triggerNode.parentElement?.parentElement;if(button){button.addEventListener(\"keyup\",preventTriggers);button.addEventListener(\"mouseup\",preventTriggers);return()=>{window.removeEventListener(\"keyup\",preventTriggers);window.removeEventListener(\"mouseup\",preventTriggers);};}}return;},[]);// Listen for scroll if showOnScrollToPercentage is true\nuseEffect(()=>{if(scrollConfig.showOnScrollToPercentage){const initialYCoordBottomOfViewport=window.scrollY+window.innerHeight;const triggerNode=triggerRef.current;const body=document.querySelector(\"body\");if(triggerNode&&body){const scrollListener=()=>{const scrollPositionOfBottomOfViewport=window.scrollY+window.innerHeight;const triggerPoint=body.scrollHeight*scrollConfig.scrollPercentage/100;if(scrollPositionOfBottomOfViewport>=triggerPoint&&// Don't trigger if the user started below the trigger point\n// (this could happen after a refresh)\ninitialYCoordBottomOfViewport<triggerPoint){showModal(triggerNode);}};window.addEventListener(\"scroll\",scrollListener);return()=>window.removeEventListener(\"scroll\",scrollListener);}}return;},[scrollConfig.showOnScrollToPercentage,scrollConfig.scrollPercentage,showModal]);// It would be nice to aria-hide the container that Framer\n// wraps this in, but that would only be possible on the canvas\n// and it's not!\nreturn /*#__PURE__*/_jsx(\"div\",{ref:triggerRef,\"aria-hidden\":\"true\"});}// If this component breaks, it could be because Framer has decided to not wrap\n// code components in containers anymore. If that's the case, access\n// node.parentElement instead of node.parentElement.parentElement\nconst simulateClick=node=>{if(node.parentElement?.parentElement){const button=node.parentElement.parentElement;button.dispatchEvent(new FocusEvent(\"focus\"));button.dispatchEvent(new KeyboardEvent(\"keydown\",{key:\"Enter\"}));button.dispatchEvent(new KeyboardEvent(\"keyup\",{key:\"Enter\"}));}};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\":{\"framerIntrinsicHeight\":\"0\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"0\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Modal_Trigger.map"],
  "mappings": "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",
  "names": ["ModalTrigger", "showOnMouseLeave", "delayConfig", "scrollConfig", "hasBeenTriggered", "setHasBeenTriggered", "ye", "triggerRef", "pe", "stateRef", "_setHasBeenTriggered", "newState", "showModal", "te", "node", "simulateClick", "triggerOnMouseOut", "e", "window", "ue", "triggerNode", "delay", "preventTriggers", "button", "initialYCoordBottomOfViewport", "body", "scrollListener", "scrollPositionOfBottomOfViewport", "triggerPoint", "p", "addPropertyControls", "ControlType"]
}
