{"version":3,"file":"NumberCounter.CUQLel69.mjs","names":["useState","useRef","useMemo","__esmMin","te","_e","de","init_jsx_runtime","pe","c","init_npm_react_18_3_1","ce","useInView","init_framer_motion_DhsWWWsN","addPropertyControls","init_framer_DcxuU94H","ControlType","useIsStaticRenderer","Counter","props","currentValue","setCurrentValue","startValue","hasStarted","setHasStarted","animationRef","startTimeRef","containerRef","isStatic","isInView","formatNumber","fixed","value","decimals","separator","parts","easeValue","x1","y1","x2","y2","easingMap","easing","t","animate","timestamp","delay","elapsed","progress","duration","easedProgress","newValue","endValue","loop","startAnimation","autoStart","resetOnReEntry","fullText","prefix","suffix","font","init_NumberCounter"],"sources":["https:/framerusercontent.com/modules/raJQFBsqOz0WYYLTrpSo/rQsEfyzZwGqmBGp4UVcU/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 easingMap={linear:[0,0,1,1],easeIn:[.4,0,1,1],easeOut:[0,0,.2,1],easeInOut:[.4,0,.2,1],bounce:[.68,-.55,.265,1.55]};/**\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[hasStarted,setHasStarted]=useState(false);const animationRef=useRef();const startTimeRef=useRef();const containerRef=useRef(null);const isStatic=useIsStaticRenderer();const isInView=useInView(containerRef,{once:true,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 easeValue=useMemo(()=>{return t=>{const[x1,y1,x2,y2]=easingMap[easing];if(easing===\"linear\")return t;if(easing===\"bounce\"){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;}}// Cubic bezier approximation\nreturn 3*(1-t)*(1-t)*t*y1+3*(1-t)*t*t*y2+t*t*t;};},[easing]);const animate=useMemo(()=>{return timestamp=>{if(!startTimeRef.current){startTimeRef.current=timestamp+delay*1e3;}const elapsed=timestamp-startTimeRef.current;const progress=Math.min(elapsed/(duration*1e3),1);if(progress>=0){const easedProgress=easeValue(progress);const newValue=startValue+(endValue-startValue)*easedProgress;startTransition(()=>{setCurrentValue(newValue);});if(progress<1){animationRef.current=requestAnimationFrame(animate);}else if(loop){// Reset for loop\nstartTimeRef.current=undefined;startTransition(()=>{setCurrentValue(startValue);});setTimeout(()=>{animationRef.current=requestAnimationFrame(animate);},100);}}else{animationRef.current=requestAnimationFrame(animate);}};},[startValue,endValue,duration,delay,easing,loop,easeValue]);const startAnimation=useMemo(()=>{return()=>{if(animationRef.current){cancelAnimationFrame(animationRef.current);}startTimeRef.current=undefined;startTransition(()=>{setCurrentValue(startValue);setHasStarted(true);});animationRef.current=requestAnimationFrame(animate);};},[animate,startValue]);// Handle auto-start and in-view animation\nuseEffect(()=>{if(isStatic){setCurrentValue(endValue);return;}if(autoStart&&isInView&&(!hasStarted||resetOnReEntry)){startAnimation();}return()=>{if(animationRef.current){cancelAnimationFrame(animationRef.current);}};},[autoStart,isInView,hasStarted,resetOnReEntry,startAnimation,isStatic,endValue]);// Reset when not in view and resetOnReEntry is true\nuseEffect(()=>{if(!isInView&&resetOnReEntry&&hasStarted){if(animationRef.current){cancelAnimationFrame(animationRef.current);}startTransition(()=>{setCurrentValue(startValue);setHasStarted(false);});startTimeRef.current=undefined;}},[isInView,resetOnReEntry,hasStarted,startValue]);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\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./NumberCounter.map"],"mappings":"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"}