{"version":3,"file":"CountUpStats.pAHmOOpt.mjs","names":["useState","_Fragment","useRef"],"sources":["https:/framerusercontent.com/modules/yclDgyoZcYHREBopGUR4/UKe8R8b3v50YOQg2H2eH/CountUpStats.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useEffect,useRef,useState}from\"react\";import{addPropertyControls,ControlType}from\"framer\";function CountUp({value,prefix,suffix,noComma,duration,start}){const[display,setDisplay]=useState(0);useEffect(()=>{if(!start)return;let raf=0;const t0=performance.now();const tick=now=>{const p=Math.min(1,(now-t0)/duration);const eased=1-Math.pow(1-p,3)// easeOutCubic\n;setDisplay(Math.round(value*eased));if(p<1)raf=requestAnimationFrame(tick);};raf=requestAnimationFrame(tick);return()=>cancelAnimationFrame(raf);},[start,value,duration]);const text=noComma?String(display):display.toLocaleString(\"en-US\");return /*#__PURE__*/_jsxs(_Fragment,{children:[prefix,text,suffix]});}export default function CountUpStats(props){const{orientation,duration,numberColor,labelColor,dividerColor}=props;// Build the ledger from the flat Stat fields. A stat shows only when its\n// Label is non-empty, so unused slots (e.g. Stat 4) stay hidden until you\n// fill them in.\nconst stats=[{value:props.stat1Value,prefix:props.stat1Prefix,suffix:props.stat1Suffix,label:props.stat1Label,noComma:props.stat1NoComma},{value:props.stat2Value,prefix:props.stat2Prefix,suffix:props.stat2Suffix,label:props.stat2Label,noComma:props.stat2NoComma},{value:props.stat3Value,prefix:props.stat3Prefix,suffix:props.stat3Suffix,label:props.stat3Label,noComma:props.stat3NoComma},{value:props.stat4Value,prefix:props.stat4Prefix,suffix:props.stat4Suffix,label:props.stat4Label,noComma:props.stat4NoComma}].filter(s=>(s.label||\"\").trim()!==\"\");const ref=useRef(null);const[inView,setInView]=useState(false);// Measure the component's OWN width, not the browser viewport — a\n// scaled 2K monitor reports a viewport in the 810-1359 range and used\n// to wrongly trigger the \"tablet\" shrink. Initialize wide so the first\n// paint is the desktop size, then correct on mount.\nconst[cw,setCw]=useState(400);const[vw,setVw]=useState(typeof window!==\"undefined\"?window.innerWidth:1200);useEffect(()=>{const el=ref.current;if(!el)return;const obs=new IntersectionObserver(entries=>{if(entries[0]?.isIntersecting){setInView(true);obs.disconnect();}},{threshold:.35});obs.observe(el);return()=>obs.disconnect();},[]);useEffect(()=>{const el=ref.current;if(!el||typeof ResizeObserver===\"undefined\")return;const ro=new ResizeObserver(entries=>{const w=entries[0]?.contentRect?.width;if(w)setCw(w);});ro.observe(el);return()=>ro.disconnect();},[]);useEffect(()=>{if(typeof window===\"undefined\")return;const onR=()=>setVw(window.innerWidth);window.addEventListener(\"resize\",onR);return()=>window.removeEventListener(\"resize\",onR);},[]);const horizontal=orientation===\"horizontal\";// Desktop vs tablet is decided by how much room the component ACTUALLY\n// has (container width), so a fixed-width column always renders at its\n// intended size. Phone stays viewport-driven — real phones are < 810.\nconst isPhone=vw<810;const tabletCutoff=horizontal?560:300;const isTablet=!isPhone&&cw<tabletCutoff;// Aggressive shrink on tablet/phone — desktop unchanged\nconst numberSize=horizontal?isPhone?18:isTablet?22:38:isPhone?18:isTablet?24:46;const labelSize=horizontal?isPhone?11:isTablet?12:14:isPhone?11:isTablet?12:15;const hPad=isPhone?10:isTablet?14:28;const vPad=isPhone?10:isTablet?12:26;return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{width:\"100%\",display:\"flex\",flexDirection:horizontal?\"row\":\"column\",alignItems:\"stretch\",WebkitFontSmoothing:\"antialiased\"},children:stats.map((s,i)=>{const first=i===0;const last=i===stats.length-1;return /*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:horizontal?6:4,flex:horizontal?\"1 1 0\":undefined,minWidth:horizontal?0:undefined,justifyContent:\"flex-start\",padding:horizontal?`0 ${last?0:hPad}px 0 ${first?0:hPad}px`:first?`0 0 ${vPad}px`:`${vPad}px 0`,borderTop:!horizontal&&!first?`1px solid ${dividerColor}`:\"none\",borderLeft:horizontal&&!first?`1px solid ${dividerColor}`:\"none\"},children:[/*#__PURE__*/_jsx(\"span\",{style:{fontFamily:\"'Manrope', sans-serif\",fontWeight:700,fontSize:numberSize,lineHeight:1.05,letterSpacing:\"-0.03em\",color:numberColor,fontVariantNumeric:\"tabular-nums\",whiteSpace:\"nowrap\"},children:/*#__PURE__*/_jsx(CountUp,{value:s.value,prefix:s.prefix,suffix:s.suffix,noComma:s.noComma,duration:duration,start:inView})}),/*#__PURE__*/_jsx(\"span\",{style:{fontFamily:\"'Inter', sans-serif\",fontWeight:400,fontSize:labelSize,lineHeight:1.5,color:labelColor},children:s.label})]},i);})});}CountUpStats.defaultProps={stat1Value:2e5,stat1Prefix:\"\",stat1Suffix:\"+\",stat1Label:\"lbs of e-waste diverted from landfills\",stat1NoComma:false,stat2Value:150,stat2Prefix:\"\",stat2Suffix:\"+\",stat2Label:\"organizations served\",stat2NoComma:false,stat3Value:2018,stat3Prefix:\"\",stat3Suffix:\"\",stat3Label:\"operating since\",stat3NoComma:true,stat4Value:0,stat4Prefix:\"\",stat4Suffix:\"\",stat4Label:\"\",stat4NoComma:false,orientation:\"vertical\",duration:1900,numberColor:\"rgb(27,27,27)\",labelColor:\"rgb(85,85,85)\",dividerColor:\"rgba(0,0,0,0.12)\"};addPropertyControls(CountUpStats,{// ── Stat 1 ──────────────────────────────────────────────\nstat1Value:{type:ControlType.Number,title:\"1 \\xb7 Value\",defaultValue:2e5,displayStepper:false},stat1Label:{type:ControlType.String,title:\"1 \\xb7 Label\",defaultValue:\"lbs of e-waste diverted from landfills\"},stat1Suffix:{type:ControlType.String,title:\"1 \\xb7 Suffix\",defaultValue:\"+\"},stat1Prefix:{type:ControlType.String,title:\"1 \\xb7 Prefix\",defaultValue:\"\"},stat1NoComma:{type:ControlType.Boolean,title:\"1 \\xb7 Format\",enabledTitle:\"Plain\",disabledTitle:\"1,000s\",defaultValue:false},// ── Stat 2 ──────────────────────────────────────────────\nstat2Value:{type:ControlType.Number,title:\"2 \\xb7 Value\",defaultValue:150,displayStepper:false},stat2Label:{type:ControlType.String,title:\"2 \\xb7 Label\",defaultValue:\"organizations served\"},stat2Suffix:{type:ControlType.String,title:\"2 \\xb7 Suffix\",defaultValue:\"+\"},stat2Prefix:{type:ControlType.String,title:\"2 \\xb7 Prefix\",defaultValue:\"\"},stat2NoComma:{type:ControlType.Boolean,title:\"2 \\xb7 Format\",enabledTitle:\"Plain\",disabledTitle:\"1,000s\",defaultValue:false},// ── Stat 3 ──────────────────────────────────────────────\nstat3Value:{type:ControlType.Number,title:\"3 \\xb7 Value\",defaultValue:2018,displayStepper:false},stat3Label:{type:ControlType.String,title:\"3 \\xb7 Label\",defaultValue:\"operating since\"},stat3Suffix:{type:ControlType.String,title:\"3 \\xb7 Suffix\",defaultValue:\"\"},stat3Prefix:{type:ControlType.String,title:\"3 \\xb7 Prefix\",defaultValue:\"\"},stat3NoComma:{type:ControlType.Boolean,title:\"3 \\xb7 Format\",enabledTitle:\"Plain\",disabledTitle:\"1,000s\",defaultValue:true},// ── Stat 4 (optional — hidden until you give it a Label) ─\nstat4Value:{type:ControlType.Number,title:\"4 \\xb7 Value\",defaultValue:0,displayStepper:false},stat4Label:{type:ControlType.String,title:\"4 \\xb7 Label\",defaultValue:\"\",placeholder:\"Leave blank to hide\"},stat4Suffix:{type:ControlType.String,title:\"4 \\xb7 Suffix\",defaultValue:\"\"},stat4Prefix:{type:ControlType.String,title:\"4 \\xb7 Prefix\",defaultValue:\"\"},stat4NoComma:{type:ControlType.Boolean,title:\"4 \\xb7 Format\",enabledTitle:\"Plain\",disabledTitle:\"1,000s\",defaultValue:false},// ── Display ─────────────────────────────────────────────\norientation:{type:ControlType.Enum,title:\"Orientation\",options:[\"vertical\",\"horizontal\"],optionTitles:[\"Vertical\",\"Horizontal\"],defaultValue:\"vertical\",displaySegmentedControl:true},duration:{type:ControlType.Number,title:\"Duration\",defaultValue:1900,min:400,max:5e3,unit:\"ms\"},numberColor:{type:ControlType.Color,title:\"Number\",defaultValue:\"rgb(27,27,27)\"},labelColor:{type:ControlType.Color,title:\"Label\",defaultValue:\"rgb(85,85,85)\"},dividerColor:{type:ControlType.Color,title:\"Divider\",defaultValue:\"rgba(0,0,0,0.12)\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CountUpStats\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CountUpStats.map"],"mappings":"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"}