{"version":3,"file":"CounterUp.zO2zXTg9.mjs","names":["CounterUp","useState","useRef","useState","useRef"],"sources":["https:/framerusercontent.com/modules/5Ci9kvo8Z1ztIE6sRoVX/GcXiCE9Enl9Zk9yfZx2b/CounterUp.js","https:/framerusercontent.com/modules/29aHdqMDOq56ucck5NIF/eLLIBmGLdvJqYmVYyeJd/CounterUp.js"],"sourcesContent":["// Counter Up component with prefix/suffix controls, editable number, and typography controls\nimport{jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useState,useRef,startTransition}from\"react\";import{addPropertyControls,ControlType}from\"framer\";import{useInView}from\"framer-motion\";/**\n * Counter Up\n *\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function CounterUp(props){const{value,duration,prefixEnabled,prefix,suffixEnabled,suffix,font,style}=props;const[count,setCount]=useState(0);const[hasAnimated,setHasAnimated]=useState(false);const ref=useRef(null);const inView=useInView(ref,{once:true,margin:\"-10% 0px -10% 0px\"});useEffect(()=>{if(!inView||hasAnimated)return;let start=0;let startTimestamp=null;let req;function step(timestamp){if(!startTimestamp)startTimestamp=timestamp;const progress=Math.min((timestamp-startTimestamp)/(duration*1e3),1);const current=Math.floor(progress*(value-start)+start);startTransition(()=>setCount(current));if(progress<1){req=requestAnimationFrame(step);}else{startTransition(()=>setCount(value));startTransition(()=>setHasAnimated(true));}}req=requestAnimationFrame(step);return()=>cancelAnimationFrame(req);},[inView,value,duration,hasAnimated]);useEffect(()=>{if(!inView){startTransition(()=>setCount(0));startTransition(()=>setHasAnimated(false));}},[inView]);return /*#__PURE__*/_jsxs(\"span\",{ref:ref,style:{display:\"inline-block\",width:\"max-content\",...font,...style},children:[prefixEnabled&&prefix,count,suffixEnabled&&suffix]});}addPropertyControls(CounterUp,{value:{type:ControlType.Number,title:\"Number\",defaultValue:100,min:0,max:1e6,step:1,displayStepper:true},duration:{type:ControlType.Number,title:\"Duration (s)\",defaultValue:2,min:.1,max:10,step:.1},prefixEnabled:{type:ControlType.Boolean,title:\"Prefix\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},prefix:{type:ControlType.String,title:\"Prefix Value\",defaultValue:\"$\",hidden:({prefixEnabled})=>!prefixEnabled},suffixEnabled:{type:ControlType.Boolean,title:\"Suffix\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},suffix:{type:ControlType.String,title:\"Suffix Value\",defaultValue:\"+\",hidden:({suffixEnabled})=>!suffixEnabled},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\":\"CounterUp\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CounterUp.map","// Counter Up component with prefix/suffix controls, editable number, and typography controls\nimport{jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useState,useRef,startTransition}from\"react\";import{addPropertyControls,ControlType}from\"framer\";import{useInView}from\"framer-motion\";/**\n * Counter Up\n *\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function CounterUp(props){const{value,duration,prefixEnabled,prefix,suffixEnabled,suffix,font,style}=props;const[count,setCount]=useState(0);const[hasAnimated,setHasAnimated]=useState(false);const ref=useRef(null);const inView=useInView(ref,{once:true,margin:\"-10% 0px -10% 0px\"});useEffect(()=>{if(!inView||hasAnimated)return;let start=0;let startTimestamp=null;let req;function step(timestamp){if(!startTimestamp)startTimestamp=timestamp;const progress=Math.min((timestamp-startTimestamp)/(duration*1e3),1);const current=Math.floor(progress*(value-start)+start);startTransition(()=>setCount(current));if(progress<1){req=requestAnimationFrame(step);}else{startTransition(()=>setCount(value));startTransition(()=>setHasAnimated(true));}}req=requestAnimationFrame(step);return()=>cancelAnimationFrame(req);},[inView,value,duration,hasAnimated]);useEffect(()=>{if(!inView){startTransition(()=>setCount(0));startTransition(()=>setHasAnimated(false));}},[inView]);return /*#__PURE__*/_jsxs(\"span\",{ref:ref,style:{display:\"inline-block\",width:\"max-content\",...font,...style},children:[prefixEnabled&&prefix,count,suffixEnabled&&suffix]});}addPropertyControls(CounterUp,{value:{type:ControlType.Number,title:\"Number\",defaultValue:100,min:0,max:1e6,step:1,displayStepper:true},duration:{type:ControlType.Number,title:\"Duration (s)\",defaultValue:2,min:.1,max:10,step:.1},prefixEnabled:{type:ControlType.Boolean,title:\"Prefix\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},prefix:{type:ControlType.String,title:\"Prefix Value\",defaultValue:\"$\",hidden:({prefixEnabled})=>!prefixEnabled},suffixEnabled:{type:ControlType.Boolean,title:\"Suffix\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},suffix:{type:ControlType.String,title:\"Suffix Value\",defaultValue:\"+\",hidden:({suffixEnabled})=>!suffixEnabled},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\":\"CounterUp\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CounterUp.map"],"mappings":"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"}