{"version":3,"file":"CursorFlickerFix.ChGGX2cA.mjs","names":["__esmMin","window","init_ssg_sandbox_shims","init_npm_react_18_3_1","c","init_jsx_runtime","ce","RenderTarget","init_framer_BL70qLPA","addPropertyControls","ControlType","isCanvasTarget","isCodeNav","el","findNavRoot","cur","start","root","nm","effectivelyHidden","s","startGhostNavFix","containerOf","container","apply","seen","candidates","n","target","want","scheduled","schedule","afterNavAnimations","running","a","RECHECK_AT_MS","ms","scrollEnd","SCROLL_END_MS","onNavAnimationEnd","startNavMenuKeeper","keeperStarted","pointer","pending","insideNav","x","y","nav","r","RECT_MARGIN","flush","p","ev","type","onLeaveEvent","t","rel","MENU_GRACE_MS","e","startNavCursorFix","started","useNavCursorFix","CursorFlickerFix","DEFAULT_COLOR","props","cursorColor","init_CursorFlickerFix"],"sources":["https:/framerusercontent.com/modules/vSl3joqPltZbvjc6UUpQ/s36y9WN0iq6gjUf1fwRo/CursorFlickerFix.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{RenderTarget,addPropertyControls,ControlType}from\"framer\";/**\n * Nav fixes bundle:\n *\n *  1. Ghost-nav fix — invisible stacked navbar instances no longer\n *     capture the mouse (pointer-events: none while hidden). Framer's\n *     cursor hit test (elementFromPoint) skips them for the same reason.\n *\n *     This used to run once on mount and again only on window resize.\n *     The navbar enters with a Framer \"Appear\" effect, so at mount it\n *     still sits at opacity 0.001 — the fix read that as \"hidden\", set\n *     pointer-events: none on the nav container, and never looked again.\n *     The nav then faded in looking perfectly normal but took no hover\n *     and no click until the window was resized.\n *\n *     T-173: the check re-runs when the nav could have changed, but never\n *     while scrolling: after the nav's own animations finish\n *     (getAnimations), at a few fixed times while the page settles,\n *     when scrolling stops (the nav has scroll variants), on nav\n *     animation/transition ends, resize, pageshow and tab visibility.\n *     No page-wide observer and no timer left running after 8 s.\n *\n *  2. Dropdown keeper — canvas navbar dropdowns survive small mouse\n *     detours: premature leave events are held for a grace period and\n *     only replayed if the pointer is genuinely gone.\n *\n * The yellow cursor dot this file used to draw over navbars, and the\n * stripping of Framer's cursor setting from navbar layers, are gone\n * (T-146). The navbar now carries the yellow variant of the site's own\n * Framer cursor component, so one cursor changes colour in place.\n */const DEFAULT_COLOR=\"#F5B31F\"// brand yellow, canvas placeholder only\n;const MENU_GRACE_MS=700;const RECT_MARGIN=28;/* Ghost-nav re-checks while the page (intro, appear effects, fonts) is\n   settling, then only on events; SCROLL_END_MS of quiet ends a scroll. */const RECHECK_AT_MS=[500,1e3,2e3,4e3,8e3];const SCROLL_END_MS=200;function isCanvasTarget(){return RenderTarget.current()===RenderTarget.canvas||RenderTarget.current()===RenderTarget.thumbnail||RenderTarget.current()===RenderTarget.export;}// The code navbar (MnzilNav) renders a <nav> WITHOUT framer- classes and\n// manages its own hover grace — it must be left alone by the keeper.\nfunction isCodeNav(el){return el.tagName===\"NAV\"&&!/(^|\\s)framer-/.test(el.className+\"\");}function findNavRoot(start){let cur=start;let root=null;while(cur&&cur!==document.body){if(cur.tagName===\"NAV\"){if(isCodeNav(cur))return null;root=cur;}else{const nm=cur.getAttribute?cur.getAttribute(\"data-framer-name\"):null;if(nm&&/nav/i.test(nm))root=cur;}cur=cur.parentElement;}return root;}function effectivelyHidden(el){let cur=el;while(cur&&cur!==document.documentElement){const s=window.getComputedStyle(cur);if(s.display===\"none\"||s.visibility===\"hidden\"||parseFloat(s.opacity)<.05){return true;}cur=cur.parentElement;}return false;}let started=false;// ---------------------------------------------------------------------\n// 1. Ghost-nav fix\n// ---------------------------------------------------------------------\nfunction startGhostNavFix(){const containerOf=root=>{let cur=root;let container=root;while(cur&&cur!==document.body){if(/-container(\\s|$)/.test((cur.className||\"\")+\" \")){container=cur;}cur=cur.parentElement;}return container;};const apply=()=>{const seen=new Set;const candidates=[];document.querySelectorAll(\"nav\").forEach(n=>{if(!isCodeNav(n))candidates.push(n);});document.querySelectorAll(\"[data-framer-name]\").forEach(n=>{const nm=n.getAttribute(\"data-framer-name\")||\"\";if(/nav/i.test(nm))candidates.push(n);});candidates.forEach(c=>{const target=containerOf(c);if(seen.has(target))return;seen.add(target);const hidden=effectivelyHidden(target);const want=hidden?\"none\":\"\";if(target.style.pointerEvents!==want){target.style.pointerEvents=want;}});};let scheduled=0;const schedule=()=>{if(scheduled)return;scheduled=window.setTimeout(()=>{scheduled=0;apply();},120);};/*\n     * Framer's Appear effect animates with the Web Animations API, which\n     * mutates no DOM attributes: wait for the animations running inside a\n     * nav to finish, then check once.\n     */const afterNavAnimations=()=>{if(typeof document.getAnimations!==\"function\")return;const running=document.getAnimations().filter(a=>{const t=a.effect?.target;return t instanceof Element&&findNavRoot(t)!==null;});if(running.length)Promise.all(running.map(a=>a.finished.catch(()=>null))).then(schedule);};apply();afterNavAnimations();RECHECK_AT_MS.forEach(ms=>window.setTimeout(()=>{apply();afterNavAnimations();},ms));window.addEventListener(\"resize\",schedule);document.addEventListener(\"visibilitychange\",schedule);window.addEventListener(\"pageshow\",schedule);// Only a timer reset per scroll event; the check runs once scrolling stops.\nlet scrollEnd=0;window.addEventListener(\"scroll\",()=>{window.clearTimeout(scrollEnd);scrollEnd=window.setTimeout(schedule,SCROLL_END_MS);},{passive:true,capture:true});const onNavAnimationEnd=e=>{if(e.target instanceof Element&&findNavRoot(e.target))schedule();};document.addEventListener(\"animationend\",onNavAnimationEnd,true);document.addEventListener(\"transitionend\",onNavAnimationEnd,true);}// ---------------------------------------------------------------------\n// 2. Dropdown keeper\n// ---------------------------------------------------------------------\nlet keeperStarted=false;function startNavMenuKeeper(){if(keeperStarted)return;keeperStarted=true;const pointer={x:0,y:0};const pending=new Map;const insideNav=nav=>{const{x,y}=pointer;const el=document.elementFromPoint(x,y);if(el){if(nav.contains(el)||el===nav)return true;const closestNav=el.closest?el.closest(\"nav\"):null;if(closestNav===nav)return true;if(findNavRoot(el)===nav)return true;}// Grace margin around the nav's own box only. The old code also\n// unioned every absolutely/fixed positioned descendant (a\n// getComputedStyle per descendant); a pointer over such a\n// descendant is already caught by elementFromPoint above.\nconst r=nav.getBoundingClientRect();return x>=r.left-RECT_MARGIN&&x<=r.right+RECT_MARGIN&&y>=r.top-RECT_MARGIN&&y<=r.bottom+RECT_MARGIN;};const flush=nav=>{const p=pending.get(nav);if(!p)return;if(insideNav(nav)){pending.delete(nav);return;}pending.delete(nav);p.evs.forEach(({type,target})=>{if(!target.isConnected)return;const Ctor=type.indexOf(\"pointer\")===0&&typeof PointerEvent!==\"undefined\"?PointerEvent:MouseEvent;const ev=new Ctor(type,{bubbles:type===\"pointerout\"||type===\"mouseout\",cancelable:true,clientX:pointer.x,clientY:pointer.y,relatedTarget:document.body});ev.__navKeeper=true;target.dispatchEvent(ev);});};const onLeaveEvent=e=>{if(e.__navKeeper)return;const t=e.target;if(!(t instanceof Element))return;const nav=findNavRoot(t);if(!nav)return;if(effectivelyHidden(nav))return;const rel=e.relatedTarget;if(rel instanceof Element&&(nav.contains(rel)||rel===nav||findNavRoot(rel)===nav)){return;}e.stopImmediatePropagation();let p=pending.get(nav);if(!p){p={timer:0,evs:[]};pending.set(nav,p);}p.evs.push({type:e.type,target:t});if(p.evs.length>40)p.evs.splice(0,p.evs.length-40);if(p.timer)window.clearTimeout(p.timer);p.timer=window.setTimeout(()=>flush(nav),MENU_GRACE_MS);};window.addEventListener(\"pointermove\",e=>{pointer.x=e.clientX;pointer.y=e.clientY;},{passive:true,capture:true});[\"pointerleave\",\"pointerout\",\"mouseleave\",\"mouseout\"].forEach(type=>document.addEventListener(type,onLeaveEvent,true));}/** Starts all fixes once per page load. Safe to call many times. */export function startNavCursorFix(){if(typeof document===\"undefined\"||!document.body)return;if(started)return;started=true;startGhostNavFix();startNavMenuKeeper();}/** Hook version — call from any code component to activate the fixes. */export function useNavCursorFix(){React.useEffect(()=>{if(isCanvasTarget())return;startNavCursorFix();},[]);}/**\n * Invisible helper component. Drop anywhere on a page (or inside a\n * component) to activate the nav fixes.\n *\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n * @framerDisableUnlink\n */export default function CursorFlickerFix(props){const{cursorColor=DEFAULT_COLOR}=props;useNavCursorFix();if(isCanvasTarget()){return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",minWidth:8,minHeight:8,borderRadius:\"50%\",background:cursorColor,outline:\"1px dashed rgba(0,0,0,0.35)\",pointerEvents:\"none\"},title:\"Nav fixes (ghost-nav pointer events, dropdown keeper)\"});}return null;}addPropertyControls(CursorFlickerFix,{cursorColor:{type:ControlType.Color,title:\"لون الكورزر\",defaultValue:DEFAULT_COLOR}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CursorFlickerFix\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\",\"framerSupportedLayoutWidth\":\"fixed\",\"framerSupportedLayoutHeight\":\"fixed\"}},\"useNavCursorFix\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"startNavCursorFix\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CursorFlickerFix.map"],"mappings":"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"}