{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/wnqnI9dZnWUNcuPQ34L2/bV24hqlkdsaJSnWBHygb/NumberCounter.js"],
  "sourcesContent": ["import{jsxs as _jsxs}from\"react/jsx-runtime\";import{useState,useEffect,useRef}from\"react\";import{motion,useAnimation}from\"framer-motion\";import{addPropertyControls,ControlType}from\"framer\";import{containerStyles,fontStack,localeOptions}from\"https://framer.com/m/framer/default-utils.js@^0.45.0\";export default function TextCounter(props){const{fontFamily,fontSize,fontWeight,color,font,targetValue,duration,locale,prefix,showPrefix}=props;const[count,setCount]=useState(0);const controls=useAnimation();const maxCount=targetValue;const slowDownStart=maxCount-10;const totalDuration=duration*1e3;const ref=useRef(null);const[isVisible,setIsVisible]=useState(false);const calculateIntervalTime=currentCount=>{const slowDownStart=targetValue-10;if(currentCount>=slowDownStart){const slowProgress=(currentCount-slowDownStart+1)/(targetValue-slowDownStart);return slowProgress*slowProgress*duration*1e3/(targetValue-slowDownStart);}else{return duration*1e3/(targetValue-(targetValue-slowDownStart));}};useEffect(()=>{const observer=new IntersectionObserver(([entry])=>setIsVisible(entry.isIntersecting),{root:null,rootMargin:\"0px\",threshold:.1});if(ref.current)observer.observe(ref.current);return()=>{if(ref.current)observer.unobserve(ref.current);};},[ref]);useEffect(()=>{if(isVisible&&count<props.targetValue){const intervalTime=calculateIntervalTime(count);const timer=setTimeout(()=>setCount(count+1),intervalTime);return()=>clearTimeout(timer);}},[count,isVisible,props.targetValue]);useEffect(()=>{controls.start({opacity:1,transition:{duration:.5}});},[controls]);const componentStyle={...containerStyles,color,fontFamily:fontStack,fontWeight:500,fontSize:16,...font};return /*#__PURE__*/_jsxs(motion.div,{ref:ref,style:componentStyle,animate:controls,children:[showPrefix&&prefix,count.toLocaleString(locale)]});}TextCounter.defaultProps={duration:5,targetValue:1e3,color:\"#FFFFFF\",showPrefix:false,prefix:\"+\",locale:\"en\"};TextCounter.displayName=\"NumberCounter\";addPropertyControls(TextCounter,{targetValue:{title:\"Target\",type:ControlType.Number,displayStepper:true,defaultValue:TextCounter.defaultProps.targetValue},duration:{title:\"Duration\",type:ControlType.Number,displayStepper:true,step:.5,defaultValue:TextCounter.defaultProps.duration,unit:\"s\"},showPrefix:{title:\"Prefix\",type:ControlType.Boolean,enabledTitle:\"Show\",disabledTitle:\"Hide\",defaultValue:TextCounter.defaultProps.showPrefix},prefix:{title:\"\",type:ControlType.String,defaultValue:TextCounter.defaultProps.prefix,hidden:props=>props.showPrefix!==true},color:{title:\"Color\",type:ControlType.Color,defaultValue:TextCounter.defaultProps.color},font:{// @ts-expect-error \u2013\u00A0Internal\ntype:ControlType.Font,controls:\"extended\"},locale:{title:\"Locale\",type:ControlType.Enum,options:Object.keys(localeOptions).sort(),optionTitles:Object.keys(localeOptions).sort().map(key=>localeOptions[key]),defaultValue:TextCounter.defaultProps.locale}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TextCounter\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./NumberCounter.map"],
  "mappings": "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",
  "names": ["TextCounter", "props", "fontFamily", "fontSize", "fontWeight", "color", "font", "targetValue", "duration", "locale", "prefix", "showPrefix", "count", "setCount", "ye", "controls", "useAnimation", "slowDownStart", "totalDuration", "ref", "pe", "isVisible", "setIsVisible", "calculateIntervalTime", "currentCount", "slowProgress", "ue", "observer", "entry", "intervalTime", "timer", "componentStyle", "containerStyles", "fontStack", "u", "motion", "addPropertyControls", "ControlType", "localeOptions", "key"]
}
