{"version":3,"file":"NumberCounter_2.B3XoMN0T.mjs","names":["useRef","useState","useCallback","useMemo"],"sources":["https:/framerusercontent.com/modules/sQFVbM0Qvfv2RoV8bWRR/M1SEv1nNQLWN5EN1IgtR/NumberCounter_2.js"],"sourcesContent":["// Number Counter component with animated counting, customizable duration, delay, decimals, easing, font, alignment, color, suffix, auto-start, looping, reset on re-entry, and content-based sizing\nimport{jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef,useState,useCallback,useMemo}from\"react\";import{addPropertyControls,ControlType,useInView,useIsStaticRenderer,RenderTarget}from\"framer\";const 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};function formatNumber(value,decimals){return value.toLocaleString(undefined,{minimumFractionDigits:decimals,maximumFractionDigits:decimals});}/**\n * Number Counter\n *\n * @framerIntrinsicWidth 180\n * @framerIntrinsicHeight 60\n *\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function NumberCounter(props){const{start=0,end=100,duration=1.5,delay=0,decimals=0,easing=\"easeOut\",font,color,align,autoStart,loop,resetOnReentry,suffix,style}=props;const isStatic=useIsStaticRenderer();const ref=useRef(null);const inView=useInView(ref,{once:!loop&&!resetOnReentry});const[displayValue,setDisplayValue]=useState(start);const[isCounting,setIsCounting]=useState(false);const[iteration,setIteration]=useState(0);const timeoutRef=useRef(null);const rafRef=useRef(null);const runCount=useCallback(()=>{if(isStatic||RenderTarget.current()===RenderTarget.thumbnail){setDisplayValue(end);return;}let startTime=null;let frameId=null;function animate(ts){if(!startTime)startTime=ts;const elapsed=(ts-startTime)/1e3;let t=Math.min(1,Math.max(0,elapsed/duration));const ease=easings[easing]||easings.easeOut;const value=start+(end-start)*ease(t);setDisplayValue(t<1?value:end);if(t<1){frameId=requestAnimationFrame(animate);rafRef.current=frameId;}else if(loop){timeoutRef.current=setTimeout(()=>{setDisplayValue(start);setIteration(i=>i+1);},300);}}if(delay>0){timeoutRef.current=setTimeout(()=>{setDisplayValue(start);frameId=requestAnimationFrame(animate);rafRef.current=frameId;},delay*1e3);}else{setDisplayValue(start);frameId=requestAnimationFrame(animate);rafRef.current=frameId;}},[start,end,duration,delay,easing,loop,isStatic]);// Start animation on inView\nuseEffect(()=>{if(!autoStart)return;if(inView){setIsCounting(true);}else if(resetOnReentry){setIsCounting(false);setDisplayValue(start);}},[inView,autoStart,resetOnReentry,start]);// Run animation when isCounting or iteration changes\nuseEffect(()=>{if(!isCounting)return;runCount();return()=>{if(rafRef.current)cancelAnimationFrame(rafRef.current);if(timeoutRef.current)clearTimeout(timeoutRef.current);};},[isCounting,iteration,runCount]);// Manual trigger\nconst handleClick=()=>{if(!autoStart){setIsCounting(true);}};// Sizing\nconst containerStyle=useMemo(()=>({...style,display:\"inline-block\",width:style&&style.width===\"100%\"?\"100%\":\"max-content\",height:style&&style.height===\"100%\"?\"100%\":\"max-content\",textAlign:align,color,...font,cursor:autoStart?\"default\":\"pointer\",userSelect:\"none\"}),[style,align,color,font,autoStart]);return /*#__PURE__*/_jsxs(\"span\",{ref:ref,style:containerStyle,\"aria-live\":\"polite\",tabIndex:0,onClick:handleClick,children:[formatNumber(displayValue,decimals),suffix]});}addPropertyControls(NumberCounter,{start:{type:ControlType.Number,title:\"Start\",defaultValue:0},end:{type:ControlType.Number,title:\"End\",defaultValue:100},duration:{type:ControlType.Number,title:\"Duration\",defaultValue:1.5,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:6,step:1,displayStepper:true},easing:{type:ControlType.Enum,title:\"Easing\",options:[\"linear\",\"easeIn\",\"easeOut\",\"easeInOut\"],optionTitles:[\"Linear\",\"Ease In\",\"Ease Out\",\"Ease In Out\"],defaultValue:\"easeOut\",displaySegmentedControl:true},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:\"40px\",variant:\"Bold\",letterSpacing:\"-0.04em\",lineHeight:\"1em\"}},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\"},align:{type:ControlType.Enum,title:\"Align\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"],defaultValue:\"center\",displaySegmentedControl:true},suffix:{type:ControlType.String,title:\"Suffix\",defaultValue:\"\",placeholder:\"%\"},autoStart:{type:ControlType.Boolean,title:\"Auto Start\",defaultValue:true,enabledTitle:\"Auto\",disabledTitle:\"Manual\"},loop:{type:ControlType.Boolean,title:\"Loop\",defaultValue:false,enabledTitle:\"Loop\",disabledTitle:\"Once\"},resetOnReentry:{type:ControlType.Boolean,title:\"Reset on Re-entry\",defaultValue:false,enabledTitle:\"Reset\",disabledTitle:\"No Reset\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"NumberCounter\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"60\",\"framerIntrinsicWidth\":\"180\",\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./NumberCounter_2.map"],"mappings":"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"}