{"version":3,"file":"LoaderCounter.DiaeBjmF.mjs","names":["Children","useRef","useMemo","useState","useCallback","size","clamp","fixedValue","React.useState","React.useRef","p","React.useMemo"],"sources":["https:/framerusercontent.com/modules/B2xAlJLcN0gOnt11mSPw/plhC5PVnCMllW5QXjFK5/Ticker.js","https:/framerusercontent.com/modules/JDri1vuSTjhoyy1niNEI/jsIk2p71EaLx6k4QVQmS/LoaderCounter.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{Children,useLayoutEffect,useEffect,useState,useRef,useMemo,useCallback,cloneElement,startTransition,forwardRef,useImperativeHandle}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useReducedMotion,LayoutGroup,useInView,useMotionValue,useTransform,motion,frame}from\"framer-motion\";import{resize}from\"@motionone/dom\";const MAX_DUPLICATED_ITEMS=100;const directionTransformers={left:offset=>`translateX(-${offset}px)`,right:offset=>`translateX(${offset}px)`,top:offset=>`translateY(-${offset}px)`,bottom:offset=>`translateY(${offset}px)`};/**\n *\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 200\n *\n * @framerDisableUnlink\n *\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n */export default function Ticker(props){/* Props */let{slots=[],gap,padding,paddingPerSide,paddingTop,paddingRight,paddingBottom,paddingLeft,speed,hoverFactor,direction,alignment,sizingOptions,fadeOptions,style}=props;const{fadeContent,overflow,fadeWidth,fadeInset,fadeAlpha}=fadeOptions;const{widthType,heightType}=sizingOptions;const paddingValue=paddingPerSide?`${paddingTop}px ${paddingRight}px ${paddingBottom}px ${paddingLeft}px`:`${padding}px`;/* Checks */const currentTarget=RenderTarget.current();const isCanvas=currentTarget===RenderTarget.canvas||currentTarget===RenderTarget.export;const writingDirection=useWritingDirection();// Remove empty slots (such as hidden layers)\nconst filteredSlots=slots.filter(Boolean);const numChildren=Children.count(filteredSlots);const hasChildren=numChildren>0;const offset=useMotionValue(0);const resolvedDirection=getTickerResolvedDirection(direction===true?\"left\":direction,writingDirection);const isHorizontal=resolvedDirection===\"left\"||resolvedDirection===\"right\";const transformer=directionTransformers[resolvedDirection];const transform=useTransform(offset,transformer);/* Refs and State */const parentRef=useRef(null);const childrenRef=useMemo(()=>{return[{current:null},{current:null}];},[]);const[size,setSize]=useState({parent:null,children:null});/* Arrays */let clonedChildren=null;let dupedChildren=[];/* Duplicate value */let duplicateBy=0;let opacity=0;if(isCanvas){duplicateBy=numChildren?Math.floor(10/numChildren):0;opacity=1;}if(!isCanvas&&hasChildren&&size.parent){duplicateBy=Math.round(size.parent/size.children*2)+1;duplicateBy=Math.min(duplicateBy,MAX_DUPLICATED_ITEMS);opacity=1;}/* Measure parent and child */const measure=useCallback(()=>{if(hasChildren&&parentRef.current){const parentLength=isHorizontal?parentRef.current.offsetWidth:parentRef.current.offsetHeight;const start=childrenRef[0].current?isHorizontal?childrenRef[0].current.offsetLeft:childrenRef[0].current.offsetTop:0;const end=childrenRef[1].current?isHorizontal?childrenRef[1].current.offsetLeft+childrenRef[1].current.offsetWidth:childrenRef[1].current.offsetTop+childrenRef[1].current.offsetHeight:0;const childrenLength=end-start+gap;startTransition(()=>{setSize({parent:parentLength,children:childrenLength});});}},[]);const childrenStyles=isCanvas?{contentVisibility:\"auto\"}:{};/* Add refs to first and last child */if(hasChildren){// TODO: These conditional hooks will be unsafe if hasChildren ever changes outside the canvas.\nif(!isCanvas){/**\n             * Track whether this is the initial resize event. By default this will fire on mount,\n             * which we do in the useEffect. We should only fire it on subsequent resizes.\n             */let initialResize=useRef(true);useLayoutEffect(()=>{frame.read(measure,false,true);return resize(parentRef.current,({contentSize})=>{if(!initialResize.current&&(contentSize.width||contentSize.height)){frame.read(measure,false,true);}initialResize.current=false;});},[]);}clonedChildren=Children.map(filteredSlots,(child,index)=>{let ref;if(index===0){ref=childrenRef[writingDirection===\"rtl\"&&isHorizontal?1:0];}if(index===filteredSlots.length-1){ref=childrenRef[writingDirection===\"rtl\"&&isHorizontal?0:1];}const size={width:widthType?child.props?.width:\"100%\",height:heightType?child.props?.height:\"100%\"};return /*#__PURE__*/_jsx(LayoutGroup,{inherit:\"id\",children:/*#__PURE__*/_jsx(Wrapper,{ref:ref,style:size,children:/*#__PURE__*/cloneElement(child,{style:{...child.props?.style,...size,flexShrink:0,...childrenStyles},layoutId:child.props.layoutId?child.props.layoutId+\"-original-\"+index:undefined},child.props?.children)})});});}const isInView=isCanvas?true:useInView(parentRef);if(!isCanvas){for(let i=0;i<duplicateBy;i++){dupedChildren=dupedChildren.concat(Children.map(filteredSlots,(child,childIndex)=>{const size={width:widthType?child.props?.width:\"100%\",height:heightType?child.props?.height:\"100%\",willChange:!isInView?undefined:\"transform\"};return /*#__PURE__*/_jsx(LayoutGroup,{inherit:\"id\",children:/*#__PURE__*/_jsx(Wrapper,{style:size,children:/*#__PURE__*/cloneElement(child,{key:i+\" \"+childIndex,style:{...child.props?.style,width:widthType?child.props?.width:\"100%\",height:heightType?child.props?.height:\"100%\",flexShrink:0,...childrenStyles},layoutId:child.props.layoutId?child.props.layoutId+\"-dupe-\"+i:undefined},child.props?.children)},i+\"li\"+childIndex)},i+\"lg\"+childIndex);}));}}const animateToValue=size.children+size.children*Math.round(size.parent/size.children);const initialTime=useRef(null);const prevTime=useRef(null);const xOrY=useRef(0);const isHover=useRef(false);const isReducedMotion=useReducedMotion();const listRef=useRef(null);const animationRef=useRef(null);/**\n     * Setup animations\n     */if(!isCanvas){useEffect(()=>{if(isReducedMotion||!animateToValue||!speed){return;}animationRef.current=listRef.current.animate({transform:[transformer(0),transformer(animateToValue)]},{duration:Math.abs(animateToValue)/speed*1e3,iterations:Infinity,iterationStart:writingDirection===\"rtl\"?1:0,easing:\"linear\"});return()=>animationRef.current.cancel();},[hoverFactor,animateToValue,speed,writingDirection]);const playOrPause=useCallback(()=>{if(!animationRef.current)return;const hidden=document.hidden;if(isInView&&!hidden&&animationRef.current.playState===\"paused\"){animationRef.current.play();}else if((!isInView||hidden)&&animationRef.current.playState===\"running\"){animationRef.current.pause();}},[isInView]);useEffect(()=>{playOrPause();},[isInView,hoverFactor,animateToValue,speed]);useEffect(()=>{document.addEventListener(\"visibilitychange\",playOrPause);return()=>{document.removeEventListener(\"visibilitychange\",playOrPause);};},[playOrPause]);}/* Fades */const fadeDirection=isHorizontal?\"to right\":\"to bottom\";const fadeWidthStart=fadeWidth/2;const fadeWidthEnd=100-fadeWidth/2;const fadeInsetStart=clamp(fadeInset,0,fadeWidthStart);const fadeInsetEnd=100-fadeInset;const fadeMask=`linear-gradient(${fadeDirection}, rgba(0, 0, 0, ${fadeAlpha}) ${fadeInsetStart}%, rgba(0, 0, 0, 1) ${fadeWidthStart}%, rgba(0, 0, 0, 1) ${fadeWidthEnd}%, rgba(0, 0, 0, ${fadeAlpha}) ${fadeInsetEnd}%)`;/* Empty state */if(!hasChildren){return /*#__PURE__*/_jsxs(\"section\",{style:placeholderStyles,children:[/*#__PURE__*/_jsx(\"div\",{style:emojiStyles,children:\"✨\"}),/*#__PURE__*/_jsx(\"p\",{style:titleStyles,children:\"Connect to Content\"}),/*#__PURE__*/_jsx(\"p\",{style:subtitleStyles,children:\"Add layers or components to infinitely loop on your page.\"})]});}return /*#__PURE__*/_jsx(\"section\",{style:{...containerStyle,opacity:opacity,WebkitMaskImage:fadeContent?fadeMask:undefined,maskImage:fadeContent?fadeMask:undefined,overflow:overflow?\"visible\":\"hidden\",padding:paddingValue},ref:parentRef,children:/*#__PURE__*/_jsxs(motion.ul,{ref:listRef,style:{...containerStyle,gap:gap,top:direction===\"bottom\"&&isValidNumber(animateToValue)?-animateToValue:undefined,left:direction===\"right\"&&isValidNumber(animateToValue)?animateToValue*(writingDirection===\"rtl\"?1:-1):undefined,placeItems:alignment,position:\"relative\",flexDirection:isHorizontal?\"row\":\"column\",...style,willChange:isCanvas||!isInView?\"auto\":\"transform\",transform:transformer(0)},onMouseEnter:()=>{isHover.current=true;if(animationRef.current){// TODO Replace with updatePlaybackRate when Chrome bugs sorted\nanimationRef.current.playbackRate=hoverFactor;}},onMouseLeave:()=>{isHover.current=false;if(animationRef.current){// TODO Replace with updatePlaybackRate when Chrome bugs sorted\nanimationRef.current.playbackRate=1;}},children:[clonedChildren,dupedChildren]})});}const Wrapper=/*#__PURE__*/forwardRef(({children,...props},ref)=>{const innerRef=useRef();const inView=useInView(innerRef);useImperativeHandle(ref,()=>innerRef.current);useEffect(()=>{const current=innerRef.current;if(!current)return;// for a11y: Manage tabIndex on focusable descendants & aria-hidden on the parent.\nif(inView){current.querySelectorAll(\"button,a\").forEach(el=>{const orig=el.dataset.origTabIndex;if(orig)el.tabIndex=orig;else el.removeAttribute(\"tabIndex\");});}else{current.querySelectorAll(\"button,a\").forEach(el=>{const orig=el.getAttribute(\"tabIndex\");if(orig)el.dataset.origTabIndex=orig;el.tabIndex=-1;});}},[inView]);return /*#__PURE__*/_jsx(\"li\",{...props,\"aria-hidden\":!inView,ref:innerRef,children:children});});/* Default Properties */Ticker.defaultProps={gap:10,padding:10,sizingOptions:{widthType:true,heightType:true},fadeOptions:{fadeContent:true,overflow:false,fadeWidth:25,fadeAlpha:0,fadeInset:0},direction:true};/* Property Controls */addPropertyControls(Ticker,{slots:{type:ControlType.Array,title:\"Children\",control:{type:ControlType.ComponentInstance}},speed:{type:ControlType.Number,title:\"Speed\",min:0,max:1e3,defaultValue:100,unit:\"%\",displayStepper:true,step:5},direction:{type:ControlType.Enum,title:\"Direction\",options:[\"left\",\"right\",\"top\",\"bottom\"],optionIcons:[\"direction-left\",\"direction-right\",\"direction-up\",\"direction-down\"],optionTitles:[\"Left\",\"Right\",\"Top\",\"Bottom\"],defaultValue:\"left\",displaySegmentedControl:true},alignment:{type:ControlType.Enum,title:\"Align\",options:[\"flex-start\",\"center\",\"flex-end\"],optionIcons:{direction:{right:[\"align-top\",\"align-middle\",\"align-bottom\"],left:[\"align-top\",\"align-middle\",\"align-bottom\"],top:[\"align-left\",\"align-center\",\"align-right\"],bottom:[\"align-left\",\"align-center\",\"align-right\"]}},defaultValue:\"center\",displaySegmentedControl:true},gap:{type:ControlType.Number,title:\"Gap\"},padding:{title:\"Padding\",type:ControlType.FusedNumber,toggleKey:\"paddingPerSide\",toggleTitles:[\"Padding\",\"Padding per side\"],valueKeys:[\"paddingTop\",\"paddingRight\",\"paddingBottom\",\"paddingLeft\"],valueLabels:[\"T\",\"R\",\"B\",\"L\"],min:0},sizingOptions:{type:ControlType.Object,title:\"Sizing\",controls:{widthType:{type:ControlType.Boolean,title:\"Width\",enabledTitle:\"Auto\",disabledTitle:\"Stretch\",defaultValue:true},heightType:{type:ControlType.Boolean,title:\"Height\",enabledTitle:\"Auto\",disabledTitle:\"Stretch\",defaultValue:true}}},fadeOptions:{type:ControlType.Object,title:\"Clipping\",controls:{fadeContent:{type:ControlType.Boolean,title:\"Fade\",defaultValue:true},overflow:{type:ControlType.Boolean,title:\"Overflow\",enabledTitle:\"Show\",disabledTitle:\"Hide\",defaultValue:false,hidden(props){return props.fadeContent===true;}},fadeWidth:{type:ControlType.Number,title:\"Width\",defaultValue:25,min:0,max:100,unit:\"%\",hidden(props){return props.fadeContent===false;}},fadeInset:{type:ControlType.Number,title:\"Inset\",defaultValue:0,min:0,max:100,unit:\"%\",hidden(props){return props.fadeContent===false;}},fadeAlpha:{type:ControlType.Number,title:\"Opacity\",defaultValue:0,min:0,max:1,step:.05,hidden(props){return props.fadeContent===false;}}}},hoverFactor:{type:ControlType.Number,title:\"Hover\",min:0,max:1,unit:\"x\",defaultValue:1,step:.1,displayStepper:true,description:\"Slows down the speed while you are hovering.\"}});/* Placeholder Styles */const containerStyle={display:\"flex\",width:\"100%\",height:\"100%\",maxWidth:\"100%\",maxHeight:\"100%\",placeItems:\"center\",margin:0,padding:0,listStyleType:\"none\",textIndent:\"none\"};/* Styles */const placeholderStyles={display:\"flex\",width:\"100%\",height:\"100%\",placeContent:\"center\",placeItems:\"center\",flexDirection:\"column\",color:\"#96F\",background:\"rgba(136, 85, 255, 0.1)\",fontSize:11,overflow:\"hidden\",padding:\"20px 20px 30px 20px\"};const emojiStyles={fontSize:32,marginBottom:10};const titleStyles={margin:0,marginBottom:10,fontWeight:600,textAlign:\"center\"};const subtitleStyles={margin:0,opacity:.7,maxWidth:150,lineHeight:1.5,textAlign:\"center\"};/* Clamp function, used for fadeInset */const clamp=(num,min,max)=>Math.min(Math.max(num,min),max);const isValidNumber=value=>typeof value===\"number\"&&!isNaN(value);function useWritingDirection(){if(!window||!window.document||!window.document.documentElement)return\"ltr\";return window.document.documentElement.dir===\"rtl\"?\"rtl\":\"ltr\";}function getTickerResolvedDirection(direction,writingDirection){if(writingDirection!==\"rtl\")return direction;if(direction===\"left\")return\"right\";if(direction===\"right\")return\"left\";return direction;}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Ticker\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"200\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerSupportedLayoutWidth\":\"fixed\",\"framerDisableUnlink\":\"*\",\"framerIntrinsicWidth\":\"400\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Ticker.map","/**\n * @framerDisableUnlink\n * @framerDisplayName \"Loader Counter\"\n *//**\n * Loader Counter v1.1.0\n * Professional animated number counter with authentic loader, linear and\n * strong ease-in modes.\n *\n * ✨ Features:\n * • Authentic loader animation with realistic pauses and speed variations\n * • Linear counting mode for smooth, consistent animations\n * • Strong ease-in mode — very slow start, hard acceleration at the end\n * • Smart number formatting with thousands separators and abbreviations (K/M/B)\n * • Color transitions that interpolate smoothly during animation\n * • Intersection Observer for viewport-triggered animations\n * • Full accessibility support with ARIA labels and announcements\n * • Respects user motion preferences automatically\n * • High-performance RAF-based animation loop\n *\n * 🎨 Customization:\n * • Native Framer font controls with full typography support\n * • Dynamic color transitions between start and end colors\n * • Flexible prefix/suffix system with independent colors\n * • Auto-duration calculation based on number range\n * • Customizable animation delay and replay options\n * • Adjustable ease-in intensity (power curve)\n *\n * 🚀 Perfect for:\n * • Loading screens with realistic progress indicators\n * • Statistics and metrics displays\n * • Achievement counters and milestones\n * • Dynamic data visualizations\n * • Marketing landing pages with animated numbers\n *\n * © 2025 Amr Rashed - All rights reserved\n * Author: Amr Rashed (https://amrrashed.com)\n * Documentation: https://loadercounter.framer.website/demo\n * Support: hello@amrrashed.com\n * License: Commercial use allowed with attribution\n */import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType}from\"framer\";// Disable unlinking to protect the component\nexport const framerDisableUnlinking=true;/* ===== UTILITIES ===== */const clamp=(value,min=0,max=1)=>Math.max(min,Math.min(max,value));// Color interpolation with support for hex and rgb\nconst parseColor=color=>{// Handle hex colors\nif(color.startsWith(\"#\")){const hex=color.slice(1);const fullHex=hex.length===3?hex.split(\"\").map(c=>c+c).join(\"\"):hex;const bigint=parseInt(fullHex,16);return{r:bigint>>16&255,g:bigint>>8&255,b:bigint&255};}// Handle rgb/rgba colors\nconst match=color.match(/rgba?\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)/);if(match){return{r:parseInt(match[1]),g:parseInt(match[2]),b:parseInt(match[3])};}// Default to black\nreturn{r:0,g:0,b:0};};const interpolateColor=(start,end,progress)=>{const from=parseColor(start);const to=parseColor(end);const r=Math.round(from.r+(to.r-from.r)*progress);const g=Math.round(from.g+(to.g-from.g)*progress);const b=Math.round(from.b+(to.b-from.b)*progress);return`rgb(${r}, ${g}, ${b})`;};// Loader-specific easing - more dramatic speed changes\nconst loaderEase=t=>{// Very fast start (0-25%) - shoots up quickly\nif(t<.25){return 3.2*t*t;}// Steady middle (25-65%) - consistent progress\nif(t<.65){const adjusted=(t-.25)/.4;return .2+adjusted*.5;}// Slow section (65-88%) - crawling\nif(t<.88){const adjusted=(t-.65)/.23;return .7+Math.pow(adjusted,1.5)*.18;}// Extremely slow finish (88-100%) - classic loader struggle\nconst final=(t-.88)/.12;return .88+Math.pow(final,4)*.12;};// Strong ease-in - starts extremely slow then accelerates hard near the end.\n// Higher `power` = more dramatic (\"muito forte\"). power 6 ≈ very aggressive.\nconst easeInStrong=(t,power=6)=>{const p=clamp(power,2,10);return Math.pow(clamp(t),p);};// Generate random micro-pauses for authentic loader feel\nfunction generateLoaderPauses(){const pauses=[];// Add 3-5 noticeable pauses\nconst pauseCount=3+Math.floor(Math.random()*3);for(let i=0;i<pauseCount;i++){// Pauses occur between 15-85% progress\nconst center=.15+Math.random()*.7;// Longer pause duration (100-300ms relative to total duration)\nconst width=.04+Math.random()*.08;pauses.push({start:Math.max(.15,center-width/2),end:Math.min(.85,center+width/2)});}// Add one longer pause around 75-85% (the classic \"almost there\" pause)\npauses.push({start:.75+Math.random()*.05,end:.82+Math.random()*.03});return pauses;}/* ===== NUMBER FORMATTING ===== */function formatNumber(value,options){const{thousands,abbreviate,locale,decimals}=options;if(abbreviate){const absValue=Math.abs(value);let divisor=1;let suffix=\"\";let precision=0;// Determine scale based on current value, not range\nif(absValue>=1e9){divisor=1e9;suffix=\"B\";// For billions, show 2 decimals if under 10B, 1 decimal if under 100B\nif(absValue<1e10)precision=2;else if(absValue<1e11)precision=1;}else if(absValue>=1e6){divisor=1e6;suffix=\"M\";// For millions, show 2 decimals if under 10M, 1 decimal if under 100M\nif(absValue<1e7)precision=2;else if(absValue<1e8)precision=1;}else if(absValue>=1e3){divisor=1e3;suffix=\"K\";// For thousands, show 2 decimals if under 10K, 1 decimal if under 100K\nif(absValue<1e4)precision=2;else if(absValue<1e5)precision=1;}// If no abbreviation needed, show the normal number\nif(divisor===1){const fixedValue=Number(value.toFixed(decimals));if(thousands){try{return new Intl.NumberFormat(locale,{minimumFractionDigits:decimals,maximumFractionDigits:decimals,useGrouping:true}).format(fixedValue);}catch{return fixedValue.toString();}}return fixedValue.toString();}// Apply abbreviation with appropriate precision\nconst scaled=value/divisor;const factor=Math.pow(10,precision);const rounded=Math.round(scaled*factor)/factor;// Format with appropriate decimal places\nlet text;if(precision===0||Number.isInteger(rounded)){text=rounded.toFixed(0);}else{text=rounded.toFixed(precision).replace(/\\.?0+$/,\"\");}return(value<0?\"-\":\"\")+text+suffix;}const fixedValue=Number(value.toFixed(decimals));if(thousands){try{return new Intl.NumberFormat(locale,{minimumFractionDigits:decimals,maximumFractionDigits:decimals,useGrouping:true}).format(fixedValue);}catch{return new Intl.NumberFormat(\"en-US\",{minimumFractionDigits:decimals,maximumFractionDigits:decimals,useGrouping:true}).format(fixedValue);}}return fixedValue.toString();}function getDecimalPlaces(num){const str=String(num);const idx=str.indexOf(\".\");return idx>=0?Math.min(3,str.length-idx-1):0;}/* ===== ANIMATION HOOK ===== */function useCounterAnimation(config){const[value,setValue]=React.useState(config.from);const[progress,setProgress]=React.useState(0);const[isVisible,setIsVisible]=React.useState(!config.startOnView);const[isAnimating,setIsAnimating]=React.useState(false);const containerRef=React.useRef(null);const animationRef=React.useRef();const pausesRef=React.useRef([]);const lastPausedRef=React.useRef(false);const isLoader=config.animationStyle===\"loader\";// Visibility observer\nReact.useEffect(()=>{if(!config.startOnView){setIsVisible(true);return;}const observer=new IntersectionObserver(([entry])=>{if(entry.isIntersecting){setIsVisible(true);}else if(config.replay){setIsVisible(false);setValue(config.from);setProgress(0);setIsAnimating(false);}},{threshold:.1});if(containerRef.current){observer.observe(containerRef.current);}return()=>observer.disconnect();},[config.startOnView,config.replay,config.from]);// Prefer reduced motion support\nReact.useEffect(()=>{const prefersReducedMotion=window.matchMedia?.(\"(prefers-reduced-motion: reduce)\")?.matches;if(prefersReducedMotion){// Skip animation for users who prefer reduced motion\nsetValue(config.to);setProgress(1);return;}},[config.to]);// Animation loop\nReact.useEffect(()=>{if(!isVisible)return;// Check for reduced motion preference\nconst prefersReducedMotion=window.matchMedia?.(\"(prefers-reduced-motion: reduce)\")?.matches;if(prefersReducedMotion){setValue(config.to);setProgress(1);return;}// Cancel any existing animation\nif(animationRef.current){cancelAnimationFrame(animationRef.current);}// Generate pauses for loader mode only\npausesRef.current=isLoader?generateLoaderPauses():[];lastPausedRef.current=false;setIsAnimating(true);const startTime=performance.now()+config.delay*1e3;const duration=config.duration*1e3;const range=config.to-config.from;const animate=()=>{const now=performance.now();const elapsed=now-startTime;// Handle delay\nif(elapsed<0){animationRef.current=requestAnimationFrame(animate);return;}let rawProgress=clamp(elapsed/duration);// For loader mode, apply pauses\nif(isLoader&&rawProgress<.95){const isPaused=pausesRef.current.some(p=>rawProgress>=p.start&&rawProgress<=p.end);if(isPaused){if(!lastPausedRef.current){// Just entered a pause, hold current value\nlastPausedRef.current=true;}// Don't update during pause\nanimationRef.current=requestAnimationFrame(animate);return;}else{lastPausedRef.current=false;}}// Apply easing based on the selected style\nlet easedProgress;if(config.animationStyle===\"loader\"){easedProgress=loaderEase(rawProgress);}else if(config.animationStyle===\"easeIn\"){easedProgress=easeInStrong(rawProgress,config.easeInPower);}else{easedProgress=rawProgress;}// Update values\nsetProgress(easedProgress);setValue(config.from+range*easedProgress);if(rawProgress<1){animationRef.current=requestAnimationFrame(animate);}else{// Ensure we end exactly at the target\nsetProgress(1);setValue(config.to);setIsAnimating(false);}};animationRef.current=requestAnimationFrame(animate);return()=>{if(animationRef.current){cancelAnimationFrame(animationRef.current);}setIsAnimating(false);};},[isVisible,config.from,config.to,config.duration,config.delay,config.animationStyle,config.easeInPower,isLoader]);return{containerRef,value,progress,isAnimating};}/* ===== MAIN COMPONENT ===== */export default function LoaderCounter(props){const{// Animation\nanimationStyle=\"loader\",easeInPower=6,from=0,to=100,duration=false,customDuration=3.2,delay=0,startOnView=true,replay=true,// Formatting\nformatThousands=false,abbreviate=false,locale=false,customLocale=\"en-US\",// Styling\nfont={fontFamily:\"Inter\",fontWeight:600,fontSize:64,letterSpacing:0,lineHeight:1.1,textAlign:\"left\"},color=\"#000000\",// Color transition\ncolorTransition=false,startColor=\"#3b82f6\",endColor=\"#ef4444\",// Affixes\nprefix=\"\",prefixColor=\"#000000\",suffix=\"\",suffixColor=\"#000000\",gap=8}=props;const isLoader=animationStyle===\"loader\";// Calculate auto duration based on range (longer for loader effect)\nconst calculatedDuration=React.useMemo(()=>{if(!duration){const range=Math.abs(to-from);// Loader mode: 3-4.5s for authentic loading feel\nif(isLoader){const seconds=3+Math.log10(Math.max(1,range))*.5;return clamp(seconds,3,4.5);}// Strong ease-in: a touch longer so the late burst is visible\nif(animationStyle===\"easeIn\"){const seconds=1.6+Math.log10(Math.max(1,range))*.4;return clamp(seconds,1.6,3.2);}// Linear mode: faster 1-2.5s\nconst seconds=1+Math.log10(Math.max(1,range))*.4;return clamp(seconds,1,2.5);}return customDuration;},[duration,customDuration,from,to,isLoader,animationStyle]);// Resolve locale\nconst resolvedLocale=React.useMemo(()=>{if(!formatThousands)return\"en-US\";if(!locale&&typeof window!==\"undefined\"){return window.navigator?.language||\"en-US\";}return customLocale||\"en-US\";},[locale,customLocale,formatThousands]);// Calculate decimal places\nconst decimals=React.useMemo(()=>{return Math.max(getDecimalPlaces(from),getDecimalPlaces(to));},[from,to]);// Use animation hook\nconst{containerRef,value,progress,isAnimating}=useCounterAnimation({from,to,duration:calculatedDuration,delay,animationStyle,easeInPower,startOnView,replay});// Format current value\nconst displayValue=React.useMemo(()=>{return formatNumber(value,{thousands:formatThousands,abbreviate,locale:resolvedLocale,decimals,from,to});},[value,formatThousands,abbreviate,resolvedLocale,decimals,from,to]);// Calculate interpolated color\nconst currentColor=React.useMemo(()=>{if(colorTransition&&startColor&&endColor){return interpolateColor(startColor,endColor,progress);}return color;},[colorTransition,startColor,endColor,progress,color]);// Build font styles\nconst fontStyles=React.useMemo(()=>({fontFamily:font?.fontFamily||\"Inter\",fontWeight:font?.fontWeight||600,fontSize:font?.fontSize||64,letterSpacing:font?.letterSpacing||0,lineHeight:font?.lineHeight||1.1,textAlign:font?.textAlign||\"left\"}),[font]);return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,role:\"status\",\"aria-live\":\"polite\",\"aria-label\":`Counter: ${displayValue}`,style:{width:\"100%\",display:\"flex\",justifyContent:fontStyles.textAlign===\"center\"?\"center\":fontStyles.textAlign===\"right\"?\"flex-end\":\"flex-start\",...fontStyles},children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"inline-flex\",alignItems:\"baseline\",gap:prefix||suffix?`${gap}px`:\"0px\",fontVariantNumeric:\"tabular-nums\",// Prevent text selection during animation for cleaner UX\nuserSelect:isAnimating?\"none\":\"auto\",// Smooth color transitions\ntransition:colorTransition?\"color 0.3s ease\":undefined},children:[prefix&&/*#__PURE__*/_jsx(\"span\",{style:{color:prefixColor},\"aria-hidden\":\"true\",children:prefix}),/*#__PURE__*/_jsx(\"span\",{style:{color:currentColor},\"data-value\":value,\"data-progress\":progress,children:displayValue}),suffix&&/*#__PURE__*/_jsx(\"span\",{style:{color:suffixColor},\"aria-hidden\":\"true\",children:suffix})]}),progress===1&&/*#__PURE__*/_jsxs(\"span\",{style:{position:\"absolute\",width:\"1px\",height:\"1px\",padding:\"0\",margin:\"-1px\",overflow:\"hidden\",clip:\"rect(0, 0, 0, 0)\",whiteSpace:\"nowrap\",borderWidth:\"0\"},\"aria-live\":\"assertive\",children:[\"Counter complete: \",prefix,displayValue,suffix]})]});}/* ===== DEFAULT PROPS ===== */LoaderCounter.defaultProps={font:{fontFamily:\"Inter\",fontWeight:600,fontSize:64,letterSpacing:0,lineHeight:1.1,textAlign:\"left\"}};/* ===== PROPERTY CONTROLS ===== */addPropertyControls(LoaderCounter,{animationStyle:{type:ControlType.Enum,title:\"Style\",defaultValue:\"loader\",options:[\"loader\",\"linear\",\"easeIn\"],optionTitles:[\"Loader\",\"Linear\",\"Ease In (forte)\"]},easeInPower:{type:ControlType.Number,title:\"Intensidade\",defaultValue:6,min:2,max:10,step:1,displayStepper:true,hidden:props=>props.animationStyle!==\"easeIn\",description:\"For\\xe7a do ease-in: quanto maior, mais lento o arranque e mais brusca a acelera\\xe7\\xe3o no fim.\"},from:{type:ControlType.Number,title:\"From\",defaultValue:0,displayStepper:true},to:{type:ControlType.Number,title:\"To\",defaultValue:100,displayStepper:true},duration:{type:ControlType.Boolean,title:\"Duration\",defaultValue:false,enabledTitle:\"Custom\",disabledTitle:\"Auto\"},customDuration:{type:ControlType.Number,title:\"Seconds\",defaultValue:3.2,min:.5,max:10,step:.1,hidden:props=>!props.duration},delay:{type:ControlType.Number,title:\"Delay (s)\",defaultValue:0,min:0,max:5,step:.1,displayStepper:true},abbreviate:{type:ControlType.Boolean,title:\"Shorten\",defaultValue:false,enabledTitle:\"K/M/B\",disabledTitle:\"Full\"},formatThousands:{type:ControlType.Boolean,title:\"Format\",defaultValue:false,enabledTitle:\"1,000\",disabledTitle:\"1000\"},locale:{type:ControlType.Boolean,title:\"Locale\",defaultValue:false,enabledTitle:\"Custom\",disabledTitle:\"Auto\",hidden:props=>!props.formatThousands},customLocale:{type:ControlType.String,title:\"Code\",defaultValue:\"en-US\",placeholder:\"en-US, nl-NL, etc\",hidden:props=>!props.formatThousands||!props.locale},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",displayFontSize:true,displayTextAlignment:true},colorTransition:{type:ControlType.Boolean,title:\"Color fade\",defaultValue:false},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\",hidden:props=>props.colorTransition},startColor:{type:ControlType.Color,title:\"From color\",defaultValue:\"#3b82f6\",hidden:props=>!props.colorTransition},endColor:{type:ControlType.Color,title:\"To color\",defaultValue:\"#ef4444\",hidden:props=>!props.colorTransition},prefix:{type:ControlType.String,title:\"Prefix\",defaultValue:\"\",placeholder:\"$, €, etc\"},prefixColor:{type:ControlType.Color,title:\"Prefix color\",defaultValue:\"#000000\",hidden:props=>!props.prefix},suffix:{type:ControlType.String,title:\"Suffix\",defaultValue:\"\",placeholder:\"%, pts, etc\"},suffixColor:{type:ControlType.Color,title:\"Suffix color\",defaultValue:\"#000000\",hidden:props=>!props.suffix},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:8,min:0,max:32,step:1,hidden:props=>!props.prefix&&!props.suffix},startOnView:{type:ControlType.Boolean,title:\"On view\",defaultValue:true},replay:{type:ControlType.Boolean,title:\"Replay\",defaultValue:true,hidden:props=>!props.startOnView,description:\"[Built by Amr Rashed](https://amrrashed.com)\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"LoaderCounter\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"framerDisableUnlinking\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./LoaderCounter.map"],"mappings":"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"}