{"version":3,"file":"Counter.DbInh6QV.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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"}