{"version":3,"file":"StatsSection.CZaweDRZ.mjs","names":["useState","useRef"],"sources":["https:/framerusercontent.com/modules/se7K6gzPxyUoLv0w2MFv/EluX29wrAkppvSEi5jLA/StatsSection.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useEffect,useRef,useState}from\"react\";function easeOutExpo(t){return t===1?1:1-Math.pow(2,-10*t);}function measureText(text,fontSize,fontWeight,fontFamily){const canvas=document.createElement(\"canvas\");const ctx=canvas.getContext(\"2d\");if(!ctx)return 0;ctx.font=`${fontWeight} ${fontSize}px ${fontFamily}`;return ctx.measureText(text).width;}function AnimatedNumber({end,duration,prefix,suffix,decimals,separator,shouldStart,font,numberColor}){const[display,setDisplay]=useState(\"0\");const raf=useRef(null);useEffect(()=>{if(!shouldStart)return;if(raf.current)cancelAnimationFrame(raf.current);const startTime=performance.now();const tick=now=>{const elapsed=now-startTime;const progress=Math.min(elapsed/(duration*1e3),1);const eased=easeOutExpo(progress);const current=eased*end;const formatted=separator?current.toLocaleString(\"en-US\",{minimumFractionDigits:decimals,maximumFractionDigits:decimals}):current.toFixed(decimals);setDisplay(formatted);if(progress<1)raf.current=requestAnimationFrame(tick);};raf.current=requestAnimationFrame(tick);return()=>{if(raf.current)cancelAnimationFrame(raf.current);};},[shouldStart,end,duration,decimals,separator]);return /*#__PURE__*/_jsxs(\"span\",{style:{fontVariantNumeric:\"tabular-nums\",fontSize:font?.fontSize??48,fontWeight:font?.fontWeight??700,fontFamily:font?.fontFamily??\"Inter\",fontStyle:font?.fontStyle??\"normal\",color:numberColor,lineHeight:1,letterSpacing:\"-0.02em\",whiteSpace:\"nowrap\"},children:[prefix,display,suffix]});}function StatItem({value,label,prefix,suffix,decimals,separator,duration,shouldStart,font,numberColor,labelFont,labelColor,labelTextTransform,gap}){return /*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap,alignItems:\"center\"},children:[/*#__PURE__*/_jsx(AnimatedNumber,{end:value,duration:duration,prefix:prefix,suffix:suffix,decimals:decimals,separator:separator,shouldStart:shouldStart,font:font,numberColor:numberColor}),/*#__PURE__*/_jsx(\"span\",{style:{fontSize:labelFont?.fontSize??14,fontWeight:labelFont?.fontWeight??400,fontFamily:labelFont?.fontFamily??\"Inter\",fontStyle:labelFont?.fontStyle??\"normal\",color:labelColor,lineHeight:1.4,textAlign:\"center\",textTransform:labelTextTransform},children:label})]});}/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function StatsSection({stats,duration,separator,triggerOnView,font,numberColor,labelFont,labelColor,labelTextTransform,itemGap,columnGap,rowGap,minItemWidth,divider,dividerColor,paddingTop,paddingRight,paddingBottom,paddingLeft,background,borderRadius}){const ref=useRef(null);const[started,setStarted]=useState(false);const[cellWidth,setCellWidth]=useState(minItemWidth);const fontSize=font?.fontSize??48;const fontWeight=font?.fontWeight??700;const fontFamily=font?.fontFamily??\"Inter\";useEffect(()=>{const calculate=()=>{const max=Math.max(minItemWidth,...stats.map(stat=>{const finalNumber=separator?stat.value.toLocaleString(\"en-US\",{minimumFractionDigits:stat.decimals??0,maximumFractionDigits:stat.decimals??0}):Number(stat.value).toFixed(stat.decimals??0);const fullText=`${stat.prefix??\"\"}${finalNumber}${stat.suffix??\"\"}`;return Math.ceil(measureText(fullText,fontSize,fontWeight,fontFamily))+24;}));setCellWidth(max);};document.fonts.ready.then(calculate);},[stats,fontSize,fontWeight,fontFamily,separator,minItemWidth]);useEffect(()=>{if(!triggerOnView){setStarted(true);return;}const el=ref.current;if(!el)return;const observer=new IntersectionObserver(([entry])=>{if(entry.isIntersecting){setStarted(true);observer.disconnect();}},{threshold:.2});observer.observe(el);return()=>observer.disconnect();},[triggerOnView]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{display:\"flex\",flexWrap:\"wrap\",justifyContent:\"center\",columnGap,rowGap,width:\"100%\",paddingTop,paddingRight,paddingBottom,paddingLeft,background,borderRadius,boxSizing:\"border-box\"},children:stats.map((stat,i)=>/*#__PURE__*/_jsxs(\"div\",{style:{position:\"relative\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",width:cellWidth,flexShrink:0},children:[divider&&i>0&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:0,top:\"15%\",height:\"70%\",width:1,background:dividerColor}}),/*#__PURE__*/_jsx(StatItem,{value:stat.value,label:stat.label,prefix:stat.prefix??\"\",suffix:stat.suffix??\"\",decimals:stat.decimals??0,separator:separator,duration:duration,shouldStart:started,font:font,numberColor:numberColor,labelFont:labelFont,labelColor:labelColor,labelTextTransform:labelTextTransform,gap:itemGap})]},i))});}StatsSection.defaultProps={duration:2,separator:true,triggerOnView:true,font:{fontSize:48,fontWeight:700,fontFamily:\"Inter\"},numberColor:\"#000000\",labelFont:{fontSize:14,fontWeight:400,fontFamily:\"Inter\"},labelColor:\"#888888\",labelTextTransform:\"none\",itemGap:8,columnGap:32,rowGap:32,minItemWidth:140,divider:false,dividerColor:\"#E5E5E5\",paddingTop:40,paddingRight:48,paddingBottom:40,paddingLeft:48,background:\"transparent\",borderRadius:0,stats:[{value:1e4,label:\"Happy Customers\",prefix:\"\",suffix:\"+\",decimals:0},{value:99.9,label:\"Uptime SLA\",prefix:\"\",suffix:\"%\",decimals:1},{value:500,label:\"Projects Shipped\",prefix:\"\",suffix:\"+\",decimals:0},{value:4.9,label:\"Average Rating\",prefix:\"★ \",suffix:\"\",decimals:1}]};addPropertyControls(StatsSection,{stats:{type:ControlType.Array,title:\"Stats\",control:{type:ControlType.Object,controls:{value:{type:ControlType.Number,title:\"Value\",defaultValue:1e3},label:{type:ControlType.String,title:\"Label\",defaultValue:\"Metric\"},prefix:{type:ControlType.String,title:\"Prefix\",defaultValue:\"\",placeholder:\"$ ★\"},suffix:{type:ControlType.String,title:\"Suffix\",defaultValue:\"+\",placeholder:\"% + K\"},decimals:{type:ControlType.Number,title:\"Decimals\",defaultValue:0,min:0,max:3,step:1,displayStepper:true}}}},duration:{type:ControlType.Number,title:\"Duration (s)\",defaultValue:2,min:.5,max:5,step:.1},triggerOnView:{type:ControlType.Boolean,title:\"Trigger\",defaultValue:true,enabledTitle:\"On Scroll\",disabledTitle:\"On Load\"},separator:{type:ControlType.Boolean,title:\"1,000 Separator\",defaultValue:true},font:{type:ControlType.Font,title:\"Number Font\",controls:\"extended\"},numberColor:{type:ControlType.Color,title:\"Number Color\",defaultValue:\"#000000\"},labelFont:{type:ControlType.Font,title:\"Label Font\",controls:\"extended\"},labelColor:{type:ControlType.Color,title:\"Label Color\",defaultValue:\"#888888\"},labelTextTransform:{type:ControlType.Enum,title:\"Label Case\",defaultValue:\"none\",options:[\"none\",\"uppercase\",\"lowercase\",\"capitalize\"],optionTitles:[\"None\",\"UPPERCASE\",\"lowercase\",\"Capitalize\"]},itemGap:{type:ControlType.Number,title:\"Number↕Label Gap\",defaultValue:8,min:0,max:32},columnGap:{type:ControlType.Number,title:\"Column Gap\",defaultValue:32,min:0,max:120,step:4},rowGap:{type:ControlType.Number,title:\"Row Gap\",defaultValue:32,min:0,max:120,step:4},minItemWidth:{type:ControlType.Number,title:\"Min Item Width\",defaultValue:140,min:80,max:400,step:10},divider:{type:ControlType.Boolean,title:\"Divider\",defaultValue:false},dividerColor:{type:ControlType.Color,title:\"Divider Color\",defaultValue:\"#E5E5E5\"},paddingTop:{type:ControlType.FusedNumber,title:\"Padding\",toggleKey:\"paddingPerSide\",toggleTitles:[\"All\",\"Per Side\"],valueKeys:[\"paddingTop\",\"paddingRight\",\"paddingBottom\",\"paddingLeft\"],valueLabels:[\"T\",\"R\",\"B\",\"L\"],min:0,defaultValue:40},background:{type:ControlType.Color,title:\"Background\",defaultValue:\"transparent\"},borderRadius:{type:ControlType.Number,title:\"Radius\",defaultValue:0,min:0,max:40}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"StatsSection\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"any\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./StatsSection.map"],"mappings":"+LAA0J,SAAS,EAAY,EAAE,CAAC,OAAO,IAAI,EAAE,EAAE,EAAW,IAAE,IAAI,EAAG,CAAC,SAAS,EAAY,EAAK,EAAS,EAAW,EAAW,CAA+C,IAAM,EAAvC,SAAS,cAAc,QAAyB,CAAC,CAAC,WAAW,IAAI,EAAwE,OAAlE,GAAa,EAAI,KAAK,GAAG,EAAW,GAAG,EAAS,KAAK,IAAoB,EAAI,YAAY,CAAI,CAAC,CAAC,OAApF,CAA0F,CAAC,SAAS,EAAe,CAAC,MAAI,WAAS,SAAO,SAAO,WAAS,YAAU,cAAY,OAAK,eAAa,CAAC,GAAK,CAAC,EAAQ,GAAYA,EAAS,GAAG,EAAQ,EAAIC,EAAO,IAAI,EAA6oB,OAA3oB,MAAc,CAAC,GAAG,CAAC,EAAY,OAAU,EAAI,SAAQ,qBAAqB,EAAI,OAAO,EAAE,IAAM,EAAU,YAAY,IAAI,EAAQ,EAAK,GAAK,CAAC,IAAM,EAAQ,EAAI,EAAgB,EAAS,KAAK,IAAI,GAAS,EAAS,KAAK,CAAC,EAA0C,EAA5B,EAAY,CAA4B,EAAE,EAAU,EAAU,EAAU,EAAQ,eAAe,QAAQ,CAAC,sBAAsB,EAAS,sBAAsB,CAAQ,CAAC,EAAE,EAAQ,QAAQ,CAAQ,EAAE,EAAW,CAAS,EAAK,EAAS,IAAE,EAAI,QAAQ,sBAAsB,CAAI,EAAE,EAA0C,MAAxC,GAAI,QAAQ,sBAAsB,CAAI,MAAY,CAAI,EAAI,SAAQ,qBAAqB,EAAI,OAAO,CAAE,CAAE,EAAE,CAAC,EAAY,EAAI,EAAS,EAAS,CAAS,CAAC,EAAsB,EAAM,OAAO,CAAC,MAAM,CAAC,mBAAmB,eAAe,SAAS,GAAM,UAAU,GAAG,WAAW,GAAM,YAAY,IAAI,WAAW,GAAM,YAAY,QAAQ,UAAU,GAAM,WAAW,SAAS,MAAM,EAAY,WAAW,EAAE,cAAc,UAAU,WAAW,QAAQ,EAAE,SAAS,CAAC,EAAO,EAAQ,CAAM,CAAC,CAAC,CAAE,CAAC,SAAS,EAAS,CAAC,QAAM,QAAM,SAAO,SAAO,WAAS,YAAU,WAAS,cAAY,OAAK,cAAY,YAAU,aAAW,qBAAmB,OAAK,CAAC,OAAoB,EAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,OAAO,cAAc,SAAS,MAAI,WAAW,QAAQ,EAAE,SAAS,CAAc,EAAK,EAAe,CAAC,IAAI,EAAe,WAAgB,SAAc,SAAgB,WAAmB,YAAsB,cAAiB,OAAiB,aAAW,CAAC,EAAe,EAAK,OAAO,CAAC,MAAM,CAAC,SAAS,GAAW,UAAU,GAAG,WAAW,GAAW,YAAY,IAAI,WAAW,GAAW,YAAY,QAAQ,UAAU,GAAW,WAAW,SAAS,MAAM,EAAW,WAAW,IAAI,UAAU,SAAS,cAAc,CAAkB,EAAE,SAAS,CAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAG7xE,SAAwB,EAAa,CAAC,QAAM,WAAS,YAAU,gBAAc,OAAK,cAAY,YAAU,aAAW,qBAAmB,UAAQ,YAAU,SAAO,eAAa,UAAQ,eAAa,aAAW,eAAa,gBAAc,cAAY,aAAW,gBAAc,CAAC,IAAM,EAAIA,EAAO,IAAI,EAAO,CAAC,EAAQ,GAAYD,EAAS,EAAK,EAAO,CAAC,EAAU,GAAcA,EAAS,CAAY,EAAQ,EAAS,GAAM,UAAU,GAAS,EAAW,GAAM,YAAY,IAAU,EAAW,GAAM,YAAY,QAAq1B,OAA70B,MAAc,CAA4a,SAAS,MAAM,MAAM,SAA5a,CAAC,IAAM,EAAI,KAAK,IAAI,EAAa,GAAG,EAAM,IAAI,GAAM,CAAC,IAAM,EAAY,EAAU,EAAK,MAAM,eAAe,QAAQ,CAAC,sBAAsB,EAAK,UAAU,EAAE,sBAAsB,EAAK,UAAU,CAAC,CAAC,EAAE,OAAO,EAAK,KAAK,CAAC,CAAC,QAAQ,EAAK,UAAU,CAAC,EAAQ,EAAS,GAAG,EAAK,QAAQ,KAAK,IAAc,EAAK,QAAQ,KAAK,OAAO,KAAK,KAAK,EAAY,EAAS,EAAS,EAAW,CAAU,CAAC,EAAE,EAAG,CAAC,CAAC,EAAE,EAAa,CAAG,CAAE,CAAqC,CAAE,EAAE,CAAC,EAAM,EAAS,EAAW,EAAW,EAAU,CAAY,CAAC,EAAE,MAAc,CAAC,GAAG,CAAC,EAAc,CAAC,EAAW,EAAI,EAAE,MAAO,CAAC,IAAM,EAAG,EAAI,QAAQ,GAAG,CAAC,EAAG,OAAO,IAAM,EAAS,IAAI,sBAAsB,CAAC,KAAS,CAAI,EAAM,iBAAgB,EAAW,EAAI,EAAE,EAAS,WAAW,EAAG,EAAE,CAAC,UAAU,EAAE,CAAC,EAAuB,OAArB,EAAS,QAAQ,CAAE,MAAY,EAAS,WAAW,CAAE,EAAE,CAAC,CAAa,CAAC,EAAsB,EAAK,MAAM,CAAK,MAAI,MAAM,CAAC,QAAQ,OAAO,SAAS,OAAO,eAAe,SAAS,YAAU,SAAO,MAAM,OAAO,aAAW,eAAa,gBAAc,cAAY,aAAW,eAAa,UAAU,YAAY,EAAE,SAAS,EAAM,KAAK,EAAK,IAAiB,EAAM,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,QAAQ,OAAO,eAAe,SAAS,WAAW,SAAS,MAAM,EAAU,WAAW,CAAC,EAAE,SAAS,CAAC,GAAS,EAAE,GAAgB,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,KAAK,EAAE,IAAI,MAAM,OAAO,MAAM,MAAM,EAAE,WAAW,CAAY,CAAC,CAAC,EAAe,EAAK,EAAS,CAAC,MAAM,EAAK,MAAM,MAAM,EAAK,MAAM,OAAO,EAAK,QAAQ,GAAG,OAAO,EAAK,QAAQ,GAAG,SAAS,EAAK,UAAU,EAAY,YAAmB,WAAS,YAAY,EAAa,OAAiB,cAAsB,YAAqB,aAA8B,qBAAmB,IAAI,CAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,iBAHrnE,IAAoD,IAA6C,EAGqhE,EAAa,aAAa,CAAC,SAAS,EAAE,UAAU,GAAK,cAAc,GAAK,KAAK,CAAC,SAAS,GAAG,WAAW,IAAI,WAAW,OAAO,EAAE,YAAY,UAAU,UAAU,CAAC,SAAS,GAAG,WAAW,IAAI,WAAW,OAAO,EAAE,WAAW,UAAU,mBAAmB,OAAO,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,aAAa,IAAI,QAAQ,GAAM,aAAa,UAAU,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,cAAc,aAAa,EAAE,MAAM,CAAC,CAAC,MAAM,IAAI,MAAM,kBAAkB,OAAO,GAAG,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,aAAa,OAAO,GAAG,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,MAAM,mBAAmB,OAAO,GAAG,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,MAAM,iBAAiB,OAAO,KAAK,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAoB,EAAa,CAAC,MAAM,CAAC,KAAK,EAAY,MAAM,MAAM,QAAQ,QAAQ,CAAC,KAAK,EAAY,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,aAAa,GAAG,EAAE,MAAM,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,aAAa,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,GAAG,YAAY,KAAK,EAAE,OAAO,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,IAAI,YAAY,OAAO,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,aAAa,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,KAAK,EAAY,QAAQ,MAAM,UAAU,aAAa,GAAK,aAAa,YAAY,cAAc,SAAS,EAAE,UAAU,CAAC,KAAK,EAAY,QAAQ,MAAM,kBAAkB,aAAa,EAAI,EAAE,KAAK,CAAC,KAAK,EAAY,KAAK,MAAM,cAAc,SAAS,UAAU,EAAE,YAAY,CAAC,KAAK,EAAY,MAAM,MAAM,eAAe,aAAa,SAAS,EAAE,UAAU,CAAC,KAAK,EAAY,KAAK,MAAM,aAAa,SAAS,UAAU,EAAE,WAAW,CAAC,KAAK,EAAY,MAAM,MAAM,cAAc,aAAa,SAAS,EAAE,mBAAmB,CAAC,KAAK,EAAY,KAAK,MAAM,aAAa,aAAa,OAAO,QAAQ,CAAC,OAAO,YAAY,YAAY,YAAY,EAAE,aAAa,CAAC,OAAO,YAAY,YAAY,YAAY,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,mBAAmB,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,aAAa,GAAG,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,EAAY,OAAO,MAAM,UAAU,aAAa,GAAG,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,iBAAiB,aAAa,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAY,QAAQ,MAAM,UAAU,aAAa,EAAK,EAAE,aAAa,CAAC,KAAK,EAAY,MAAM,MAAM,gBAAgB,aAAa,SAAS,EAAE,WAAW,CAAC,KAAK,EAAY,YAAY,MAAM,UAAU,UAAU,iBAAiB,aAAa,CAAC,MAAM,UAAU,EAAE,UAAU,CAAC,aAAa,eAAe,gBAAgB,aAAa,EAAE,YAAY,CAAC,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,WAAW,CAAC,KAAK,EAAY,MAAM,MAAM,aAAa,aAAa,aAAa,EAAE,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC"}