{"version":3,"file":"ProjectNavigationScrollProgress.DmRDosEx.mjs","names":["useRef","useState","useCallback","useMemo"],"sources":["https:/framerusercontent.com/modules/rWtKRxzWD7b1KqG0WCUk/wghFKobGnKD0JR61x9yw/ProjectNavigationScrollProgress.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{forwardRef,startTransition,useCallback,useEffect,useMemo,useRef,useState}from\"react\";// @ts-ignore Framer provides this module in its editor/runtime environment.\nimport{addPropertyControls,ControlType}from\"framer\";const SCROLL_THRESHOLD_PX=1600;const DEFAULT_PROGRESS_COLOR=\"#7C6FFF\";const DEFAULT_FILL_GRADIENT=\"linear-gradient(90deg, #FF5DAE 0%, #F339C9 30%, #9B4DFF 67%, #46A0FF 100%)\";function setForwardedRef(ref,value){if(typeof ref===\"function\"){ref(value);return;}if(ref&&typeof ref===\"object\"){try{ref.current=value;}catch{// Ignore readonly refs.\n}}}function resolveNextProjectHref(container){const anchors=Array.from(container.querySelectorAll(\"a[href]\"));const isUsableHref=href=>{const trimmed=href.trim();return trimmed.length>0&&trimmed!==\"#\"&&!trimmed.toLowerCase().startsWith(\"javascript:\");};// Framer can attach the link to the host itself or wrap it in an anchor.\nconst hostAnchor=container.closest(\"a[href]\");const hostHref=hostAnchor?.getAttribute(\"href\")?.trim();if(hostHref&&isUsableHref(hostHref))return hostHref;const scored=anchors.map((anchor,index)=>{const href=anchor.getAttribute(\"href\")??\"\";const label=(anchor.textContent??\"\").trim().toLowerCase();const ariaLabel=(anchor.getAttribute(\"aria-label\")??\"\").trim().toLowerCase();const combined=`${label} ${ariaLabel}`.trim();if(!isUsableHref(href))return null;if(/\\b(prev|previous|back)\\b/.test(combined)||/\\b(prev|previous)\\b/.test(href.toLowerCase()))return null;let score=0;if(/\\b(next)\\b/.test(combined))score+=4;if(/\\b(next)\\b/.test(href.toLowerCase()))score+=2;score+=index*.01;return{href,score};}).filter(item=>item!==null);if(scored.length===0)return null;scored.sort((a,b)=>b.score-a.score);return scored[0].href;}export function withProjectNavigationScrollProgress(Component){const Wrapped=/*#__PURE__*/forwardRef((props,forwardedRef)=>{const{progressColor=DEFAULT_PROGRESS_COLOR,progressThickness=30,nextProjectHref=\"\"}=props;const hostRef=useRef(null);const isPointerInsideRef=useRef(false);const isInViewportRef=useRef(false);const hasNavigatedRef=useRef(false);const progressPxRef=useRef(0);const[progress,setProgress]=useState(0);const mergedRef=useCallback(node=>{hostRef.current=node;setForwardedRef(forwardedRef,node);},[forwardedRef]);const resetProgress=useCallback(()=>{progressPxRef.current=0;startTransition(()=>setProgress(0));},[]);const engaged=useCallback(()=>{return isPointerInsideRef.current||isInViewportRef.current;},[]);const clampedThickness=useMemo(()=>Math.max(30,Math.min(72,progressThickness)),[progressThickness]);const normalizedProgress=useMemo(()=>Math.max(0,Math.min(progress,100)),[progress]);// Do not display 100% before the navigation threshold is reached.\nconst progressText=useMemo(()=>`${Math.floor(normalizedProgress)}%`,[normalizedProgress]);const showInnerPercent=useMemo(()=>normalizedProgress>=16,[normalizedProgress]);const loadingLabelVisible=useMemo(()=>normalizedProgress>0,[normalizedProgress]);const useGradientFill=useMemo(()=>progressColor===DEFAULT_PROGRESS_COLOR,[progressColor]);const resolvedExplicitNextHref=useMemo(()=>{const trimmed=typeof nextProjectHref===\"string\"?nextProjectHref.trim():\"\";if(trimmed.length===0||trimmed===\"#\"||trimmed.toLowerCase().startsWith(\"javascript:\"))return null;return trimmed;},[nextProjectHref]);const progressOverlayStyle=useMemo(()=>({position:\"absolute\",inset:0,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",pointerEvents:\"none\",overflow:\"visible\"}),[]);const progressGroupStyle=useMemo(()=>({position:\"relative\",width:\"82%\",maxWidth:680,pointerEvents:\"none\"}),[]);const progressBarStyle=useMemo(()=>({width:\"100%\",height:clampedThickness,borderRadius:clampedThickness/2,background:\"linear-gradient(180deg, rgba(18, 20, 35, 0.74) 0%, rgba(9, 11, 24, 0.55) 100%)\",border:\"1px solid rgba(171, 130, 255, 0.45)\",boxShadow:\"0 0 0 1px rgba(255, 94, 174, 0.18), 0 0 14px rgba(155, 77, 255, 0.25), inset 0 0 12px rgba(70, 160, 255, 0.08)\",opacity:progress>0?1:0,transition:\"opacity 180ms ease\",pointerEvents:\"none\",overflow:\"hidden\"}),[clampedThickness,progress]);const progressFillStyle=useMemo(()=>({width:`${normalizedProgress}%`,height:\"100%\",background:useGradientFill&&progressColor?DEFAULT_FILL_GRADIENT:progressColor||DEFAULT_PROGRESS_COLOR,transformOrigin:\"left center\",transition:\"width 120ms linear\",pointerEvents:\"none\",borderRadius:clampedThickness/2,boxShadow:\"0 0 14px rgba(243, 57, 201, 0.28), 0 0 18px rgba(70, 160, 255, 0.2)\",position:\"relative\"}),[clampedThickness,normalizedProgress,progressColor,useGradientFill]);const loadingLabelStyle=useMemo(()=>({position:\"absolute\",left:\"50%\",bottom:clampedThickness+8,transform:\"translateX(-50%)\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",fontSize:10,fontWeight:600,letterSpacing:\"0.14em\",lineHeight:1,whiteSpace:\"nowrap\",textTransform:\"uppercase\",userSelect:\"none\",WebkitUserSelect:\"none\",pointerEvents:\"none\",color:\"rgba(255,255,255,0.84)\",textShadow:\"0 0 10px rgba(124, 111, 255, 0.35)\",opacity:loadingLabelVisible?1:0,transition:\"opacity 140ms linear\"}),[clampedThickness,loadingLabelVisible]);const percentLabelStyle=useMemo(()=>({position:\"absolute\",right:12,top:\"50%\",transform:\"translateY(-50%)\",fontSize:Math.max(10,Math.min(13,clampedThickness*.34)),fontWeight:700,letterSpacing:\"0.04em\",lineHeight:1,color:\"#FFFFFF\",whiteSpace:\"nowrap\",userSelect:\"none\",WebkitUserSelect:\"none\",pointerEvents:\"none\",textShadow:\"0 1px 2px rgba(0,0,0,0.35)\",opacity:showInnerPercent?1:0,transition:\"opacity 120ms linear\"}),[clampedThickness,showInnerPercent]);useEffect(()=>{if(typeof window===\"undefined\"||typeof document===\"undefined\")return;const element=hostRef.current;if(!element)return;hasNavigatedRef.current=false;const updateViewportState=entries=>{const entry=entries[0];const isVisible=Boolean(entry?.isIntersecting);isInViewportRef.current=isVisible;if(!isVisible&&!hasNavigatedRef.current)resetProgress();};const observer=new IntersectionObserver(updateViewportState,{threshold:.15});observer.observe(element);const onPointerEnter=()=>{isPointerInsideRef.current=true;};const onPointerLeave=()=>{isPointerInsideRef.current=false;};const onWheel=event=>{if(event.ctrlKey)return;if(hasNavigatedRef.current)return;if(!engaged())return;if(Math.abs(event.deltaX)>Math.abs(event.deltaY))return;let deltaY=event.deltaY;if(event.deltaMode===1)deltaY*=16;if(event.deltaMode===2)deltaY*=window.innerHeight;if(deltaY<0&&progressPxRef.current>0){if(event.cancelable)event.preventDefault();event.stopImmediatePropagation();}progressPxRef.current=Math.max(0,Math.min(SCROLL_THRESHOLD_PX,progressPxRef.current+deltaY));// Floor keeps 1592–1599px at 99%; 1600px completes navigation.\nconst nextProgress=Math.floor(progressPxRef.current/SCROLL_THRESHOLD_PX*100);startTransition(()=>setProgress(nextProgress));if(progressPxRef.current>=SCROLL_THRESHOLD_PX){// Read the current link at completion, not a cached mount-time link.\nconst href=resolvedExplicitNextHref??resolveNextProjectHref(element);if(!href){console.warn(\"[ProjectNavigationScrollProgress] No next project link found on or inside this layer.\");resetProgress();return;}hasNavigatedRef.current=true;try{window.location.assign(href);}catch(error){hasNavigatedRef.current=false;resetProgress();console.error(\"[ProjectNavigationScrollProgress] Navigation failed:\",error);}}};element.addEventListener(\"pointerenter\",onPointerEnter,{passive:true});element.addEventListener(\"pointerleave\",onPointerLeave,{passive:true});const wheelListenerOptions={passive:false,capture:true};window.addEventListener(\"wheel\",onWheel,wheelListenerOptions);return()=>{observer.disconnect();element.removeEventListener(\"pointerenter\",onPointerEnter);element.removeEventListener(\"pointerleave\",onPointerLeave);window.removeEventListener(\"wheel\",onWheel,wheelListenerOptions);};},[engaged,resetProgress,resolvedExplicitNextHref]);return /*#__PURE__*/_jsxs(Component,{...props,ref:mergedRef,style:{...props.style,position:\"relative\"},children:[props.children,/*#__PURE__*/_jsx(\"div\",{style:progressOverlayStyle,\"aria-hidden\":\"true\",children:/*#__PURE__*/_jsxs(\"div\",{style:progressGroupStyle,children:[/*#__PURE__*/_jsx(\"div\",{style:progressBarStyle,children:/*#__PURE__*/_jsx(\"div\",{style:progressFillStyle,children:/*#__PURE__*/_jsx(\"div\",{style:percentLabelStyle,children:progressText})})}),/*#__PURE__*/_jsx(\"div\",{\"aria-hidden\":\"true\",style:loadingLabelStyle,children:\"LOADING...\"})]})})]});});addPropertyControls(Wrapped,{progressColor:{type:ControlType.Color,title:\"Bar Color\",defaultValue:DEFAULT_PROGRESS_COLOR},progressThickness:{type:ControlType.Number,title:\"Thickness\",defaultValue:30,min:30,max:72,step:1,unit:\"px\"},nextProjectHref:{type:ControlType.String,title:\"Next Href\",defaultValue:\"\",placeholder:\"Leave empty to use the next project link\"}});return Wrapped;}\nexport const __FramerMetadata__ = {\"exports\":{\"withProjectNavigationScrollProgress\":{\"type\":\"reactHoc\",\"name\":\"withProjectNavigationScrollProgress\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ProjectNavigationScrollProgress.map"],"mappings":"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"}