{"version":3,"file":"NumberCounter.CyOU1-rL.mjs","names":["useState","useRef","useMemo"],"sources":["https:/framerusercontent.com/modules/L7BTYPrANeqLrZ4zcI8y/3DpHgPDOmtaj0Wrn3xTr/NumberCounter.js"],"sourcesContent":["// Number Counter component that animates from start to end value with customizable options\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useState,useEffect,useRef,useMemo,startTransition}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{useInView}from\"framer-motion\";const easingFunctions={linear:t=>t,easeIn:t=>t*t,easeOut:t=>1-(1-t)*(1-t),easeInOut:t=>t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2,bounce:t=>{if(t<1/2.75){return 7.5625*t*t;}else if(t<2/2.75){return 7.5625*(t-=1.5/2.75)*t+.75;}else if(t<2.5/2.75){return 7.5625*(t-=2.25/2.75)*t+.9375;}else{return 7.5625*(t-=2.625/2.75)*t+.984375;}}};/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function Counter(props){const{startValue=0,endValue=100,duration=2,delay=0,decimals=0,easing=\"easeOut\",font,textAlign=\"left\",color=\"#000000\",autoStart=true,loop=false,resetOnReEntry=false,prefix=\"\",suffix=\"\",separator=\",\"}=props;const[currentValue,setCurrentValue]=useState(startValue);const[isAnimating,setIsAnimating]=useState(false);const containerRef=useRef(null);const animationRef=useRef();const isStatic=useIsStaticRenderer();const isInView=useInView(containerRef,{once:!resetOnReEntry,margin:\"0px 0px -10% 0px\"});const formatNumber=useMemo(()=>{return value=>{const fixed=value.toFixed(decimals);if(separator&&Math.abs(value)>=1e3){const parts=fixed.split(\".\");parts[0]=parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g,separator);return parts.join(\".\");}return fixed;};},[decimals,separator]);const startAnimation=()=>{if(isAnimating)return;setIsAnimating(true);setCurrentValue(startValue);const startTime=Date.now()+delay*1e3;const durationMs=duration*1e3;const easingFn=easingFunctions[easing];const animate=()=>{const now=Date.now();const elapsed=now-startTime;if(elapsed<0){animationRef.current=setTimeout(animate,16);return;}const progress=Math.min(elapsed/durationMs,1);const easedProgress=easingFn(progress);const newValue=startValue+(endValue-startValue)*easedProgress;startTransition(()=>{setCurrentValue(newValue);});if(progress<1){animationRef.current=setTimeout(animate,16);}else{setIsAnimating(false);if(loop){setTimeout(()=>startAnimation(),100);}}};animate();};// Handle auto-start and in-view animation\nuseEffect(()=>{if(isStatic){setCurrentValue(endValue);return;}if(autoStart&&!isAnimating){startAnimation();}return()=>{if(animationRef.current){clearTimeout(animationRef.current);}};},[autoStart]);// Reset animation when key parameters change\nuseEffect(()=>{if(animationRef.current){clearTimeout(animationRef.current);setIsAnimating(false);}if(!isStatic&&autoStart){// Small delay to ensure state is reset\nsetTimeout(()=>startAnimation(),50);}},[startValue,endValue,duration,delay,easing]);// Clean up on unmount\nuseEffect(()=>{return()=>{if(animationRef.current){clearTimeout(animationRef.current);}};},[]);const displayValue=formatNumber(currentValue);const fullText=`${prefix}${displayValue}${suffix}`;return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{position:\"relative\",width:\"max-content\",minWidth:\"max-content\",...props.style},children:/*#__PURE__*/_jsx(\"span\",{style:{display:\"block\",textAlign,color,width:\"max-content\",...font},children:fullText})});}addPropertyControls(Counter,{startValue:{type:ControlType.Number,title:\"Start Value\",defaultValue:0,step:1},endValue:{type:ControlType.Number,title:\"End Value\",defaultValue:100,step:1},duration:{type:ControlType.Number,title:\"Duration\",defaultValue:2,min:.1,max:10,step:.1,unit:\"s\"},delay:{type:ControlType.Number,title:\"Delay\",defaultValue:0,min:0,max:5,step:.1,unit:\"s\"},decimals:{type:ControlType.Number,title:\"Decimals\",defaultValue:0,min:0,max:4,step:1,displayStepper:true},easing:{type:ControlType.Enum,title:\"Easing\",options:[\"linear\",\"easeIn\",\"easeOut\",\"easeInOut\",\"bounce\"],optionTitles:[\"Linear\",\"Ease In\",\"Ease Out\",\"Ease In Out\",\"Bounce\"],defaultValue:\"easeOut\"},font:{type:ControlType.Font,title:\"Font\",defaultValue:{fontSize:\"32px\",variant:\"Bold\",letterSpacing:\"-0.03em\",lineHeight:\"1em\"},controls:\"extended\",defaultFontType:\"sans-serif\"},textAlign:{type:ControlType.Enum,title:\"Text Align\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"],defaultValue:\"left\",displaySegmentedControl:true},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\"},autoStart:{type:ControlType.Boolean,title:\"Auto Start\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},loop:{type:ControlType.Boolean,title:\"Loop\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},resetOnReEntry:{type:ControlType.Boolean,title:\"Reset on Re-entry\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},prefix:{type:ControlType.String,title:\"Prefix\",defaultValue:\"\",placeholder:\"$\"},suffix:{type:ControlType.String,title:\"Suffix\",defaultValue:\"\",placeholder:\"%\"},separator:{type:ControlType.String,title:\"Thousands Separator\",defaultValue:\",\",placeholder:\",\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Counter\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"auto\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./NumberCounter.map"],"mappings":"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"}