{"version":3,"file":"NumberCounter.rpCtwO2X.mjs","names":["useRef","useState"],"sources":["https:/framerusercontent.com/modules/65opvXB7rWMu00ahAhnk/nzYTkqL9uczogWD647BM/NumberCounter.js"],"sourcesContent":["// Smooth animated number counter with customizable font, size, duration, and easing\nimport{jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef,useState,startTransition}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{useInView}from\"framer-motion\";/**\n * Animated Number NumberCounter\n *\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function NumberCounter(props){const containerRef=useRef(null);const inView=useInView(containerRef,{once:true,margin:\"-20% 0px\"});const{from,to,duration,decimals,font,color,separator,easing,symbol,prefix,animationEnabled,staticValue,style}=props;const isStatic=useIsStaticRenderer();const[value,setValue]=useState(from);const raf=useRef(null);const startTime=useRef(null);const prevTo=useRef(to);// Easing functions\nconst easings={linear:t=>t,easeIn:t=>t*t,easeOut:t=>t*(2-t),easeInOut:t=>t<.5?2*t*t:-1+(4-2*t)*t,cubic:t=>t*t*t,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;}}};const ease=easings[easing]||easings.linear;// Format number with separator and decimals\nfunction formatNumber(num){const parts=num.toFixed(decimals).split(\".\");// Apply separator to thousands\nparts[0]=parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g,separator);return parts.join(decimals>0?\".\":\"\");}useEffect(()=>{if(!animationEnabled){setValue(staticValue);return;}if(isStatic){setValue(Number(to));return;}if(!inView){setValue(from);return;}if(prevTo.current!==to){startTransition(()=>setValue(from));prevTo.current=to;}let cancelled=false;startTime.current=null;function animate(ts){if(startTime.current===null)startTime.current=ts;const elapsed=ts-(startTime.current||0);const t=Math.min(1,elapsed/duration);const eased=ease(t);const current=from+(to-from)*eased;startTransition(()=>setValue(Number(current)));if(t<1&&!cancelled){raf.current=requestAnimationFrame(animate);}else{startTransition(()=>setValue(Number(to)));}}raf.current=requestAnimationFrame(animate);return()=>{cancelled=true;if(raf.current)cancelAnimationFrame(raf.current);};// eslint-disable-next-line\n},[from,to,duration,easing,isStatic,inView,animationEnabled,staticValue]);return /*#__PURE__*/_jsxs(\"span\",{ref:containerRef,style:{...style,...font,color,width:\"max-content\",display:\"inline-block\",whiteSpace:\"nowrap\"},\"aria-label\":prefix+(animationEnabled?formatNumber(to):staticValue)+(symbol?symbol:\"\"),children:[prefix,animationEnabled?typeof value===\"string\"?value:formatNumber(value):staticValue,symbol]});}addPropertyControls(NumberCounter,{from:{type:ControlType.Number,title:\"From\",defaultValue:0,min:-1e6,max:15e8,displayStepper:true},to:{type:ControlType.Number,title:\"To\",defaultValue:5e4,min:-1e6,max:15e8,displayStepper:true},duration:{type:ControlType.Number,title:\"Duration\",defaultValue:2e3,min:100,max:1e4,unit:\"ms\",step:50},decimals:{type:ControlType.Number,title:\"Decimals\",defaultValue:0,min:0,max:6,step:1,displayStepper:true},separator:{type:ControlType.String,title:\"Separator\",defaultValue:\",\",placeholder:\",\"},easing:{type:ControlType.Enum,title:\"Easing\",options:[\"linear\",\"easeIn\",\"easeOut\",\"easeInOut\",\"cubic\",\"bounce\"],optionTitles:[\"Linear\",\"Ease In\",\"Ease Out\",\"Ease InOut\",\"Cubic\",\"Bounce\"],defaultValue:\"easeOut\",displaySegmentedControl:false},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\"},symbol:{type:ControlType.String,title:\"Symbol\",defaultValue:\"\",placeholder:\"€, +, etc.\"},prefix:{type:ControlType.String,title:\"Prefix\",defaultValue:\"\",placeholder:\"$, #, etc.\"},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:\"40px\",variant:\"Bold\",letterSpacing:\"-0.04em\",lineHeight:\"1em\"}},animationEnabled:{type:ControlType.Boolean,title:\"Animation Enabled\",defaultValue:true},staticValue:{type:ControlType.String,title:\"Static Value\",defaultValue:\"100,000\",placeholder:\"Enter text, numbers, symbols...\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"NumberCounter\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./NumberCounter.map"],"mappings":"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"}