{"version":3,"file":"ScrambleCounter.tkQqIccT.mjs","names":["useState","useRef","useCallback"],"sources":["https:/framerusercontent.com/modules/gn8BUJhdiUEMN3pMy9a6/kP0s2kkUnSKNkrcyi1F5/ScrambleCounter.js"],"sourcesContent":["// Scramble text counter component with animated character randomization\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useState,useRef,startTransition,useCallback}from\"react\";import{addPropertyControls,ControlType}from\"framer\";import{useInView}from\"framer-motion\";/**\n * Scramble Counter\n *\n * @framerIntrinsicWidth 200\n * @framerIntrinsicHeight 60\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function ScrambleCounter(props){const{targetNumber=1e3,duration=2e3,scrambleSpeed=50,font,textColor=\"#000000\",prefix=\"\",suffix=\"\",separator=\",\",decimals=0,autoStart=true,triggerInView=false}=props;const[displayValue,setDisplayValue]=useState(\"0\");const[isAnimating,setIsAnimating]=useState(false);const animationRef=useRef(null);const scrambleRef=useRef(null);const containerRef=useRef(null);const isInView=useInView(containerRef,{once:true,amount:.5});const animateCounter=useCallback(()=>{if(typeof window===\"undefined\")return;const formatNumber=num=>{const fixed=num.toFixed(decimals);const parts=fixed.split(\".\");parts[0]=parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g,separator);return parts.join(\".\");};const getRandomDigit=()=>{return Math.floor(Math.random()*10).toString();};const scrambleText=text=>{return text.split(\"\").map(char=>{if(char>=\"0\"&&char<=\"9\"){return getRandomDigit();}return char;}).join(\"\");};const startTime=Date.now();const startValue=0;setIsAnimating(true);const updateScramble=()=>{const currentTime=Date.now();const elapsed=currentTime-startTime;const progress=Math.min(elapsed/duration,1);const currentValue=startValue+(targetNumber-startValue)*progress;const formattedValue=formatNumber(currentValue);if(progress<1){startTransition(()=>{setDisplayValue(scrambleText(formattedValue));});scrambleRef.current=window.setTimeout(updateScramble,scrambleSpeed);}else{startTransition(()=>{setDisplayValue(formattedValue);setIsAnimating(false);});}};updateScramble();},[targetNumber,duration,scrambleSpeed,decimals,separator]);useEffect(()=>{if(typeof window===\"undefined\")return;// Cleanup any running animations\nif(scrambleRef.current!==null){window.clearTimeout(scrambleRef.current);}if(animationRef.current!==null){window.cancelAnimationFrame(animationRef.current);}// Reset display value\nstartTransition(()=>{setDisplayValue(\"0\");});// Determine if animation should start\nconst shouldStart=triggerInView?isInView:autoStart;if(shouldStart){const timeout=window.setTimeout(()=>{animateCounter();},100);return()=>{window.clearTimeout(timeout);if(scrambleRef.current!==null){window.clearTimeout(scrambleRef.current);}if(animationRef.current!==null){window.cancelAnimationFrame(animationRef.current);}};}},[targetNumber,duration,scrambleSpeed,decimals,separator,autoStart,triggerInView,isInView,animateCounter]);const isFixedWidth=props?.style&&props.style.width===\"100%\";return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{...props.style,position:\"relative\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",...isFixedWidth?{}:{minWidth:\"max-content\"}},children:/*#__PURE__*/_jsxs(\"span\",{style:{...font,color:textColor,fontVariantNumeric:\"tabular-nums\",whiteSpace:\"nowrap\"},children:[prefix,displayValue,suffix]})});}addPropertyControls(ScrambleCounter,{targetNumber:{type:ControlType.Number,title:\"Target Number\",defaultValue:1e3,min:0,step:1},duration:{type:ControlType.Number,title:\"Duration\",defaultValue:2e3,min:100,max:1e4,step:100,unit:\"ms\"},scrambleSpeed:{type:ControlType.Number,title:\"Scramble Speed\",defaultValue:50,min:10,max:200,step:10,unit:\"ms\"},decimals:{type:ControlType.Number,title:\"Decimals\",defaultValue:0,min:0,max:4,step:1,displayStepper:true},separator:{type:ControlType.String,title:\"Separator\",defaultValue:\",\"},prefix:{type:ControlType.String,title:\"Prefix\",defaultValue:\"\",placeholder:\"$\"},suffix:{type:ControlType.String,title:\"Suffix\",defaultValue:\"\",placeholder:\"+\"},triggerInView:{type:ControlType.Boolean,title:\"Trigger In View\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},autoStart:{type:ControlType.Boolean,title:\"Auto Start\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",hidden:({triggerInView})=>triggerInView},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\":\"ScrambleCounter\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerIntrinsicWidth\":\"200\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"60\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ScrambleCounter.map"],"mappings":"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"}