{"version":3,"file":"BlurGradient_Prod.CAwhEBOS.mjs","names":["React.useContext","React.useMemo","React.useRef","React.useState"],"sources":["https:/framerusercontent.com/modules/rofp3mS0LNY15cjhHzia/zmpvLkvKOP6Dr1PgUapT/BlurGradient_Prod.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType}from\"framer\";import{MotionConfigContext,spring}from\"framer-motion\";/**\n * @framerDisableUnlink\n *\n * @framerIntrinsicWidth 240\n * @framerIntrinsicHeight 240\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */function BlurGradient({blur,borderRadius,direction}){// Framer supplies its native Styles transition through MotionConfig.\nconst nativeTransition=React.useContext(MotionConfigContext).transition;// Keep browser interpolation: no React render or filter write on every frame.\nconst{filterTransition,settleMs}=React.useMemo(()=>{const seconds=Math.max(0,Number(nativeTransition?.duration??.3));const delay=Math.max(0,Number(nativeTransition?.delay??0));let timing=`${seconds}s linear`;if(nativeTransition?.type===\"spring\"){if(nativeTransition.stiffness&&nativeTransition.damping){timing=String(spring({keyframes:[0,1],stiffness:nativeTransition.stiffness,damping:nativeTransition.damping,mass:nativeTransition.mass??1}));}else{timing=String(spring(seconds,nativeTransition.bounce??.25));}}else if(Array.isArray(nativeTransition?.ease)&&nativeTransition.ease.length===4){timing=`${seconds}s cubic-bezier(${nativeTransition.ease.join(\", \")})`;}else if(typeof nativeTransition?.ease===\"string\"&&[\"linear\",\"ease\",\"ease-in\",\"ease-out\",\"ease-in-out\"].includes(nativeTransition.ease)){timing=`${seconds}s ${nativeTransition.ease}`;}const match=timing.match(/^([\\d.]+)(ms|s)/);const animationMs=match?Number(match[1])*(match[2]===\"s\"?1e3:1):seconds*1e3;const part=`${timing} ${delay}s`;return{filterTransition:`backdrop-filter ${part}, -webkit-backdrop-filter ${part}`,settleMs:animationMs+delay*1e3};},[nativeTransition]);const rootRef=React.useRef(null);const[renderLayers,setRenderLayers]=React.useState(true);const[hasBlurLayers,setHasBlurLayers]=React.useState(blur>0);const[displayBlur,setDisplayBlur]=React.useState(blur);React.useEffect(()=>{let frame=0;let nextFrame=0;let settleTimer=0;if(blur>0){if(!hasBlurLayers){// Mount at zero first so a hover from a settled zero state still animates.\nsetDisplayBlur(0);setHasBlurLayers(true);frame=requestAnimationFrame(()=>{nextFrame=requestAnimationFrame(()=>setDisplayBlur(blur));});}else{setDisplayBlur(blur);}}else{setDisplayBlur(0);if(settleMs===0)setHasBlurLayers(false);else settleTimer=window.setTimeout(()=>setHasBlurLayers(false),settleMs+50);}return()=>{cancelAnimationFrame(frame);cancelAnimationFrame(nextFrame);window.clearTimeout(settleTimer);};},[blur,settleMs]);React.useEffect(()=>{const root=rootRef.current;if(!root)return;let inView=true;const update=()=>setRenderLayers(inView&&!document.hidden);const observer=typeof IntersectionObserver!==\"undefined\"?new IntersectionObserver(([entry])=>{inView=entry.isIntersecting;update();}):null;observer?.observe(root);document.addEventListener(\"visibilitychange\",update);update();return()=>{observer?.disconnect();document.removeEventListener(\"visibilitychange\",update);};},[]);const getGradientDirection=direction=>{switch(direction){case\"toBottom\":return\"to bottom\";case\"toTop\":return\"to top\";case\"toLeft\":return\"to left\";case\"toRight\":return\"to right\";default:return\"to bottom\";}};const blurSteps=React.useMemo(()=>[{blur:`${displayBlur/2/2/2/2/2/2/2}px`,gradient:`rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 12.5%, rgba(0, 0, 0, 1) 25%, rgba(0, 0, 0, 0) 37.5%`},{blur:`${displayBlur/2/2/2/2/2/2}px`,gradient:`rgba(0, 0, 0, 0) 12.5%, rgba(0, 0, 0, 1) 25%, rgba(0, 0, 0, 1) 37.5%, rgba(0, 0, 0, 0) 50%`},{blur:`${displayBlur/2/2/2/2/2}px`,gradient:`rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 1) 37.5%, rgba(0, 0, 0, 1) 50%, rgba(0, 0, 0, 0) 62.5%`},{blur:`${displayBlur/2/2/2/2}px`,gradient:`rgba(0, 0, 0, 0) 37.5%, rgba(0, 0, 0, 1) 50%, rgba(0, 0, 0, 1) 62.5%, rgba(0, 0, 0, 0) 75%`},{blur:`${displayBlur/2/2/2}px`,gradient:`rgba(0, 0, 0, 0) 50%, rgba(0, 0, 0, 1) 62.5%, rgba(0, 0, 0, 1) 75%, rgba(0, 0, 0, 0) 87.5%`},{blur:`${displayBlur/2/2}px`,gradient:`rgba(0, 0, 0, 0) 62.5%, rgba(0, 0, 0, 1) 75%, rgba(0, 0, 0, 1) 87.5%, rgba(0, 0, 0, 0) 100%`},{blur:`${displayBlur/2}px`,gradient:`rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 1) 87.5%, rgba(0, 0, 0, 1) 100%`},{blur:`${displayBlur}px`,gradient:`rgba(0, 0, 0, 0) 87.5%, rgba(0, 0, 0, 1) 100%`}],[displayBlur]);return /*#__PURE__*/_jsx(\"div\",{ref:rootRef,style:{position:\"absolute\",inset:0,overflow:\"hidden\"},children:renderLayers&&hasBlurLayers&&blurSteps.map((step,index)=>/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,zIndex:index+1,backdropFilter:`blur(${step.blur})`,WebkitBackdropFilter:`blur(${step.blur})`,maskImage:`linear-gradient(${getGradientDirection(direction)}, ${step.gradient})`,WebkitMaskImage:`linear-gradient(${getGradientDirection(direction)}, ${step.gradient})`,borderRadius:borderRadius,pointerEvents:\"none\",transition:filterTransition}},index))});}BlurGradient.defaultProps={blur:10,borderRadius:\"0px\",direction:\"toBottom\"};addPropertyControls(BlurGradient,{blur:{title:\"Blur\",type:ControlType.Number,defaultValue:10,min:0,max:100,step:1,description:\"Large blur values (10<) can impact performance.\"},borderRadius:{title:\"Radius\",type:ControlType.BorderRadius,defaultValue:\"0px\"},direction:{title:\"Direction\",type:ControlType.SegmentedEnum,options:[\"toBottom\",\"toTop\",\"toLeft\",\"toRight\"],optionTitles:[\"↓\",\"↑\",\"←\",\"→\"],defaultValue:\"toBottom\",description:\"More components at [Framer University](https://frameruni.link/cc).\"}});BlurGradient.displayName=\"Blur Gradient\";export default BlurGradient;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"BlurGradient\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"240\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerDisableUnlink\":\"*\",\"framerIntrinsicWidth\":\"240\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./BlurGradient_Prod.map"],"mappings":"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"}