{"version":3,"file":"Counter_FX.D9gnLL7T.mjs","names":["React.useRef","React.useState","p"],"sources":["https:/framerusercontent.com/modules/OTKb2WGL7lHchRnLPYTs/Qe2BYIrLWBkid46ZU96p/Counter_FX.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType}from\"framer\";import{motion}from\"framer-motion\";/* ---------- FONT SIZE HELPER ---------- */function parseFontSize(font){if(!font?.fontSize)return 60;const raw=font.fontSize;if(typeof raw===\"number\")return raw;return parseFloat(String(raw))||60;}export default function CounterFX(props){const{from,to,duration,easing,decimals,prefix,suffix,showThousandSep,tint,font,fontSize:fontSizeProp,triggerMode,sectionName,htmlTag}=props;const Tag=htmlTag||\"div\";const containerRef=React.useRef(null);const[started,setStarted]=React.useState(false);const[scrollProgress,setScrollProgress]=React.useState(0);const isCountingUp=to>=from;const isScrollMode=triggerMode===\"onScroll\";/* ---------- FONT SIZE (OVERRIDE + RESPONSIVE) ---------- */const baseFontSize=fontSizeProp||parseFontSize(font);const[fontSize,setFontSize]=React.useState(baseFontSize);React.useEffect(()=>{const handleResize=()=>{const responsive=window.innerWidth<768?baseFontSize*.7:baseFontSize;setFontSize(responsive);};handleResize();window.addEventListener(\"resize\",handleResize);return()=>window.removeEventListener(\"resize\",handleResize);},[baseFontSize]);const fontStyles={...font||{},fontSize:fontSize};/* ---------- RESET ---------- */React.useEffect(()=>{setStarted(false);setScrollProgress(0);},[from,to,duration,easing,decimals]);/* ---------- TRIGGERS ---------- */React.useEffect(()=>{const el=containerRef.current;if(!el||isScrollMode)return;const trigger=()=>{setStarted(false);requestAnimationFrame(()=>setStarted(true));};if(triggerMode===\"onAppear\"){trigger();return;}let target=el;if(triggerMode===\"sectionInView\"&&sectionName){const id=sectionName.replace(/^#/,\"\").trim();target=document.getElementById(id)||el;}const observer=new IntersectionObserver(([entry])=>{if(entry.isIntersecting){trigger();observer.disconnect();}},{threshold:.2});observer.observe(target);return()=>observer.disconnect();},[triggerMode,sectionName,isScrollMode,from,to]);/* ---------- SCROLL MODE ---------- */React.useEffect(()=>{if(!isScrollMode)return;const el=containerRef.current;if(!el)return;const onScroll=()=>{const rect=el.getBoundingClientRect();const vh=window.innerHeight;const progress=(vh-rect.top)/(vh+rect.height);setScrollProgress(Math.min(1,Math.max(0,progress)));};window.addEventListener(\"scroll\",onScroll,{passive:true});onScroll();return()=>window.removeEventListener(\"scroll\",onScroll);},[isScrollMode]);/* ---------- BUILD DIGITS ---------- */const layout=buildOdometerLayout(from,to,decimals,showThousandSep);const digitEntries=layout.filter(e=>e.type===\"digit\");const sequences=digitEntries.map(d=>getDigitSequence(d.fromDigit,d.toDigit,isCountingUp));const digitHeight=fontSize*1.2;const digitWidth=fontSize*.62;let digitIdx=0;return /*#__PURE__*/_jsxs(Tag,{ref:containerRef,style:{display:\"inline-flex\",alignItems:\"center\",...fontStyles,color:tint,fontVariantNumeric:\"tabular-nums\"},children:[prefix&&/*#__PURE__*/_jsx(\"span\",{style:{marginRight:fontSize*.08},children:prefix}),/*#__PURE__*/_jsx(\"span\",{style:{display:\"inline-flex\"},children:layout.map((entry,i)=>{if(entry.type===\"sep\"){return /*#__PURE__*/_jsx(\"span\",{style:{opacity:entry.char===\",\"?.4:1},children:entry.char},i);}const idx=digitIdx++;return /*#__PURE__*/_jsx(OdometerWheel,{sequence:sequences[idx],started:started,scrollProgress:scrollProgress,isScrollMode:isScrollMode,digitHeight:digitHeight,digitWidth:digitWidth,tint:tint,easing:easing,duration:duration},i);})}),suffix&&/*#__PURE__*/_jsx(\"span\",{style:{marginLeft:fontSize*.08},children:suffix})]});}/* ---------- WHEEL ---------- */const EASING_MAP={linear:\"linear\",smooth:[0,0,.2,1],spring:[.34,1.56,.64,1],bounce:[.22,1.8,.5,1]};function OdometerWheel({sequence,started,scrollProgress,isScrollMode,digitHeight,digitWidth,tint,easing,duration}){const endY=-(sequence.length-1)*digitHeight;const y=isScrollMode?scrollProgress*endY:started?endY:0;const transition=isScrollMode?{duration:.08,ease:\"linear\"}:{duration,ease:EASING_MAP[easing]||EASING_MAP.smooth};return /*#__PURE__*/_jsx(\"div\",{style:{height:digitHeight,width:digitWidth,overflow:\"hidden\",display:\"flex\",justifyContent:\"center\",maskImage:\"linear-gradient(to bottom, transparent 0%, black 18%, black 82%, transparent 100%)\"},children:/*#__PURE__*/_jsx(motion.div,{animate:{y},transition:transition,children:sequence.map((digit,i)=>/*#__PURE__*/_jsx(\"div\",{style:{height:digitHeight,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",color:tint},children:digit},i))})});}/* ---------- HELPERS ---------- */function getDigitSequence(fromDigit,toDigit,up){if(fromDigit===toDigit)return[fromDigit];const seq=[];if(up){if(toDigit>=fromDigit){for(let i=fromDigit;i<=toDigit;i++)seq.push(i);}else{for(let i=fromDigit;i<=9;i++)seq.push(i);for(let i=0;i<=toDigit;i++)seq.push(i);}}else{if(toDigit<=fromDigit){for(let i=fromDigit;i>=toDigit;i--)seq.push(i);}else{for(let i=fromDigit;i>=0;i--)seq.push(i);for(let i=9;i>=toDigit;i--)seq.push(i);}}return seq;}function buildOdometerLayout(from,to,decimals,sep){const a=Math.abs(from).toFixed(decimals);const b=Math.abs(to).toFixed(decimals);const[ai,ad]=a.split(\".\");const[bi,bd]=b.split(\".\");const max=Math.max(ai.length,bi.length);const padA=ai.padStart(max,\"0\");const padB=bi.padStart(max,\"0\");const res=[];const formatted=sep?padB.replace(/\\B(?=(\\d{3})+(?!\\d))/g,\",\"):padB;let di=0;for(const ch of formatted){if(ch===\",\"){res.push({type:\"sep\",char:\",\"});}else{res.push({type:\"digit\",fromDigit:+padA[di],toDigit:+padB[di]});di++;}}if(ad){res.push({type:\"sep\",char:\".\"});for(let i=0;i<ad.length;i++){res.push({type:\"digit\",fromDigit:+ad[i],toDigit:+bd[i]});}}return res;}/* ---------- CONTROLS ---------- */addPropertyControls(CounterFX,{from:{type:ControlType.Number,title:\"From\",defaultValue:0},to:{type:ControlType.Number,title:\"To\",defaultValue:1e3},duration:{type:ControlType.Number,title:\"Duration\",defaultValue:2,hidden:p=>p.triggerMode===\"onScroll\"},easing:{type:ControlType.Enum,title:\"Easing\",options:[\"linear\",\"smooth\",\"spring\",\"bounce\"],defaultValue:\"smooth\",hidden:p=>p.triggerMode===\"onScroll\"},triggerMode:{type:ControlType.Enum,title:\"Trigger\",options:[\"onAppear\",\"onScroll\",\"layerInView\",\"sectionInView\"],defaultValue:\"layerInView\"},sectionName:{type:ControlType.String,title:\"Section\",hidden:p=>p.triggerMode!==\"sectionInView\"},decimals:{type:ControlType.Number,title:\"Decimals\",defaultValue:0},prefix:{type:ControlType.String,title:\"Prefix\"},suffix:{type:ControlType.String,title:\"Suffix\"},showThousandSep:{type:ControlType.Boolean,title:\"Thousands\",defaultValue:true},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\"},fontSize:{type:ControlType.Number,title:\"Font Size\",defaultValue:60},tint:{type:ControlType.Color,title:\"Color\",defaultValue:\"#FFFFFF\"},htmlTag:{type:ControlType.Enum,title:\"Tag\",options:[\"h1\",\"h2\",\"h3\",\"p\",\"div\",\"span\"],defaultValue:\"div\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CounterFX\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Counter_FX.map"],"mappings":"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"}