{"version":3,"file":"ScrollAnimation.Dats7FOj.mjs","names":["React.useRef","Image","useState"],"sources":["https:/framerusercontent.com/modules/rIrgzArWNlHxlyCIScmb/AW5xrhyHgzY7epXqduEi/TaetVMC3s.js","https:/framerusercontent.com/modules/zk09TLsdOOg32cjnMNx6/BeXiCtt3vRhZeinzoDxq/ScrollAnimation.js"],"sourcesContent":["// Generated by Framer (c3ab1ed)\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ControlType,cx,Image,Link,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion}from\"framer-motion\";import*as React from\"react\";const cycleOrder=[\"p25YIaBRR\",\"Gf2m2ZRDs\"];const variantClassNames={Gf2m2ZRDs:\"framer-v-snj9xt\",p25YIaBRR:\"framer-v-pzd2g9\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants===null||variants===void 0?void 0:variants.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const humanReadableVariantMap={First:\"p25YIaBRR\",Second:\"Gf2m2ZRDs\"};const transitions={default:{damping:60,delay:0,duration:.3,ease:[.44,0,.56,1],mass:1,stiffness:500,type:\"spring\"}};const BASE62=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";function useRandomID(){const ref=React.useRef(null);if(ref.current===null){ref.current=Array(5).fill(0).map(()=>BASE62[Math.floor(Math.random()*BASE62.length)]).join(\"\");}return ref.current;}const Component=/*#__PURE__*/ React.forwardRef(function({id,style:externalStyle={},className,width,height,layoutId,variant:outerVariant=\"p25YIaBRR\",...restProps},ref){const outerVariantId=humanReadableVariantMap[outerVariant];const variant=outerVariantId||outerVariant;const{baseVariant,classNames,gestureVariant,setGestureState,setVariant,transition,variants}=useVariantState({cycleOrder,defaultVariant:\"p25YIaBRR\",transitions,variant,variantClassNames});const layoutDependency=variants.join(\"-\")+restProps.layoutDependency;const defaultLayoutId=useRandomID();const{pointerEvents,...style}=externalStyle;return /*#__PURE__*/ _jsx(LayoutGroup,{id:layoutId!==null&&layoutId!==void 0?layoutId:defaultLayoutId,children:/*#__PURE__*/ _jsx(motion.div,{\"data-framer-generated\":true,initial:variant,animate:variants,onHoverStart:()=>setGestureState({isHovered:true}),onHoverEnd:()=>setGestureState({isHovered:false}),onTapStart:()=>setGestureState({isPressed:true}),onTap:()=>setGestureState({isPressed:false}),onTapCancel:()=>setGestureState({isPressed:false}),className:cx(\"framer-ypJR7\",classNames),style:{display:\"contents\",pointerEvents:pointerEvents!==null&&pointerEvents!==void 0?pointerEvents:undefined},children:/*#__PURE__*/ _jsx(Link,{href:\"data:framer/page-link,Tv0UtiJ_5\",openInNewTab:false,children:/*#__PURE__*/ _jsx(motion.a,{...restProps,className:cx(\"framer-pzd2g9\",className),\"data-framer-name\":\"First\",layoutDependency:layoutDependency,layoutId:\"p25YIaBRR\",ref:ref,style:{backgroundColor:\"rgb(66, 66, 66)\",borderBottomLeftRadius:99,borderBottomRightRadius:99,borderTopLeftRadius:99,borderTopRightRadius:99,boxShadow:\"0px 0.6032302072222955px 2.292274787444723px -0.5px rgba(0, 0, 0, 0.08103), 0px 2.290210571630906px 8.702800172197442px -1px rgba(0, 0, 0, 0.0979), 0px 10px 38px -1.5px rgba(0, 0, 0, 0.175)\",opacity:0,...style},transition:transition,variants:{Gf2m2ZRDs:{opacity:1}},...addPropertyOverrides({Gf2m2ZRDs:{\"data-framer-name\":\"Second\"}},baseVariant,gestureVariant),children:/*#__PURE__*/ _jsx(Image,{background:{alt:\"\",fit:\"fill\",intrinsicHeight:24,intrinsicWidth:24,pixelHeight:24,pixelWidth:24,src:new URL(\"assets/dOUXFUjh1PJqIVwSCuTWG2BiL8w.svg\",\"https://framerusercontent.com/modules/rIrgzArWNlHxlyCIScmb/AW5xrhyHgzY7epXqduEi/TaetVMC3s.js\").href},className:\"framer-ardo9x\",\"data-framer-name\":\"Icon\",layoutDependency:layoutDependency,layoutId:\"SwSJ0ln2p\",transition:transition})})})})});});const css=['.framer-ypJR7 [data-border=\"true\"]::after { content: \"\"; border-width: var(--border-top-width, 0) var(--border-right-width, 0) var(--border-bottom-width, 0) var(--border-left-width, 0); border-color: var(--border-color, none); border-style: var(--border-style, none); width: 100%; height: 100%; position: absolute; box-sizing: border-box; left: 0; top: 0; border-radius: inherit; pointer-events: none;}',\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-ypJR7 * { box-sizing: border-box; }\",\".framer-ypJR7 .framer-pzd2g9 { align-content: center; align-items: center; display: flex; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: 64px; justify-content: center; padding: 0px 0px 0px 0px; position: relative; text-decoration: none; width: 64px; }\",\".framer-ypJR7 .framer-ardo9x { aspect-ratio: 1 / 1; flex: none; height: var(--framer-aspect-ratio-supported, 38px); overflow: visible; position: relative; width: 60%; }\",\"@supports (background: -webkit-named-image(i)) and (not (font-palette:dark)) { .framer-ypJR7 .framer-pzd2g9 { gap: 0px; } .framer-ypJR7 .framer-pzd2g9 > * { margin: 0px; margin-left: calc(10px / 2); margin-right: calc(10px / 2); } .framer-ypJR7 .framer-pzd2g9 > :first-child { margin-left: 0px; } .framer-ypJR7 .framer-pzd2g9 > :last-child { margin-right: 0px; } }\",\".framer-ypJR7.framer-v-snj9xt .framer-pzd2g9 { aspect-ratio: 1 / 1; height: var(--framer-aspect-ratio-supported, 64px); }\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 64\n * @framerIntrinsicWidth 64\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"fixed\"]},\"Gf2m2ZRDs\":{\"layout\":[\"fixed\",\"fixed\"]}}}\n */ const FramerTaetVMC3s=withCSS(Component,css);export default FramerTaetVMC3s;FramerTaetVMC3s.displayName=\"go-top-btn\";FramerTaetVMC3s.defaultProps={height:64,width:64};addPropertyControls(FramerTaetVMC3s,{variant:{options:[\"p25YIaBRR\",\"Gf2m2ZRDs\"],optionTitles:[\"First\",\"Second\"],title:\"Variant\",type:ControlType.Enum}});addFonts(FramerTaetVMC3s,[]);\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerTaetVMC3s\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"64\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"64\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]},\\\"Gf2m2ZRDs\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]}}}\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TaetVMC3s.map","import{jsx as _jsx}from\"react/jsx-runtime\";import{useState,useEffect}from\"react\";import{useScroll,useVelocity,useTransform,useMotionValue,animate}from\"framer-motion\";// --------------------------------------------------------------------\n// The following overrides are for creating scroll effects on web pages\nexport function withParallax(Component){const speed=1;return props=>{const{scrollY}=useScroll();const x=useTransform(scrollY,value=>-value*speed) // scrolling down translates left\n;return /*#__PURE__*/ _jsx(Component,{...props,style:{...props.style,x:x}});};}// Scrub through a video or drive a Lottie animation by scrolling\nexport function withScrolledProgress(Component){const startY=0 // scroll position when animation starts\n;const distance=500 // scroll distance after which animation ends\n;const endY=startY+distance;return props=>{const{scrollY}=useScroll();const progress=useTransform(scrollY,[startY,endY],[0,1]);return /*#__PURE__*/ _jsx(Component,{...props,progress:progress});};}// AKA withDynamicNavBar\nexport function withScrollLinkedValue(Component){// Value being driven by scrolling (e.g. height)\nconst initialValue=200;const finalValue=100;const speed=1;const scrollDistance=(initialValue-finalValue)/speed;const startY=0 // scroll position when transition starts\n;const endY=startY+scrollDistance;return props=>{const{scrollY}=useScroll();const scrollOutput=useTransform(scrollY,[startY,endY,endY],[initialValue,finalValue,finalValue],{clamp:false});return /*#__PURE__*/ _jsx(Component,{...props,style:{...props.style,height:scrollOutput}});};}export function withScrollToggledVariant(Component){const thresholdY=500 // set the scroll position where you want the component to switch\n;return props=>{const{scrollY}=useScroll();const[isPastThreshold,setIsPastThreshold]=useState(false);useEffect(()=>scrollY.onChange(latest=>setIsPastThreshold(latest>thresholdY)),[]);return /*#__PURE__*/ _jsx(Component,{...props,variant:isPastThreshold?\"Second\":\"First\"});};}export function withSlideOutOnScrollUp(Component){const slideDistance=100 // if we are sliding out a nav bar at the top of the screen, this will be it's height\n;const threshold=500 // only slide it back when scrolling back at velocity above this positive (or zero) value\n;return props=>{const{scrollY}=useScroll();const scrollVelocity=useVelocity(scrollY);const[isScrollingBack,setIsScrollingBack]=useState(false);const[isAtTop,setIsAtTop]=useState(true) // true if the page is not scrolled or fully scrolled back\n;const[isInView,setIsInView]=useState(true);useEffect(()=>scrollVelocity.onChange(latest=>{if(latest>0){setIsScrollingBack(false);return;}if(latest<-threshold){setIsScrollingBack(true);return;}}),[]);useEffect(()=>scrollY.onChange(latest=>setIsAtTop(latest<=0)),[]);useEffect(()=>setIsInView(isScrollingBack||isAtTop),[isScrollingBack,isAtTop]);return /*#__PURE__*/ _jsx(Component,{...props,animate:{y:isInView?0:-slideDistance},transition:{duration:.2,delay:.25,ease:\"easeInOut\"}});};}export function withScrollTriggeredStates(Component){const scrollYRange=[0,800,1600] // scroll positions that trigger the animation\n;const outputRange=[\"First\",\"Second\",\"Third\"] // list of variants to animate between\n;return props=>{const state=useScrollTriggeredState(scrollYRange,outputRange);return /*#__PURE__*/ _jsx(Component,{...props,variant:state});};}// Trigger a state change when each layer with a <section> tag reaches the top of the page\n// You can apply a <section> tag to a layer through the 'Accessibility' property controls\nexport function withSectionTriggeredStates(Component){const outputRange=[\"First\",\"Second\",\"Third\"] // list of variants to animate between\n;return props=>{const{scrollY}=useScroll();const[state,setState]=useState(outputRange[0]);useEffect(()=>{const scrollYRange=getSectionPositions();scrollY.onChange(latest=>{const output=getCorrespondingItem(latest,scrollYRange,outputRange);setState(output);});},[]);return /*#__PURE__*/ _jsx(Component,{...props,variant:state});};}export function withScrollTriggeredAnimation(Component){const scrollYRange=[0,800,1600] // scroll positions that trigger the animation\n;const outputRange=[\"#8E47BA\",\"#000AFF\",\"#FF0000\"] // list of values to animate to\n;// customise the transition\nconst transition={type:\"tween\",duration:1,ease:\"easeInOut\"};return props=>{const animatedValue=useMotionValue(outputRange[0]);const{scrollY}=useScroll();const scrollOutput=useSteppedTransform(scrollY,scrollYRange,outputRange);useEffect(()=>scrollOutput.onChange(latest=>animate(animatedValue,latest,transition) // remove transition to use default\n    ),[]);return /*#__PURE__*/ _jsx(Component,{...props,style:{...props.style,backgroundColor:animatedValue}}) // override value you want to animate\n;};}// Trigger an animation when each layer with a <section> tag reaches the top of the page\n// You can apply a <section> tag to a layer through the 'Accessibility' property controls\nexport function withSectionTriggeredAnimation(Component){const outputRange=[\"#FFEE66\",\"#000AFF\",\"#FF0000\"] // list of values to animate to\n;// customise the transition\nconst transition={type:\"tween\",duration:1,ease:\"easeInOut\"};return props=>{const animatedValue=useMotionValue(outputRange[0]);const handleSectionChange=latest=>animate(animatedValue,outputRange[latest],transition) // remove transition to use default\n;useSectionTrigger(handleSectionChange);return /*#__PURE__*/ _jsx(Component,{...props,style:{...props.style,backgroundColor:animatedValue}}) // override value you want to animate\n;};}// Apply the current scroll target to the URL displayed in the web browser\n// You can apply a scroll target to a layer through the 'Scroll Target' property controls\nexport function withScrollTargetHistory(Component){return props=>{const{scrollY}=useScroll();const scrollOutput=useMotionValue(\"#\");const handleTargetChange=latest=>history.replaceState(null,\"\",latest);useEffect(()=>{const{scrollYRange,outputRange}=getScrollTargets();scrollY.onChange(latest=>{const index=getMatchingIndex(latest,scrollYRange);if(scrollOutput.get()!==outputRange[index]){scrollOutput.set(outputRange[index]);}});},[]);useEffect(()=>scrollOutput.onChange(handleTargetChange),[]);return /*#__PURE__*/ _jsx(Component,{...props});};}// --------------------------------------------------------------------\n// The following overrides are for creating scroll effects on elements\nimport{createRef}from\"react\";// create a ref so we can attach it to the scroll container\nconst ref=/*#__PURE__*/ createRef();// apply this to the element being scrolled\nexport function withScrollRef(Component){return props=>{return /*#__PURE__*/ _jsx(Component,{...props,ref:ref});};}// apply this to the element with the scroll effect\nexport function withElementParallax(Component){const speed=1/2;return props=>{const{scrollY}=useScroll({container:ref});const x=useTransform(scrollY,value=>-value*speed) // scrolling down translates left\n;return /*#__PURE__*/ _jsx(Component,{...props,style:{...props.style,x:x}});};}// --------------------------------------------------------------------\n// Custom hooks\nfunction useSteppedTransform(value,inputRange,outputRange){return useTransform(value,value=>getCorrespondingItem(value,inputRange,outputRange));}function useScrollTriggeredState(inputRange,outputRange){const{scrollY}=useScroll();const[state,setState]=useState(outputRange[0]);useEffect(()=>scrollY.onChange(latest=>setState(getCorrespondingItem(latest,inputRange,outputRange))),[]);return state;}function useSectionTrigger(handleSectionChange){const scrollOutput=useMotionValue(0);const{scrollY}=useScroll();useEffect(()=>{const scrollYRange=getSectionPositions();scrollY.onChange(latest=>{const index=getMatchingIndex(latest,scrollYRange);if(scrollOutput.get()!==index){scrollOutput.set(index);}});},[]);useEffect(()=>scrollOutput.onChange(handleSectionChange),[]);}// --------------------------------------------------------------------\n// Functions\nfunction getMatchingIndex(value,array){let found=array.findIndex(el=>el>value);switch(found){case 0:return 0;break;case-1:return array.length-1;break;default:return found-1;}}function getCorrespondingItem(value,inputRange,outputRange){const inputIndex=getMatchingIndex(value,inputRange);const outputIndex=inputIndex>outputRange.length-1?outputRange.length-1:inputIndex;return outputRange[outputIndex];}function getSectionPositions(){const elements=Array.from(document.querySelectorAll(\"section\"));const positions=elements.map(element=>{return element.getBoundingClientRect().top+window.scrollY;}).sort((a,b)=>a-b);if(positions[0]===0){return positions;}else{return[0,...positions];}}function getScrollTargets(){const elements=Array.from(document.querySelectorAll('[id]:not([id=\"\"])'));const targets=elements.map(element=>{return{y:element.getBoundingClientRect().top+window.scrollY,target:`#${element.id}`};}).sort((a,b)=>a.y-b.y);const inputs=targets.map(target=>target.y);const outputs=targets.map(target=>target.target);if(inputs[0]===0){outputs[0]=\"#\";return{scrollYRange:inputs,outputRange:outputs};}else{return{scrollYRange:[0,...inputs],outputRange:[\"#\",...outputs]};}}\nexport const __FramerMetadata__ = {\"exports\":{\"withSectionTriggeredAnimation\":{\"type\":\"reactHoc\",\"name\":\"withSectionTriggeredAnimation\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withParallax\":{\"type\":\"reactHoc\",\"name\":\"withParallax\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withScrollTriggeredAnimation\":{\"type\":\"reactHoc\",\"name\":\"withScrollTriggeredAnimation\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withScrollTargetHistory\":{\"type\":\"reactHoc\",\"name\":\"withScrollTargetHistory\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withSectionTriggeredStates\":{\"type\":\"reactHoc\",\"name\":\"withSectionTriggeredStates\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withScrollRef\":{\"type\":\"reactHoc\",\"name\":\"withScrollRef\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withSlideOutOnScrollUp\":{\"type\":\"reactHoc\",\"name\":\"withSlideOutOnScrollUp\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withScrollLinkedValue\":{\"type\":\"reactHoc\",\"name\":\"withScrollLinkedValue\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withElementParallax\":{\"type\":\"reactHoc\",\"name\":\"withElementParallax\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withScrolledProgress\":{\"type\":\"reactHoc\",\"name\":\"withScrolledProgress\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withScrollTriggeredStates\":{\"type\":\"reactHoc\",\"name\":\"withScrollTriggeredStates\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withScrollToggledVariant\":{\"type\":\"reactHoc\",\"name\":\"withScrollToggledVariant\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ScrollAnimation.map"],"mappings":"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"}