{"version":3,"file":"NumberCounter.C4bTInSI.mjs","names":["useState","useRef"],"sources":["https:/framerusercontent.com/modules/efARBexpDBJ0oRAD0PpC/SoJR3YFYQ9PqkQagqjF2/NumberCounter.js"],"sourcesContent":["// Number counter that animates from 0 to a target value\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useState,useRef,startTransition}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{useInView,useMotionValue,useSpring}from\"framer-motion\";/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function NumberCounter(props){const{targetNumber=100,duration=2,delay=0,prefix=\"\",suffix=\"\",decimals=0,separator=true,textColor=\"#000000\",font,style}=props;const[displayValue,setDisplayValue]=useState(\"0\");const ref=useRef(null);const inView=useInView(ref,{once:true});const isStatic=useIsStaticRenderer();const motionValue=useMotionValue(0);const springValue=useSpring(motionValue,{duration:duration*1e3,bounce:0,delay:delay*1e3});useEffect(()=>{if(isStatic){const formatted=formatNumber(targetNumber,decimals,separator);startTransition(()=>setDisplayValue(formatted));return;}if(!inView)return;motionValue.set(0);motionValue.set(targetNumber);const unsubscribe=springValue.on(\"change\",latest=>{const formatted=formatNumber(latest,decimals,separator);startTransition(()=>setDisplayValue(formatted));});return()=>unsubscribe();},[inView,targetNumber,duration,delay,decimals,separator,isStatic,motionValue,springValue]);function formatNumber(value,decimals,useSeparator){const fixed=value.toFixed(decimals);if(!useSeparator)return fixed;const parts=fixed.split(\".\");parts[0]=parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g,\",\");return parts.join(\".\");}return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{...style,position:\"relative\",width:\"max-content\",minWidth:\"max-content\"},children:/*#__PURE__*/_jsxs(\"span\",{style:{color:textColor,...font},children:[prefix,displayValue,suffix]})});}addPropertyControls(NumberCounter,{targetNumber:{type:ControlType.Number,title:\"Target Number\",defaultValue:100,min:0,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},separator:{type:ControlType.Boolean,title:\"Separator\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},prefix:{type:ControlType.String,title:\"Prefix\",defaultValue:\"\",placeholder:\"$\"},suffix:{type:ControlType.String,title:\"Suffix\",defaultValue:\"\",placeholder:\"%\"},textColor:{type:ControlType.Color,title:\"Text Color\",defaultValue:\"#000000\"},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:\"40px\",variant:\"Bold\",letterSpacing:\"-0.04em\",lineHeight:\"1em\"}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"NumberCounter\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./NumberCounter.map"],"mappings":"6QAIG,SAAwB,EAAc,EAAM,CAAC,GAAK,CAAC,eAAa,IAAI,WAAS,EAAE,QAAM,EAAE,SAAO,GAAG,SAAO,GAAG,WAAS,EAAE,YAAU,GAAK,YAAU,UAAU,OAAK,SAAO,EAAW,CAAC,EAAa,GAAiBA,EAAS,GAAG,EAAQ,EAAIC,EAAO,IAAI,EAAQ,EAAO,EAAU,EAAI,CAAC,KAAK,EAAI,CAAC,EAAQ,EAAS,EAAoB,EAAQ,EAAY,EAAe,CAAC,EAAQ,EAAY,EAAU,EAAY,CAAC,SAAS,EAAS,IAAI,OAAO,EAAE,MAAM,EAAM,GAAG,CAAC,EAAE,MAAc,CAAC,GAAG,EAAS,CAAC,IAAM,EAAU,EAAa,EAAa,EAAS,CAAS,EAAE,MAAoB,EAAgB,CAAS,CAAC,EAAE,MAAO,CAAC,GAAG,CAAC,EAAO,OAAO,EAAY,IAAI,CAAC,EAAE,EAAY,IAAI,CAAY,EAAE,IAAM,EAAY,EAAY,GAAG,SAAS,GAAQ,CAAC,IAAM,EAAU,EAAa,EAAO,EAAS,CAAS,EAAE,MAAoB,EAAgB,CAAS,CAAC,CAAE,CAAC,EAAE,UAAU,EAAY,CAAE,EAAE,CAAC,EAAO,EAAa,EAAS,EAAM,EAAS,EAAU,EAAS,EAAY,CAAW,CAAC,EAAE,SAAS,EAAa,EAAM,EAAS,EAAa,CAAC,IAAM,EAAM,EAAM,QAAQ,CAAQ,EAAE,GAAG,CAAC,EAAa,OAAO,EAAM,IAAM,EAAM,EAAM,MAAM,GAAG,EAAyD,MAAvD,GAAM,GAAG,EAAM,EAAE,CAAC,QAAQ,wBAAwB,GAAG,EAAS,EAAM,KAAK,GAAG,CAAE,CAAC,OAAoB,EAAK,MAAM,CAAK,MAAI,MAAM,CAAC,GAAG,EAAM,SAAS,WAAW,MAAM,cAAc,SAAS,aAAa,EAAE,SAAsB,EAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAU,GAAG,CAAI,EAAE,SAAS,CAAC,EAAO,EAAa,CAAM,CAAC,CAAC,CAAC,CAAC,CAAE,iBAHxzC,IAA6D,IAAwE,IAA8D,EAGsnC,EAAoB,EAAc,CAAC,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,aAAa,IAAI,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,EAAE,MAAM,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,UAAU,CAAC,KAAK,EAAY,QAAQ,MAAM,YAAY,aAAa,GAAK,aAAa,KAAK,cAAc,KAAK,EAAE,OAAO,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,GAAG,YAAY,GAAG,EAAE,OAAO,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,GAAG,YAAY,GAAG,EAAE,UAAU,CAAC,KAAK,EAAY,MAAM,MAAM,aAAa,aAAa,SAAS,EAAE,KAAK,CAAC,KAAK,EAAY,KAAK,MAAM,OAAO,SAAS,WAAW,gBAAgB,aAAa,aAAa,CAAC,SAAS,OAAO,QAAQ,OAAO,cAAc,UAAU,WAAW,KAAK,CAAC,CAAC,CAAC"}