{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/saWZHomn6CdsDZ6onYPn/eIUeVMAzqpvnf2FPYnmn/Classic_Counter.js"],
  "sourcesContent": ["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useState,useEffect,useRef}from\"react\";import{addPropertyControls,ControlType}from\"framer\";// Function to pad numbers with leading zeros and ensure trailing zeros\nconst padWithZeros=(number,intLength,decimalLength)=>{const[integer,decimal=\"\"]=String(number||\"\").split(\".\");const paddedInteger=integer.padStart(intLength,\"0\");const paddedDecimal=decimal.padEnd(decimalLength,\"0\");return decimalLength>0?`${paddedInteger}.${paddedDecimal}`:paddedInteger;};/**\n * @framerDisableUnlink\n *\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 300\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function ClassicCounter({targetNumber=\"1000.00\",startValue=\"0.00\",speed=2,delay=0,font={font:{},color:\"#000\",fontSize:44},prefix=\"\",suffix=\"\",prefixColor=\"#000\",suffixColor=\"#000\"}){const parsedStartValue=parseFloat(startValue)||0;const parsedTargetNumber=parseFloat(targetNumber)||0;const parsedSpeed=parseFloat(speed)||2;const[currentDigits,setCurrentDigits]=useState([]);const[isVisible,setIsVisible]=useState(false);const[isAnimationStarted,setIsAnimationStarted]=useState(false);const containerRef=useRef(null);// Determine the number of decimal places in the input\nconst getDecimalPlaces=value=>{const decimalPart=String(value).split(\".\")[1]||\"\";return decimalPart.length;};const decimalPlaces=Math.max(getDecimalPlaces(startValue),getDecimalPlaces(targetNumber));// Use Intersection Observer to detect visibility\nuseEffect(()=>{const observer=new IntersectionObserver(([entry])=>setIsVisible(entry.isIntersecting),{threshold:.1});if(containerRef.current){observer.observe(containerRef.current);}return()=>{if(containerRef.current){observer.unobserve(containerRef.current);}};},[]);// Initialize digits with proper padding\nuseEffect(()=>{const[startInt]=String(parsedStartValue).split(\".\");const[targetInt]=String(parsedTargetNumber).split(\".\");const maxIntLength=Math.max(startInt.length,targetInt.length);const initialDigits=padWithZeros(parsedStartValue,maxIntLength,decimalPlaces).split(\"\");setCurrentDigits(initialDigits);},[parsedStartValue,parsedTargetNumber,decimalPlaces]);// Trigger the animation after the delay when visible\nuseEffect(()=>{if(!isVisible||isAnimationStarted)return;const delayTimeout=setTimeout(()=>{setIsAnimationStarted(true)// Start the animation after the delay\n;},delay*1e3);return()=>clearTimeout(delayTimeout);},[isVisible,delay,isAnimationStarted]);// Animate digits once the animation starts\nuseEffect(()=>{if(!isAnimationStarted)return;const[startInt]=String(parsedStartValue).split(\".\");const[targetInt]=String(parsedTargetNumber).split(\".\");const maxIntLength=Math.max(startInt.length,targetInt.length);const targetDigits=padWithZeros(parsedTargetNumber,maxIntLength,decimalPlaces);const startDigits=padWithZeros(parsedStartValue,maxIntLength,decimalPlaces);let startTime=null;const animateDigits=timestamp=>{if(!startTime)startTime=timestamp;const elapsed=(timestamp-startTime)/1e3;const progress=Math.min(elapsed/parsedSpeed,1);const newDigits=targetDigits.split(\"\").map((char,index)=>{if(char===\".\")return\".\"// Handle decimal points\n;const startDigit=parseInt(startDigits[index],10)||0;const endDigit=parseInt(char,10);const interpolatedValue=Math.floor(startDigit+progress*(endDigit-startDigit));return String(interpolatedValue);});setCurrentDigits(newDigits);if(progress<1){requestAnimationFrame(animateDigits);}};requestAnimationFrame(animateDigits);},[isAnimationStarted,parsedStartValue,parsedTargetNumber,parsedSpeed,decimalPlaces]);// Render the digits, including the decimal point\nconst renderDigit=(digit,index)=>{return /*#__PURE__*/_jsx(\"div\",{style:{...font.font,fontSize:font.fontSize||\"44px\",color:font.color||\"#000\",display:\"inline-block\",minWidth:`${font.fontSize*.6||26}px`,height:`${font.fontSize||44}px`,textAlign:\"center\",lineHeight:`${font.fontSize||44}px`},children:digit},index);};return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,style:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\",...font.font,fontSize:font.fontSize||\"44px\",color:font.color||\"#000\"},children:[prefix&&/*#__PURE__*/_jsx(\"span\",{style:{color:prefixColor,...font.font,fontSize:font.fontSize||\"44px\",marginRight:\"4px\"},children:prefix}),currentDigits.map((digit,index)=>renderDigit(digit,index)),suffix&&/*#__PURE__*/_jsx(\"span\",{style:{color:suffixColor,...font.font,fontSize:font.fontSize||\"44px\",marginLeft:\"4px\"},children:suffix})]});}// Add Property Controls for Framer\naddPropertyControls(ClassicCounter,{targetNumber:{type:ControlType.String,title:\"Target Number\",defaultValue:\"1000.00\"},startValue:{type:ControlType.String,title:\"Start Value\",defaultValue:\"0.00\"},speed:{type:ControlType.Number,title:\"Speed (s)\",defaultValue:2,min:.1,max:10,step:.1},delay:{type:ControlType.Number,title:\"Delay (s)\",defaultValue:0,min:0,max:10,step:.1},prefix:{type:ControlType.String,title:\"Prefix\",defaultValue:\"\"},prefixColor:{type:ControlType.Color,title:\"Prefix Color\",defaultValue:\"#000\",hidden:({prefix})=>!prefix},suffix:{type:ControlType.String,title:\"Suffix\",defaultValue:\"\"},suffixColor:{type:ControlType.Color,title:\"Suffix Color\",defaultValue:\"#000\",hidden:({suffix})=>!suffix},font:{description:\"[Mr. Framer](https://mrframer.com), Get Free High Quality Framer Resources.\",type:ControlType.Object,title:\"Font\",controls:{font:{type:\"font\",title:\"Font Family\"},color:{type:ControlType.Color,defaultValue:\"#000\"},fontSize:{type:ControlType.Number,title:\"Font Size\",defaultValue:44}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ClassicCounter\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"300\",\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"any\",\"framerIntrinsicWidth\":\"400\",\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"*\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Classic_Counter.map"],
  "mappings": "qHACA,IAAMA,EAAa,CAACC,EAAOC,EAAUC,IAAgB,CAAC,GAAK,CAACC,EAAQC,EAAQ,EAAE,EAAE,OAAOJ,GAAQ,EAAE,EAAE,MAAM,GAAG,EAAQK,EAAcF,EAAQ,SAASF,EAAU,GAAG,EAAQK,EAAcF,EAAQ,OAAOF,EAAc,GAAG,EAAE,OAAOA,EAAc,EAAE,GAAGG,CAAa,IAAIC,CAAa,GAAGD,CAAc,EAO/Q,SAARE,EAAgC,CAAC,aAAAC,EAAa,UAAU,WAAAC,EAAW,OAAO,MAAAC,EAAM,EAAE,MAAAC,EAAM,EAAE,KAAAC,EAAK,CAAC,KAAK,CAAC,EAAE,MAAM,OAAO,SAAS,EAAE,EAAE,OAAAC,EAAO,GAAG,OAAAC,EAAO,GAAG,YAAAC,EAAY,OAAO,YAAAC,EAAY,MAAM,EAAE,CAAC,IAAMC,EAAiB,WAAWR,CAAU,GAAG,EAAQS,EAAmB,WAAWV,CAAY,GAAG,EAAQW,EAAY,WAAWT,CAAK,GAAG,EAAO,CAACU,EAAcC,CAAgB,EAAEC,EAAS,CAAC,CAAC,EAAO,CAACC,EAAUC,CAAY,EAAEF,EAAS,EAAK,EAAO,CAACG,EAAmBC,CAAqB,EAAEJ,EAAS,EAAK,EAAQK,EAAaC,EAAO,IAAI,EAC9gBC,EAAiBC,IAA0B,OAAOA,CAAK,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,IAAsB,OAAeC,EAAc,KAAK,IAAIF,EAAiBpB,CAAU,EAAEoB,EAAiBrB,CAAY,CAAC,EACrMwB,EAAU,IAAI,CAAC,IAAMC,EAAS,IAAI,qBAAqB,CAAC,CAACC,CAAK,IAAIV,EAAaU,EAAM,cAAc,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,OAAGP,EAAa,SAASM,EAAS,QAAQN,EAAa,OAAO,EAAS,IAAI,CAAIA,EAAa,SAASM,EAAS,UAAUN,EAAa,OAAO,CAAG,CAAE,EAAE,CAAC,CAAC,EAC1QK,EAAU,IAAI,CAAC,GAAK,CAACG,CAAQ,EAAE,OAAOlB,CAAgB,EAAE,MAAM,GAAG,EAAO,CAACmB,CAAS,EAAE,OAAOlB,CAAkB,EAAE,MAAM,GAAG,EAAQmB,EAAa,KAAK,IAAIF,EAAS,OAAOC,EAAU,MAAM,EAAQE,EAAcvC,EAAakB,EAAiBoB,EAAaN,CAAa,EAAE,MAAM,EAAE,EAAEV,EAAiBiB,CAAa,CAAE,EAAE,CAACrB,EAAiBC,EAAmBa,CAAa,CAAC,EACrWC,EAAU,IAAI,CAAC,GAAG,CAACT,GAAWE,EAAmB,OAAO,IAAMc,EAAa,WAAW,IAAI,CAACb,EAAsB,EAAI,CACpH,EAAEf,EAAM,GAAG,EAAE,MAAM,IAAI,aAAa4B,CAAY,CAAE,EAAE,CAAChB,EAAUZ,EAAMc,CAAkB,CAAC,EACzFO,EAAU,IAAI,CAAC,GAAG,CAACP,EAAmB,OAAO,GAAK,CAACU,CAAQ,EAAE,OAAOlB,CAAgB,EAAE,MAAM,GAAG,EAAO,CAACmB,CAAS,EAAE,OAAOlB,CAAkB,EAAE,MAAM,GAAG,EAAQmB,EAAa,KAAK,IAAIF,EAAS,OAAOC,EAAU,MAAM,EAAQI,EAAazC,EAAamB,EAAmBmB,EAAaN,CAAa,EAAQU,EAAY1C,EAAakB,EAAiBoB,EAAaN,CAAa,EAAMW,EAAU,KAAWC,EAAcC,GAAW,CAAKF,IAAUA,EAAUE,GAAU,IAAMC,GAASD,EAAUF,GAAW,IAAUI,EAAS,KAAK,IAAID,EAAQ1B,EAAY,CAAC,EAAQ4B,EAAUP,EAAa,MAAM,EAAE,EAAE,IAAI,CAACQ,EAAKC,IAAQ,CAAC,GAAGD,IAAO,IAAI,MAAM,IAC1mB,IAAME,EAAW,SAAST,EAAYQ,CAAK,EAAE,EAAE,GAAG,EAAQE,EAAS,SAASH,EAAK,EAAE,EAAQI,EAAkB,KAAK,MAAMF,EAAWJ,GAAUK,EAASD,EAAW,EAAE,OAAO,OAAOE,CAAiB,CAAE,CAAC,EAAE/B,EAAiB0B,CAAS,EAAKD,EAAS,GAAG,sBAAsBH,CAAa,CAAG,EAAE,sBAAsBA,CAAa,CAAE,EAAE,CAAClB,EAAmBR,EAAiBC,EAAmBC,EAAYY,CAAa,CAAC,EACpZ,IAAMsB,EAAY,CAACC,EAAML,IAA6BM,EAAK,MAAM,CAAC,MAAM,CAAC,GAAG3C,EAAK,KAAK,SAASA,EAAK,UAAU,OAAO,MAAMA,EAAK,OAAO,OAAO,QAAQ,eAAe,SAAS,GAAGA,EAAK,SAAS,IAAI,EAAE,KAAK,OAAO,GAAGA,EAAK,UAAU,EAAE,KAAK,UAAU,SAAS,WAAW,GAAGA,EAAK,UAAU,EAAE,IAAI,EAAE,SAAS0C,CAAK,EAAEL,CAAK,EAAI,OAAoBO,EAAM,MAAM,CAAC,IAAI7B,EAAa,MAAM,CAAC,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,GAAGf,EAAK,KAAK,SAASA,EAAK,UAAU,OAAO,MAAMA,EAAK,OAAO,MAAM,EAAE,SAAS,CAACC,GAAqB0C,EAAK,OAAO,CAAC,MAAM,CAAC,MAAMxC,EAAY,GAAGH,EAAK,KAAK,SAASA,EAAK,UAAU,OAAO,YAAY,KAAK,EAAE,SAASC,CAAM,CAAC,EAAEO,EAAc,IAAI,CAACkC,EAAML,IAAQI,EAAYC,EAAML,CAAK,CAAC,EAAEnC,GAAqByC,EAAK,OAAO,CAAC,MAAM,CAAC,MAAMvC,EAAY,GAAGJ,EAAK,KAAK,SAASA,EAAK,UAAU,OAAO,WAAW,KAAK,EAAE,SAASE,CAAM,CAAC,CAAC,CAAC,CAAC,CAAE,CACp1B2C,EAAoBlD,EAAe,CAAC,aAAa,CAAC,KAAKmD,EAAY,OAAO,MAAM,gBAAgB,aAAa,SAAS,EAAE,WAAW,CAAC,KAAKA,EAAY,OAAO,MAAM,cAAc,aAAa,MAAM,EAAE,MAAM,CAAC,KAAKA,EAAY,OAAO,MAAM,YAAY,aAAa,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,EAAE,MAAM,CAAC,KAAKA,EAAY,OAAO,MAAM,YAAY,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,EAAE,OAAO,CAAC,KAAKA,EAAY,OAAO,MAAM,SAAS,aAAa,EAAE,EAAE,YAAY,CAAC,KAAKA,EAAY,MAAM,MAAM,eAAe,aAAa,OAAO,OAAO,CAAC,CAAC,OAAA7C,CAAM,IAAI,CAACA,CAAM,EAAE,OAAO,CAAC,KAAK6C,EAAY,OAAO,MAAM,SAAS,aAAa,EAAE,EAAE,YAAY,CAAC,KAAKA,EAAY,MAAM,MAAM,eAAe,aAAa,OAAO,OAAO,CAAC,CAAC,OAAA5C,CAAM,IAAI,CAACA,CAAM,EAAE,KAAK,CAAC,YAAY,8EAA8E,KAAK4C,EAAY,OAAO,MAAM,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK,OAAO,MAAM,aAAa,EAAE,MAAM,CAAC,KAAKA,EAAY,MAAM,aAAa,MAAM,EAAE,SAAS,CAAC,KAAKA,EAAY,OAAO,MAAM,YAAY,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC",
  "names": ["padWithZeros", "number", "intLength", "decimalLength", "integer", "decimal", "paddedInteger", "paddedDecimal", "ClassicCounter", "targetNumber", "startValue", "speed", "delay", "font", "prefix", "suffix", "prefixColor", "suffixColor", "parsedStartValue", "parsedTargetNumber", "parsedSpeed", "currentDigits", "setCurrentDigits", "ye", "isVisible", "setIsVisible", "isAnimationStarted", "setIsAnimationStarted", "containerRef", "pe", "getDecimalPlaces", "value", "decimalPlaces", "ue", "observer", "entry", "startInt", "targetInt", "maxIntLength", "initialDigits", "delayTimeout", "targetDigits", "startDigits", "startTime", "animateDigits", "timestamp", "elapsed", "progress", "newDigits", "char", "index", "startDigit", "endDigit", "interpolatedValue", "renderDigit", "digit", "p", "u", "addPropertyControls", "ControlType"]
}
