{"version":3,"file":"CountUpOnScroll.DMhHMEZo.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/eiMoE26PRn4ZZIjC2uja/qUHfGMoQNWT1Cb81hyaC/CountUpOnScroll.js"],"sourcesContent":["// Animated Count Up on Scroll\n// Numbers animate from 0 to target as user scrolls through the section\nimport{jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef,useState,startTransition}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";/**\n * Number Count Up On Scroll\n *\n * @framerIntrinsicWidth 160\n * @framerIntrinsicHeight 60\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight fixed\n */export default function CountUpOnScroll(props){const{number,duration,font,color,suffix,prefix,style,easing=\"linear\",plusPrefix=false}=props;const ref=useRef(null);const[isVisible,setIsVisible]=useState(false);const[displayValue,setDisplayValue]=useState(0);const isStatic=useIsStaticRenderer();// Observe element in viewport\nuseEffect(()=>{if(isStatic)return setIsVisible(true);if(!ref.current)return;let observer=null;observer=new window.IntersectionObserver(([entry])=>{if(entry.isIntersecting){startTransition(()=>setIsVisible(true));observer&&observer.disconnect();}},{threshold:.2});observer.observe(ref.current);return()=>observer&&observer.disconnect();},[ref,isStatic]);// Animate count up\nuseEffect(()=>{if(!isVisible)return;if(isStatic)return setDisplayValue(number);let raf;let start=null;function easeLinear(t){return t;}function easeEaseIn(t){return t*t;}function easeEaseOut(t){return t*(2-t);}function easeEaseInOut(t){return t<.5?2*t*t:-1+(4-2*t)*t;}let easeFn=easeLinear;if(easing===\"ease-in\")easeFn=easeEaseIn;else if(easing===\"ease-out\")easeFn=easeEaseOut;else if(easing===\"ease-in-out\")easeFn=easeEaseInOut;function animate(ts){if(!start)start=ts;const elapsed=ts-start;const progress=Math.min(elapsed/(duration*1e3),1);const eased=easeFn(progress);const value=Math.floor(eased*number);startTransition(()=>setDisplayValue(value));if(progress<1)raf=requestAnimationFrame(animate);else startTransition(()=>setDisplayValue(number));}raf=requestAnimationFrame(animate);return()=>cancelAnimationFrame(raf);},[isVisible,number,duration,isStatic,easing]);let finalPrefix=prefix;if(plusPrefix&&displayValue>0&&typeof displayValue===\"number\"){finalPrefix=\"+\"+(prefix||\"\");}return /*#__PURE__*/_jsxs(\"div\",{ref:ref,style:{...style,position:\"relative\",color:color,display:\"flex\",alignItems:\"center\",minWidth:\"max-content\",...font,fontVariantNumeric:\"tabular-nums\",fontFeatureSettings:\"'tnum' on, 'ss01' on\",fontSize:font?.fontSize??40,fontWeight:font?.fontWeight??700},\"aria-live\":\"polite\",\"aria-label\":number+\"\",children:[finalPrefix,displayValue.toLocaleString(),suffix]});}addPropertyControls(CountUpOnScroll,{number:{type:ControlType.Number,title:\"Target Number\",defaultValue:1200,min:1,max:1e5,step:1},duration:{type:ControlType.Number,title:\"Duration (s)\",defaultValue:2,min:.2,max:8,step:.1},prefix:{type:ControlType.String,title:\"Prefix\",defaultValue:\"\"},plusPrefix:{type:ControlType.Boolean,title:\"+ Prefix\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},suffix:{type:ControlType.String,title:\"Suffix\",defaultValue:\"\"},easing:{type:ControlType.Enum,title:\"Easing\",options:[\"linear\",\"ease-in\",\"ease-out\",\"ease-in-out\"],optionTitles:[\"Linear\",\"Ease In\",\"Ease Out\",\"Ease In Out\"],defaultValue:\"linear\"},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:40,variant:\"Bold\",letterSpacing:\"-0.03em\",lineHeight:\"1.1em\"}},color:{type:ControlType.Color,title:\"Text Color\",defaultValue:\"#000\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CountUpOnScroll\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerIntrinsicWidth\":\"160\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"60\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CountUpOnScroll.map"],"mappings":"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"}