{"version":3,"file":"Counter.DXIGVThP.mjs","names":["useState","useRef","useCallback"],"sources":["https:/framerusercontent.com/modules/uprimSSSwhNnvTi3nNzv/wjMmyVFN3znEErKmASQi/Counter.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useEffect,useRef,useState,useCallback}from\"react\";export function CounterAnimation({target=18e3,duration=2e3,suffix=\"+\",separator=\",\",fontFamily=\"Inter, sans-serif\",fontSize=48,color=\"#000000\",letterSpacing=0,fontWeight=400,lineHeight=1,style,delay=0}){const[count,setCount]=useState(0);const[inView,setInView]=useState(false);const hasPlayedRef=useRef(false)// ← track apakah sudah pernah jalan\n;const rafRef=useRef(null);const observerRef=useRef(null);const setRef=useCallback(node=>{if(observerRef.current){observerRef.current.disconnect();observerRef.current=null;}if(!node)return;const observer=new IntersectionObserver(([entry])=>{if(entry.isIntersecting&&!hasPlayedRef.current){// Hanya trigger jika belum pernah jalan\nsetInView(true);}// Tidak ada reset saat keluar viewport\n},{threshold:.3});observer.observe(node);observerRef.current=observer;},[]);// Cleanup saat unmount\nuseEffect(()=>{return()=>{if(observerRef.current)observerRef.current.disconnect();if(rafRef.current)cancelAnimationFrame(rafRef.current);};},[]);// Reset saat props berubah — boleh main lagi\nuseEffect(()=>{if(rafRef.current)cancelAnimationFrame(rafRef.current);hasPlayedRef.current=false;setCount(0);setInView(false);},[target,duration]);// Animasi counter\nuseEffect(()=>{if(!inView)return;if(rafRef.current)cancelAnimationFrame(rafRef.current);const timeoutId=setTimeout(()=>{const startTime=performance.now();const animate=now=>{const elapsed=now-startTime;const progress=Math.min(elapsed/duration,1);const eased=progress===1?1:1-Math.pow(2,-10*progress);setCount(Math.round(eased*target));if(progress<1){rafRef.current=requestAnimationFrame(animate);}else{// Animasi selesai — tandai sudah pernah jalan\nhasPlayedRef.current=true;}};rafRef.current=requestAnimationFrame(animate);},delay);return()=>{clearTimeout(timeoutId);if(rafRef.current)cancelAnimationFrame(rafRef.current);};},[inView,target,duration,delay]);const formatNumber=n=>{if(!separator)return String(n);return n.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g,separator);};const formatted=formatNumber(count)+(count>=target?suffix:\"\");return /*#__PURE__*/_jsx(\"div\",{ref:setRef,style:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\",width:\"100%\",height:\"100%\",...style},children:/*#__PURE__*/_jsx(\"span\",{style:{fontFamily,fontSize,color,letterSpacing,fontWeight,lineHeight},children:formatted})});}addPropertyControls(CounterAnimation,{target:{type:ControlType.Number,title:\"Target\",defaultValue:18e3,min:0,max:1e7,step:1,displayStepper:true},duration:{type:ControlType.Number,title:\"Duration (ms)\",defaultValue:2e3,min:200,max:1e4,step:100,displayStepper:true},delay:{type:ControlType.Number,title:\"Delay (ms)\",defaultValue:0,min:0,max:5e3,step:50,displayStepper:true},suffix:{type:ControlType.String,title:\"Suffix\",defaultValue:\"+\"},separator:{type:ControlType.String,title:\"Separator\",defaultValue:\",\"},fontFamily:{type:ControlType.String,title:\"Font\",defaultValue:\"Inter, sans-serif\",placeholder:\"Inter, sans-serif\"},fontSize:{type:ControlType.Number,title:\"Font Size\",defaultValue:48,min:8,max:300,step:1,displayStepper:true},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\"},letterSpacing:{type:ControlType.Number,title:\"Letter Spacing\",defaultValue:0,min:-10,max:50,step:.1,displayStepper:true,unit:\"px\"},fontWeight:{type:ControlType.Enum,title:\"Weight\",defaultValue:\"400\",options:[\"100\",\"200\",\"300\",\"400\",\"500\",\"600\",\"700\",\"800\",\"900\"],optionTitles:[\"Thin 100\",\"ExtraLight 200\",\"Light 300\",\"Regular 400\",\"Medium 500\",\"SemiBold 600\",\"Bold 700\",\"ExtraBold 800\",\"Black 900\"]},lineHeight:{type:ControlType.Number,title:\"Line Height\",defaultValue:1,min:.5,max:5,step:.05,displayStepper:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"CounterAnimation\":{\"type\":\"reactComponent\",\"name\":\"CounterAnimation\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Counter.map"],"mappings":"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"}