{"version":3,"file":"CounterPro.TwNFfFfe.mjs","names":["useRef","useState","useMemo"],"sources":["https:/framerusercontent.com/modules/jPr6lPrh3tKXtEZkW02u/v2lSM1RFG3d2HZmTHO44/CounterPro.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef,useState,startTransition,useMemo,useLayoutEffect}from\"react\";import{motion,useInView,useSpring,useTransform}from\"framer-motion\";import{addPropertyControls,ControlType}from\"framer\";// Custom hook to measure font metrics\nfunction useFontMetrics(font){const ref=useRef(null);const[height,setHeight]=useState(null);useLayoutEffect(()=>{if(!ref.current)return;const el=ref.current;const measure=()=>{const h=el.offsetHeight;if(h>0){setHeight(h);}};// Measure immediately\nmeasure();// Observe size changes (safe even with zoom)\nconst ro=new ResizeObserver(measure);ro.observe(el);// Fonts loading (important for rem)\nif(document.fonts){document.fonts.ready.then(measure).catch(()=>{});}return()=>{ro.disconnect();};},[font?.fontSize,font?.lineHeight,font?.fontFamily,font?.fontWeight,font?.letterSpacing]);return{ref,height};}function Digit({place,value,digitHeight,duration,font,useMotionBlur,motionBlurIntensity,verticalSpacing}){const valueRoundedToPlace=Math.floor(value/place);const animatedValue=useSpring(valueRoundedToPlace,{stiffness:100,damping:30,mass:1});// Calculate digit width accounting for letter spacing\nconst letterSpacing=font?.letterSpacing||\"0em\";const letterSpacingValue=typeof letterSpacing===\"string\"?parseFloat(letterSpacing)||0:letterSpacing;const digitWidth=`calc(1ch + ${letterSpacing})`;useEffect(()=>{animatedValue.set(valueRoundedToPlace);},[animatedValue,valueRoundedToPlace]);// Calculate blur based on velocity\nconst blur=useTransform(animatedValue,latest=>{if(!useMotionBlur)return 0;// Get velocity from the spring\nconst velocity=animatedValue.getVelocity();const blurAmount=Math.min(Math.abs(velocity)*motionBlurIntensity*.1,motionBlurIntensity*5);return blurAmount;});return /*#__PURE__*/_jsx(motion.div,{style:{height:digitHeight,position:\"relative\",width:digitWidth,overflow:\"hidden\",fontVariantNumeric:\"tabular-nums\",filter:useTransform(blur,b=>b>0?`blur(${b}px)`:\"none\"),marginLeft:`${verticalSpacing/2}px`,marginRight:`${verticalSpacing/2}px`,display:\"block\"},children:Array.from({length:10},(_,i)=>/*#__PURE__*/_jsx(AnimatedDigit,{mv:animatedValue,number:i,digitHeight:digitHeight},i))});}function AnimatedDigit({mv,number,digitHeight}){const y=useTransform(mv,latest=>{const placeValue=latest%10;const offset=(10+number-placeValue)%10;let memo=offset*digitHeight;// Prevent flickering by wrapping around when offset is too large\nif(offset>5){memo-=10*digitHeight;}return memo;});return /*#__PURE__*/_jsx(motion.span,{style:{y,position:\"absolute\",top:0,left:0,right:0,height:digitHeight,lineHeight:\"1\",display:\"block\",textAlign:\"center\"},children:number});}/**\n * @framerDisableUnlink\n *\n * @framerIntrinsicWidth 200\n * @framerIntrinsicHeight 60\n *\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function CounterPro(props){const{from=0,to=100,duration=2,delay=0,startOnView=true,textColor=\"#000000\",font,prefix=\"\",suffix=\"\",useSeparator=false,separatorChar=\",\",separatorPosition=3,decimalPlaces=0,decimalChar=\".\",useGlow=false,glowColor=\"#0099FF\",glowIntensity=20,useMotionBlur=false,motionBlurIntensity=1,verticalSpacing=0,style}=props;const{ref:fontMeasureRef,height:measuredDigitHeight}=useFontMetrics(font);const FALLBACK_DIGIT_HEIGHT=useMemo(()=>{const fontSize=font?.fontSize;if(typeof fontSize===\"string\"){const n=parseFloat(fontSize);if(!isNaN(n)){return fontSize.endsWith(\"rem\")?n*16:n;}}if(typeof fontSize===\"number\")return fontSize;return 40// safe default\n;},[font?.fontSize]);const digitHeight=measuredDigitHeight??FALLBACK_DIGIT_HEIGHT;const rawDecimalPlaces=decimalPlaces;// Clamp + sanitize once\nconst safeDecimalPlaces=useMemo(()=>{const n=Number(rawDecimalPlaces);if(!Number.isFinite(n)||isNaN(n))return 0;// Clamp to your allowed range (0..4)\nconst clamped=Math.max(0,Math.min(4,Math.floor(n)));return clamped;},[rawDecimalPlaces]);const ref=useRef(null);const isInView=useInView(ref);const[currentValue,setCurrentValue]=useState(from);const[hasAnimated,setHasAnimated]=useState(false);const[animationKey,setAnimationKey]=useState(0);const animationInProgressRef=useRef(false);const hasSetFinalValueRef=useRef(false);// Reset on mount\nuseEffect(()=>{startTransition(()=>{setCurrentValue(from);setHasAnimated(false);setAnimationKey(0);});animationInProgressRef.current=false;hasSetFinalValueRef.current=false;},[]);// Reset when from/to change\nuseEffect(()=>{startTransition(()=>{setCurrentValue(from);setHasAnimated(false);setAnimationKey(prev=>prev+1);});animationInProgressRef.current=false;hasSetFinalValueRef.current=false;},[from,to]);// Reset hasSetFinalValueRef when view state changes and once is false\nuseEffect(()=>{if(isInView){hasSetFinalValueRef.current=false;startTransition(()=>{setHasAnimated(false);});}else{// Reset when leaving view so it's ready for next entry\nhasSetFinalValueRef.current=false;}},[isInView]);useEffect(()=>{if(!startOnView||!isInView)return;if(hasAnimated)return;const timer=setTimeout(()=>{startTransition(()=>{setAnimationKey(prev=>prev+1);});},50);return()=>clearTimeout(timer);},[isInView,startOnView,hasAnimated]);const shouldStart=!startOnView||isInView&&!hasSetFinalValueRef.current;// Main animation effect\nuseEffect(()=>{if(!shouldStart)return;// Prevent re-triggering if animation is already in progress or final value is set\nif(animationInProgressRef.current||hasSetFinalValueRef.current)return;animationInProgressRef.current=true;startTransition(()=>{setHasAnimated(true);});// Capture the start value at the moment animation begins\nconst capturedStartValue=currentValue;const timer=setTimeout(()=>{const startTime=Date.now();const difference=to-capturedStartValue;const animate=()=>{const elapsed=Date.now()-startTime;const progress=Math.min(elapsed/(duration*1e3),1);const easeOutCubic=1-Math.pow(1-progress,3);const newValue=capturedStartValue+difference*easeOutCubic;if(progress<1){startTransition(()=>{setCurrentValue(newValue);});requestAnimationFrame(animate);}else{// Set final value exactly and mark animation as complete\nstartTransition(()=>{setCurrentValue(to);});animationInProgressRef.current=false;hasSetFinalValueRef.current=true;}};requestAnimationFrame(animate);},delay*1e3);return()=>{clearTimeout(timer);animationInProgressRef.current=false;};},[shouldStart,to,duration,delay,animationKey]);// Handle decimal part - memoize to prevent errors during prop changes\nconst decimalData=useMemo(()=>{const absValue=Math.abs(currentValue);const integerPart=Math.floor(absValue);// Immediately return if no decimal places requested\nif(safeDecimalPlaces<=0){return{integerPart,decimalDigits:\"\",hasValidDecimals:false,decimalValue:0};}const scale=Math.pow(10,safeDecimalPlaces);let decimalValue=0;let decimalDigits=\"\";let hasValidDecimals=false;try{const scaled=Math.floor(absValue*scale);decimalValue=scaled%scale;decimalDigits=decimalValue.toString().padStart(safeDecimalPlaces,\"0\");hasValidDecimals=decimalDigits.length===safeDecimalPlaces;}catch(e){// Fallback to zeros if calculation fails\ndecimalValue=0;decimalDigits=\"0\".repeat(Math.max(0,safeDecimalPlaces));hasValidDecimals=safeDecimalPlaces>0;}return{integerPart,decimalDigits,hasValidDecimals,decimalValue};},[currentValue,safeDecimalPlaces]);const maxDigits=useMemo(()=>{const maxValue=Math.max(Math.abs(Math.floor(from)).toString().length,Math.abs(Math.floor(to)).toString().length,Math.abs(Math.floor(currentValue)).toString().length);// Ensure at least 1 digit to prevent errors\nreturn Math.max(maxValue,1);},[from,to,currentValue]);const places=useMemo(()=>{return Array.from({length:maxDigits},(_,i)=>Math.pow(10,maxDigits-i-1));},[maxDigits]);// Create digit groups for separators\nconst renderDigitsWithSeparators=()=>{const digits=[];places.forEach((place,index)=>{// Calculate stagger factor based on position from right (ones place = 0)\nconst staggerFactor=maxDigits-index-1;// Add separator AFTER previous digit if needed (before current digit)\nif(useSeparator&&separatorChar&&index>0){const digitsFromRight=maxDigits-index;if(digitsFromRight%separatorPosition===0){digits.push(/*#__PURE__*/_jsx(\"span\",{style:{opacity:.7},children:separatorChar},`sep-${index}-${animationKey}`));}}digits.push(/*#__PURE__*/_jsx(Digit,{place:place,value:decimalData.integerPart,digitHeight:digitHeight,duration:duration,font:font,useMotionBlur:useMotionBlur,motionBlurIntensity:motionBlurIntensity,verticalSpacing:verticalSpacing},`digit-${index}-${animationKey}`));});return digits;};// Generate glow effect\nconst glowStyle=useGlow?{textShadow:`\n\t\t\t\t\t0 0 ${glowIntensity*.5}px ${glowColor},\n\t\t\t\t\t0 0 ${glowIntensity}px ${glowColor},\n\t\t\t\t\t0 0 ${glowIntensity*1.5}px ${glowColor},\n\t\t\t\t\t0 0 ${glowIntensity*2}px ${glowColor}\n\t\t\t\t`}:{};// Create a spring for decimal blur animation\nconst decimalAnimatedValue=useSpring(currentValue,{stiffness:100,damping:30,mass:1});useEffect(()=>{decimalAnimatedValue.set(currentValue);},[currentValue,decimalAnimatedValue]);const decimalBlur=useTransform(decimalAnimatedValue,latest=>{if(!useMotionBlur)return 0;const velocity=Math.abs(decimalAnimatedValue.getVelocity());// Apply 2x more blur to decimal places than the ones digit\nconst blurAmount=Math.min(velocity*motionBlurIntensity*.2,motionBlurIntensity*10);return blurAmount;});const decimalFilter=useTransform(decimalBlur,b=>b>0?`blur(${b}px)`:\"none\");return /*#__PURE__*/_jsxs(\"div\",{ref:ref,style:{position:\"relative\",height:digitHeight,minHeight:digitHeight,alignItems:\"center\",display:\"flex\",color:textColor,...font,...glowStyle,...style},children:[/*#__PURE__*/_jsx(\"span\",{ref:fontMeasureRef,style:{...font,position:\"absolute\",visibility:\"hidden\",whiteSpace:\"nowrap\",pointerEvents:\"none\",lineHeight:\"1\"},children:\"0\"}),prefix&&/*#__PURE__*/_jsx(\"span\",{style:{marginRight:`${verticalSpacing}px`,whiteSpace:\"pre\"},children:prefix}),currentValue<0&&/*#__PURE__*/_jsx(\"span\",{style:{marginRight:`${verticalSpacing/2}px`},children:\"-\"}),/*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",alignItems:\"center\"},children:renderDigitsWithSeparators()}),safeDecimalPlaces>0&&decimalData.hasValidDecimals&&decimalData.decimalDigits&&decimalChar&&/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\"},children:[/*#__PURE__*/_jsx(motion.span,{style:{opacity:.7,filter:decimalFilter},children:decimalChar}),Array.from(decimalData.decimalDigits).map((digit,index)=>/*#__PURE__*/_jsx(Digit,{place:Math.pow(10,safeDecimalPlaces-index-1),value:Math.floor(Math.abs(currentValue)*Math.pow(10,safeDecimalPlaces)),digitHeight:digitHeight,duration:duration,font:font,useMotionBlur:useMotionBlur,motionBlurIntensity:motionBlurIntensity,verticalSpacing:verticalSpacing},`decimal-${index}-${animationKey}`))]}),suffix&&/*#__PURE__*/_jsx(\"span\",{style:{marginLeft:`${verticalSpacing}px`,whiteSpace:\"pre\"},children:suffix})]});}CounterPro.displayName=\"Counter Pro\";addPropertyControls(CounterPro,{from:{type:ControlType.Number,title:\"From\",defaultValue:0,step:.01},to:{type:ControlType.Number,title:\"To\",defaultValue:99,step:.01},startOnView:{type:ControlType.Boolean,title:\"Start on View\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:\"40px\",variant:\"Bold\",letterSpacing:\"-0.02em\",lineHeight:\"1em\"}},textColor:{type:ControlType.Color,title:\"Text Color\",defaultValue:\"#000000\"},prefix:{type:ControlType.String,title:\"Prefix\",defaultValue:\"\",placeholder:\"$, €, etc.\"},suffix:{type:ControlType.String,title:\"Suffix\",defaultValue:\"\",placeholder:\"kg, mph, etc.\"},useSeparator:{type:ControlType.Boolean,title:\"Use Separator\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},separatorChar:{type:ControlType.String,title:\"Separator\",defaultValue:\",\",placeholder:\",\",hidden:({useSeparator})=>!useSeparator},separatorPosition:{type:ControlType.Number,title:\"Separator Position\",defaultValue:3,min:1,max:10,step:1,displayStepper:true,hidden:({useSeparator})=>!useSeparator},decimalPlaces:{type:ControlType.Number,title:\"Decimal Places\",defaultValue:0,min:0,max:4,step:1,displayStepper:true},decimalChar:{type:ControlType.String,title:\"Decimal Char\",defaultValue:\".\",placeholder:\".\",hidden:({decimalPlaces})=>decimalPlaces===0},verticalSpacing:{type:ControlType.Number,title:\"Spacing\",defaultValue:0,max:20,step:1,unit:\"px\"},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\"},useGlow:{type:ControlType.Boolean,title:\"Glow Effect\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},glowColor:{type:ControlType.Color,title:\"Glow Color\",defaultValue:\"#0099FF\",hidden:({useGlow})=>!useGlow},glowIntensity:{type:ControlType.Number,title:\"Glow Intensity\",defaultValue:2,min:1,max:50,step:1,hidden:({useGlow})=>!useGlow},useMotionBlur:{type:ControlType.Boolean,title:\"Motion Blur\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"[Click here](https://tinyurl.com/avirallakhanpaul) to get more exciting components!\"},motionBlurIntensity:{type:ControlType.Number,title:\"Blur Intensity\",defaultValue:1,min:.1,max:3,step:.1,hidden:({useMotionBlur})=>!useMotionBlur}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CounterPro\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"60\",\"framerSupportedLayoutHeight\":\"auto\",\"framerIntrinsicWidth\":\"200\",\"framerDisableUnlink\":\"*\",\"framerSupportedLayoutWidth\":\"auto\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CounterPro.map"],"mappings":"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"}