{"version":3,"file":"CountUpNumber.sUI7n2iD.mjs","names":["useRef","useState","useMemo","useCallback"],"sources":["https:/framerusercontent.com/modules/4MrvpSYxaV7DZdnbjjVC/u882usCC6aSFRIUCqYEX/CountUpNumber.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{startTransition,useCallback,useEffect,useMemo,useRef,useState}from\"react\";// @ts-ignore - Framer runtime provides this module in project environment.\nimport{addPropertyControls,ControlType}from\"framer\";// User request: Create a new Framer code component named CountUpNumber for a stat number. It must visibly render in preview without relying on overriding a RichText layer. Behavior: count from a configurable start number to a configurable end number when the component first enters the viewport, then show an optional suffix. Default start 0, end 1000, suffix '+', duration 1.6 seconds. Use IntersectionObserver once, requestAnimationFrame ease-out cubic, reduced motion immediately final value, SSR/static safe. Expose property controls for start, end, suffix, duration, font family, font size, font weight, line height, letter spacing, color, text align. Defaults should match this site stat: Space Grotesk, 37px, weight 400, line-height 1.24em, letter-spacing -0.015625em, white-ish text can be set by instance; no background, no padding, width should fit content and height auto. The component should render a semantic heading-like text visually, but not impose layout. Keep it simple and robust.\n/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function CountUpNumber(props){const{start=0,end=1e3,suffix=\"+\",showSuffixDuringCount=false,duration=1.6,decimals=0,useGrouping=true,color=\"#FFFFFF\",textStyle={fontSize:37,variant:\"Regular\",lineHeight:\"1.24em\",letterSpacing:\"-0.015625em\",textAlign:\"left\"}}=props;const rootRef=useRef(null);const rafIdRef=useRef(null);const hasStartedRef=useRef(false);const observerRef=useRef(null);const[displayValue,setDisplayValue]=useState(start);const[isComplete,setIsComplete]=useState(false);const safeDecimals=useMemo(()=>Math.min(3,Math.max(0,Math.round(decimals))),[decimals]);const finalValue=useMemo(()=>safeDecimals===0?Math.round(end):end,[end,safeDecimals]);const startValue=useMemo(()=>safeDecimals===0?Math.round(start):start,[safeDecimals,start]);const formatter=useMemo(()=>new Intl.NumberFormat(\"en-US\",{minimumFractionDigits:safeDecimals,maximumFractionDigits:safeDecimals,useGrouping}),[safeDecimals,useGrouping]);const setFinalText=useCallback(()=>{startTransition(()=>{setDisplayValue(finalValue);setIsComplete(true);});},[finalValue]);const runAnimation=useCallback(()=>{if(hasStartedRef.current)return;hasStartedRef.current=true;if(typeof window===\"undefined\"){setFinalText();return;}const prefersReducedMotion=typeof window.matchMedia===\"function\"&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;if(prefersReducedMotion){setFinalText();return;}startTransition(()=>{setDisplayValue(startValue);setIsComplete(false);});const animationDurationMs=Math.max(.05,duration)*1e3;const startTime=window.performance.now();const delta=finalValue-startValue;const easeOutCubic=t=>1-Math.pow(1-t,3);const tick=now=>{const elapsed=now-startTime;const progress=Math.min(elapsed/animationDurationMs,1);const eased=easeOutCubic(progress);const rawValue=startValue+delta*eased;const nextValue=safeDecimals===0?Math.round(rawValue):rawValue;startTransition(()=>{setDisplayValue(nextValue);setIsComplete(false);});if(progress<1){rafIdRef.current=window.requestAnimationFrame(tick);}else{setFinalText();rafIdRef.current=null;}};rafIdRef.current=window.requestAnimationFrame(tick);},[duration,finalValue,safeDecimals,setFinalText,startValue]);useEffect(()=>{if(typeof window===\"undefined\")return;if(!rootRef.current)return;if(typeof IntersectionObserver===\"undefined\"){runAnimation();return;}observerRef.current=new IntersectionObserver(entries=>{const isVisible=entries.some(entry=>entry.isIntersecting);if(!isVisible)return;runAnimation();observerRef.current?.disconnect();observerRef.current=null;},{threshold:.2});observerRef.current.observe(rootRef.current);return()=>{observerRef.current?.disconnect();observerRef.current=null;};},[runAnimation]);useEffect(()=>{return()=>{if(typeof window!==\"undefined\"&&rafIdRef.current!==null){window.cancelAnimationFrame(rafIdRef.current);}observerRef.current?.disconnect();observerRef.current=null;};},[]);const text=useMemo(()=>{const formattedValue=formatter.format(displayValue);const shouldShowSuffix=showSuffixDuringCount||isComplete;return`${formattedValue}${shouldShowSuffix?suffix:\"\"}`;},[displayValue,formatter,isComplete,showSuffixDuringCount,suffix]);return /*#__PURE__*/_jsx(\"h2\",{ref:rootRef,style:{position:\"relative\",margin:0,padding:0,background:\"transparent\",width:\"max-content\",height:\"auto\",color,fontFamily:textStyle.fontFamily||\"Space Grotesk\",fontSize:textStyle.fontSize,fontWeight:textStyle.fontWeight,lineHeight:textStyle.lineHeight,letterSpacing:textStyle.letterSpacing,textAlign:textStyle.textAlign,fontStyle:textStyle.fontStyle,whiteSpace:\"nowrap\"},children:text});}addPropertyControls(CountUpNumber,{start:{type:ControlType.Number,title:\"Start\",defaultValue:0,step:1},end:{type:ControlType.Number,title:\"End\",defaultValue:1e3,step:1},suffix:{type:ControlType.String,title:\"Suffix\",defaultValue:\"+\"},showSuffixDuringCount:{type:ControlType.Boolean,title:\"Show Suffix\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},duration:{type:ControlType.Number,title:\"Duration\",defaultValue:1.6,min:.1,max:10,step:.1},decimals:{type:ControlType.Number,title:\"Decimals\",defaultValue:0,min:0,max:3,step:1},useGrouping:{type:ControlType.Boolean,title:\"Grouping\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#FFFFFF\"},textStyle:{type:ControlType.Font,title:\"Text\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:\"37px\",variant:\"Regular\",lineHeight:\"1.24em\",letterSpacing:\"-0.015625em\",textAlign:\"left\"}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CountUpNumber\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CountUpNumber.map"],"mappings":"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"}