{"version":3,"file":"SynchronizedCounter.Bp4ORsei.mjs","names":["useState","useRef"],"sources":["https:/framerusercontent.com/modules/vikyvqe59VAZj4yHPqMZ/5ujMQ9PqmR46jLoJLn6E/EKK4gZCOL.js","https:/framerusercontent.com/modules/LRf8Mp5V2BqQ8BIsYsk3/coCNX8RDWzbXX43U9aZw/SynchronizedCounter.js"],"sourcesContent":["// Generated by Framer (13ebf9e)\nimport{fontStore}from\"framer\";fontStore.loadFonts([\"Arial\"]);export const fonts=[{explicitInter:true,fonts:[]}];export const css=[\".framer-5HG2w .framer-styles-preset-1sjlsrc:not(.rich-text-wrapper), .framer-5HG2w .framer-styles-preset-1sjlsrc.rich-text-wrapper h3 { --framer-font-family: \\\"Arial\\\", \\\"Arial Placeholder\\\", sans-serif; --framer-font-open-type-features: 'blwf' on, 'cv09' on, 'cv03' on, 'cv04' on, 'cv11' on; --framer-font-size: 21px; --framer-font-style: normal; --framer-font-variation-axes: normal; --framer-font-weight: 400; --framer-letter-spacing: -0.05em; --framer-line-height: 140%; --framer-paragraph-spacing: 40px; --framer-text-alignment: start; --framer-text-color: var(--token-2007957d-a074-4c0c-8a33-8d85ed1ba0fd, #000000); --framer-text-decoration: none; --framer-text-stroke-color: initial; --framer-text-stroke-width: initial; --framer-text-transform: none; }\"];export const className=\"framer-5HG2w\";\nexport const __FramerMetadata__ = {\"exports\":{\"className\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"css\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"fonts\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{startTransition,useEffect,useRef,useState}from\"react\";import{motion}from\"framer-motion\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";const GROUPS=new WeakMap;function findGroupRoot(root){let node=root.parentElement;let fallback=root.parentElement??root;while(node){const count=node.querySelectorAll(\"[data-synchronized-counter]\").length;if(count>1)return node;fallback=node;node=node.parentElement;}return fallback;}function createGroup(root){return{root,members:new Map,observer:null,wasVisible:false,started:false,epoch:null,runId:0,rafId:0};}function startGroupRun(group,replay){if(typeof window===\"undefined\")return;if(group.rafId)window.cancelAnimationFrame(group.rafId);group.rafId=window.requestAnimationFrame(timestamp=>{group.started=true;group.epoch=timestamp;group.runId+=1;group.members.forEach(member=>member.onRun({epoch:timestamp,runId:group.runId,replay}));});}function ensureObserver(group){if(typeof window===\"undefined\"||group.observer)return;const observer=new IntersectionObserver(([entry])=>{const visible=entry.isIntersecting&&entry.intersectionRatio>0;if(visible&&!group.wasVisible){if(!group.started){startGroupRun(group,false);}else{const hasReplayMember=Array.from(group.members.values()).some(member=>member.restartOnViewport);if(hasReplayMember)startGroupRun(group,true);}}group.wasVisible=visible;},{threshold:[0,.01]});observer.observe(group.root);group.observer=observer;}function registerMember(member){const groupRoot=findGroupRoot(member.root);const group=GROUPS.get(groupRoot)??createGroup(groupRoot);GROUPS.set(groupRoot,group);group.members.set(member.id,member);if(member.startOnViewport){ensureObserver(group);}else if(!group.started){startGroupRun(group,false);}if(group.epoch!==null){member.onRun({epoch:group.epoch,runId:group.runId,replay:false});}return()=>{group.members.delete(member.id);if(group.members.size===0){if(group.observer)group.observer.disconnect();if(group.rafId&&typeof window!==\"undefined\"){window.cancelAnimationFrame(group.rafId);}GROUPS.delete(groupRoot);}};}function interpolateValue(start,end,progress,incrementType){const clampedProgress=Math.max(0,Math.min(1,progress));const raw=start+(end-start)*clampedProgress;if(clampedProgress>=1)return end;if(incrementType===\"integer\"){const rounded=Math.round(raw);if(end>=start){const maxBeforeEnd=Number.isInteger(end)?end-1:Math.ceil(end)-1;return Math.min(rounded,maxBeforeEnd);}const minBeforeEnd=Number.isInteger(end)?end+1:Math.floor(end)+1;return Math.max(rounded,minBeforeEnd);}return parseFloat(raw.toFixed(2));}function useSynchronizedCounter({rootRef,start,end,startOnViewport,restartOnViewport,incrementType,durationMs=2500}){const[count,setCount]=useState(start);const rafRef=useRef(0);const startedRunRef=useRef(null);const prefersReducedMotionRef=useRef(false);useEffect(()=>{if(typeof window===\"undefined\")return;prefersReducedMotionRef.current=window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;},[]);useEffect(()=>{startTransition(()=>setCount(start));startedRunRef.current=null;},[start,end,incrementType]);useEffect(()=>{if(typeof window===\"undefined\")return;const root=rootRef.current;if(!root)return;const isCanvas=RenderTarget.current()===RenderTarget.canvas;if(isCanvas||prefersReducedMotionRef.current||start===end){startTransition(()=>setCount(end));return;}const memberId=Symbol(\"counter-member\");const stop=registerMember({id:memberId,root,startOnViewport,restartOnViewport,onRun:({epoch,runId,replay})=>{if(replay&&!restartOnViewport)return;if(startedRunRef.current===runId)return;startedRunRef.current=runId;if(rafRef.current)window.cancelAnimationFrame(rafRef.current);const tick=()=>{const elapsed=performance.now()-epoch;const progress=durationMs<=0?1:Math.max(0,Math.min(1,elapsed/durationMs));const next=interpolateValue(start,end,progress,incrementType);startTransition(()=>setCount(next));if(progress<1){rafRef.current=window.requestAnimationFrame(tick);}};if(replay)startTransition(()=>setCount(start));tick();}});return()=>{if(rafRef.current)window.cancelAnimationFrame(rafRef.current);stop();};},[rootRef,start,end,startOnViewport,restartOnViewport,incrementType,durationMs]);return count;}/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n */export default function SynchronizedCounter({style,start=0,end=509,speed=100,gapSize=4,prefixText=\"\",suffixText=\"\",prefixFont,suffixFont,prefixColor,suffixColor,loop=false,decimalSeparatorType=\"comma\",textSize=36,selectedFont={fontFamily:\"Inter\",fontWeight:500,systemFont:true},textColor=\"#D3D3D3\",startOnViewport=false,restartOnViewport=false,incrementType=\"integer\"}){const containerRef=useRef(null);const count=useSynchronizedCounter({rootRef:containerRef,start,end,startOnViewport,restartOnViewport,incrementType:incrementType===\"decimal\"?\"decimal\":\"integer\",durationMs:2500});const formatNumber=number=>{if(decimalSeparatorType===\"comma\")return number.toLocaleString(\"en-US\");if(decimalSeparatorType===\"period\")return number.toLocaleString(\"en-US\").replace(/,/g,\".\");return incrementType===\"integer\"?String(number):number.toFixed(1);};return /*#__PURE__*/_jsxs(motion.div,{ref:containerRef,\"data-synchronized-counter\":\"true\",style:{...style,...selectedFont,display:\"flex\",gap:`${gapSize}px`,alignItems:\"center\",fontSize:`${textSize}px`,color:textColor,letterSpacing:\"-0.07em\"},children:[prefixText&&/*#__PURE__*/_jsx(\"span\",{style:{fontFamily:prefixFont?.fontFamily,fontWeight:prefixFont?.fontWeight,color:prefixColor},children:prefixText}),/*#__PURE__*/_jsx(\"span\",{children:formatNumber(count)}),suffixText&&/*#__PURE__*/_jsx(\"span\",{style:{fontFamily:suffixFont?.fontFamily,fontWeight:suffixFont?.fontWeight,color:suffixColor},children:suffixText})]});}addPropertyControls(SynchronizedCounter,{startOnViewport:{type:ControlType.Boolean,title:\"Viewport\",defaultValue:false},restartOnViewport:{type:ControlType.Boolean,title:\"Replay\",defaultValue:false},selectedFont:{title:\"Font\",type:ControlType.Font,defaultValue:{variant:\"Medium\"}},textSize:{title:\"Font Size\",type:ControlType.Number,min:8,max:240,step:1},textColor:{type:ControlType.Color,title:\"Font Color\"},start:{type:ControlType.Number,title:\"Start Number\",defaultValue:0},end:{type:ControlType.Number,title:\"End Number\",defaultValue:509},decimalSeparatorType:{type:ControlType.Enum,title:\"Separator\",defaultValue:\"comma\",options:[\"comma\",\"period\",\"none\"]},incrementType:{type:ControlType.Enum,title:\"Increment Type\",defaultValue:\"integer\",options:[\"integer\",\"decimal\"]},prefixText:{type:ControlType.String,title:\"Prefix\",defaultValue:\"\"},prefixFont:{title:\"Prefix Font\",type:ControlType.Font},prefixColor:{type:ControlType.Color,title:\"Prefix Color\"},suffixText:{type:ControlType.String,title:\"Suffix\",defaultValue:\"\"},suffixFont:{title:\"Suffix Font\",type:ControlType.Font},suffixColor:{type:ControlType.Color,title:\"Suffix Color\"},gapSize:{type:ControlType.Number,title:\"Gap Size\",defaultValue:4,min:0,max:100},speed:{type:ControlType.Number,title:\"Speed (ms)\",defaultValue:100,min:0,max:2e3},loop:{type:ControlType.Boolean,title:\"Loop Animation\",defaultValue:false}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"SynchronizedCounter\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SynchronizedCounter.map"],"mappings":"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"}