{"version":3,"file":"LoaderCounter.BnFtwLLa.mjs","names":["mask","SVG","getProps","Icon","React.forwardRef","mask","SVG","getProps","Icon","React.forwardRef","React.forwardRef","React.useState","React.useRef","React.useMemo","__esmMin","init_ssg_sandbox_shims","init_npm_react_18_3_1","window","pe","ce","init_jsx_runtime","J","p","_e","de","motion","cx","withCSS","addPropertyControls","useSVGTemplate","init_framer_DymZktPS","ControlType","mask$2","Base","MotionSVG","SVG$2","svg","getProps$2","Icon$2","init_HjUXo2lxD","props","rest","animated","dots","stroke","width1","restProps","href","className","lKf_CQTz5","fICyAUQY1","style","mask$1","SVG$1","getProps$1","Icon$1","init_XEaVx4YHh","YmfIrZ3Ez","mask","SVG","getProps","Icon","init_rJogfKvFI","generateLoaderPauses","pauses","pauseCount","i","center","width","formatNumber","options","abbreviate","absValue","value","divisor","suffix","precision","fixedValue","decimals","thousands","locale","scaled","factor","rounded","text","getDecimalPlaces","str","num","idx","useCounterAnimation","setValue","config","progress","setProgress","isVisible","setIsVisible","isAnimating","setIsAnimating","containerRef","animationRef","pausesRef","lastPausedRef","observer","entry","startTime","duration","range","animate","elapsed","rawProgress","clamp","easedProgress","loaderEase","LoaderCounter","calculatedDuration","to","from","isLoader","seconds","customDuration","resolvedLocale","formatThousands","customLocale","displayValue","currentColor","colorTransition","startColor","endColor","interpolateColor","color","fontStyles","font","prefix","gap","prefixColor","suffixColor","parseColor","init_LoaderCounter","min","max","hex","fullHex","c","bigint","match","start","end","t"],"sources":["https:/framerusercontent.com/modules/764a0a1N4rrspwzKwDQP/zykMLogEfDJwNTxb66Uk/HjUXo2lxD.js","https:/framerusercontent.com/modules/lyWcPcSIphjU6hvGjgrJ/XWShwac57KQThw2sCIFs/XEaVx4YHh.js","https:/framerusercontent.com/modules/yV5iz52IpO04cShO6N87/yTSiPG04wS7LKNoLaMJ2/rJogfKvFI.js","https:/framerusercontent.com/modules/89ZL4ZjcQv1thP9iOhSp/yrtc5BvsMBFQQc0WSi9M/LoaderCounter.js"],"sourcesContent":["// Generated by Framer (6ca5d98)\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,cx,motion,useSVGTemplate,withCSS}from\"framer\";import*as React from\"react\";import{forwardRef}from\"react\";const mask=\"var(--framer-icon-mask)\";const Base=/*#__PURE__*/forwardRef(function(props,ref){return /*#__PURE__*/_jsx(\"svg\",{...props,ref:ref,children:props.children});});const MotionSVG=motion.create(Base);const SVG=/*#__PURE__*/forwardRef((props,ref)=>{const{animated,layoutId,children,...rest}=props;return animated?/*#__PURE__*/_jsx(MotionSVG,{...rest,layoutId:layoutId,ref:ref,children:children}):/*#__PURE__*/_jsx(\"svg\",{...rest,ref:ref,children:children});});const svg='<svg display=\"block\" role=\"presentation\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M 0 3.25 C 0 1.455 1.455 0 3.25 0 C 5.045 0 6.5 1.455 6.5 3.25 C 6.5 5.045 5.045 6.5 3.25 6.5 C 1.455 6.5 0 5.045 0 3.25 Z\" fill=\"transparent\" height=\"6.5px\" id=\"vZex20khi\" stroke-dasharray=\"\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"var(--1335ju, 1.5)\" stroke=\"var(--18mrqx2, rgb(0, 0, 0))\" transform=\"translate(8.75 4.75)\" width=\"6.5px\"/><path d=\"M 1.648 5.25 L 11.953 5.25 C 13.095 5.25 13.975 4.268 13.441 3.258 C 12.657 1.773 10.869 0 6.801 0 C 2.733 0 0.944 1.773 0.16 3.258 C -0.374 4.268 0.506 5.25 1.648 5.25 Z\" fill=\"transparent\" height=\"5.25px\" id=\"iHNmJqHXE\" stroke-dasharray=\"\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"var(--1335ju, 1.5)\" stroke=\"var(--18mrqx2, rgb(0, 0, 0))\" transform=\"translate(5.199 14)\" width=\"13.6010223228378px\"/></svg>';const getProps=({dots,height,id,stroke,width,width1,...props})=>{return{...props,BKVe8Pgvw:dots??props.BKVe8Pgvw??1,fICyAUQY1:stroke??props.fICyAUQY1??\"rgb(0, 0, 0)\",lKf_CQTz5:width1??props.lKf_CQTz5??1.5};};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{style,className,layoutId,variant,fICyAUQY1,lKf_CQTz5,BKVe8Pgvw,...restProps}=getProps(props);const href=useSVGTemplate(\"3998104402\",svg);return /*#__PURE__*/_jsx(SVG,{...restProps,className:cx(\"framer-NLaZB\",className),layoutId:layoutId,ref:ref,role:\"presentation\",style:{\"--1335ju\":lKf_CQTz5,\"--18mrqx2\":fICyAUQY1,...style},viewBox:\"0 0 24 24\",children:/*#__PURE__*/_jsx(\"use\",{href:href})});});const css=[`.framer-NLaZB { -webkit-mask: ${mask}; aspect-ratio: 1; display: block; mask: ${mask}; width: 24px; }`];/**\n * This is a generated Framer component.\n * @framerIntrinsicWidth 24\n * @framerIntrinsicHeight 24\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerVariables {\"fICyAUQY1\":\"stroke\",\"lKf_CQTz5\":\"width1\",\"BKVe8Pgvw\":\"dots\"}\n * @framerImmutableVariables true\n * @framerVector {\"name\":\"User\",\"color\":{\"type\":\"variable\",\"value\":\"18mrqx2\"},\"set\":{\"localId\":\"vectorSet/SuYHhKUZG\",\"id\":\"SuYHhKUZG\",\"moduleId\":\"EqX8thWQjdZcOB1c6p5N\"}}\n * @framerDisableUnlink true\n */const Icon=withCSS(Component,css,\"framer-NLaZB\");Icon.displayName=\"User\";export default Icon;addPropertyControls(Icon,{fICyAUQY1:{defaultValue:\"rgb(0, 0, 0)\",hidden:false,title:\"Stroke\",type:ControlType.Color},lKf_CQTz5:{defaultValue:1.5,displayStepper:true,hidden:false,max:4,min:0,step:.5,title:\"Width\",type:ControlType.Number},BKVe8Pgvw:{defaultValue:1,displayStepper:true,hidden:true,max:4,min:1,title:\"Dots\",type:ControlType.Number}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Icon\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"24\",\"framerVariables\":\"{\\\"fICyAUQY1\\\":\\\"stroke\\\",\\\"lKf_CQTz5\\\":\\\"width1\\\",\\\"BKVe8Pgvw\\\":\\\"dots\\\"}\",\"framerIntrinsicWidth\":\"24\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerImmutableVariables\":\"true\",\"framerDisableUnlink\":\"true\",\"framerVector\":\"{\\\"name\\\":\\\"User\\\",\\\"color\\\":{\\\"type\\\":\\\"variable\\\",\\\"value\\\":\\\"18mrqx2\\\"},\\\"set\\\":{\\\"localId\\\":\\\"vectorSet/SuYHhKUZG\\\",\\\"id\\\":\\\"SuYHhKUZG\\\",\\\"moduleId\\\":\\\"EqX8thWQjdZcOB1c6p5N\\\"}}\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (6ca5d98)\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,cx,motion,withCSS}from\"framer\";import*as React from\"react\";import{forwardRef}from\"react\";const mask='url(\\'data:image/svg+xml,<svg display=\"block\" role=\"presentation\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M 9 6 L 9 12 M 12 9 L 6 9 M 18 9 C 18 13.971 13.971 18 9 18 C 4.029 18 0 13.971 0 9 C 0 4.029 4.029 0 9 0 C 13.971 0 18 4.029 18 9 Z\" fill=\"transparent\" height=\"18px\" id=\"Eczuokrpp\" stroke-dasharray=\"\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" stroke=\"var(--szd5nr, black)\" transform=\"translate(3 3)\" width=\"18px\"/></svg>\\') alpha no-repeat center / auto var(--framer-icon-mask-mode, add), var(--framer-icon-mask, none)';const SVG=/*#__PURE__*/forwardRef((props,ref)=>{const{animated,layoutId,children,...rest}=props;return animated?/*#__PURE__*/_jsx(motion.div,{...rest,layoutId:layoutId,ref:ref}):/*#__PURE__*/_jsx(\"div\",{...rest,ref:ref});});const getProps=({height,id,stroke,width,...props})=>{return{...props,YmfIrZ3Ez:stroke??props.YmfIrZ3Ez??\"rgb(0, 0, 0)\"};};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{style,className,layoutId,variant,YmfIrZ3Ez,...restProps}=getProps(props);return /*#__PURE__*/_jsx(SVG,{...restProps,className:cx(\"framer-V7RD6\",className),layoutId:layoutId,ref:ref,style:{\"--szd5nr\":YmfIrZ3Ez,...style}});});const css=[`.framer-V7RD6 { -webkit-mask: ${mask}; aspect-ratio: 1; background-color: var(--szd5nr); mask: ${mask}; width: 24px; }`];/**\n * This is a generated Framer component.\n * @framerIntrinsicWidth 24\n * @framerIntrinsicHeight 24\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerVariables {\"YmfIrZ3Ez\":\"stroke\"}\n * @framerImmutableVariables true\n * @framerVector {\"name\":\"Plus Circle\",\"color\":{\"type\":\"variable\",\"value\":\"szd5nr\"},\"set\":{\"localId\":\"vectorSet/kNBkgkDkJ\",\"id\":\"kNBkgkDkJ\",\"moduleId\":\"DyJDRQD0f0RPOu0ZYoEG\"}}\n * @framerDisableUnlink true\n */const Icon=withCSS(Component,css,\"framer-V7RD6\");Icon.displayName=\"Plus Circle\";export default Icon;addPropertyControls(Icon,{YmfIrZ3Ez:{defaultValue:\"rgb(0, 0, 0)\",hidden:false,title:\"Stroke\",type:ControlType.Color}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Icon\",\"slots\":[],\"annotations\":{\"framerImmutableVariables\":\"true\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerVariables\":\"{\\\"YmfIrZ3Ez\\\":\\\"stroke\\\"}\",\"framerContractVersion\":\"1\",\"framerVector\":\"{\\\"name\\\":\\\"Plus Circle\\\",\\\"color\\\":{\\\"type\\\":\\\"variable\\\",\\\"value\\\":\\\"szd5nr\\\"},\\\"set\\\":{\\\"localId\\\":\\\"vectorSet/kNBkgkDkJ\\\",\\\"id\\\":\\\"kNBkgkDkJ\\\",\\\"moduleId\\\":\\\"DyJDRQD0f0RPOu0ZYoEG\\\"}}\",\"framerIntrinsicWidth\":\"24\",\"framerIntrinsicHeight\":\"24\",\"framerDisableUnlink\":\"true\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (6ca5d98)\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,cx,motion,withCSS}from\"framer\";import*as React from\"react\";import{forwardRef}from\"react\";const mask='url(\\'data:image/svg+xml,<svg display=\"block\" role=\"presentation\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M 6 3 C 6 4.657 4.657 6 3 6 C 1.343 6 0 4.657 0 3 C 0 1.343 1.343 0 3 0 C 4.657 0 6 1.343 6 3 Z\" fill=\"transparent\" height=\"6px\" id=\"cXi0eE9BV\" stroke-dasharray=\"\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" stroke=\"var(--szd5nr, black)\" transform=\"translate(9 7.5)\" width=\"6px\"/><path d=\"M 15 7.5 C 15 14.642 7.5 18.75 7.5 18.75 C 7.5 18.75 0 14.642 0 7.5 C 0 3.358 3.358 0 7.5 0 C 11.642 0 15 3.358 15 7.5 Z\" fill=\"transparent\" height=\"18.75px\" id=\"ldamRRLwX\" stroke-dasharray=\"\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" stroke=\"var(--szd5nr, black)\" transform=\"translate(4.5 3)\" width=\"15px\"/></svg>\\') alpha no-repeat center / auto var(--framer-icon-mask-mode, add), var(--framer-icon-mask, none)';const SVG=/*#__PURE__*/forwardRef((props,ref)=>{const{animated,layoutId,children,...rest}=props;return animated?/*#__PURE__*/_jsx(motion.div,{...rest,layoutId:layoutId,ref:ref}):/*#__PURE__*/_jsx(\"div\",{...rest,ref:ref});});const getProps=({height,id,stroke,width,...props})=>{return{...props,YmfIrZ3Ez:stroke??props.YmfIrZ3Ez??\"rgb(0, 0, 0)\"};};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{style,className,layoutId,variant,YmfIrZ3Ez,...restProps}=getProps(props);return /*#__PURE__*/_jsx(SVG,{...restProps,className:cx(\"framer-G4UYM\",className),layoutId:layoutId,ref:ref,style:{\"--szd5nr\":YmfIrZ3Ez,...style}});});const css=[`.framer-G4UYM { -webkit-mask: ${mask}; aspect-ratio: 1; background-color: var(--szd5nr); mask: ${mask}; width: 24px; }`];/**\n * This is a generated Framer component.\n * @framerIntrinsicWidth 24\n * @framerIntrinsicHeight 24\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerVariables {\"YmfIrZ3Ez\":\"stroke\"}\n * @framerImmutableVariables true\n * @framerVector {\"name\":\"Map Pin\",\"color\":{\"type\":\"variable\",\"value\":\"szd5nr\"},\"set\":{\"localId\":\"vectorSet/kNBkgkDkJ\",\"id\":\"kNBkgkDkJ\",\"moduleId\":\"DyJDRQD0f0RPOu0ZYoEG\"}}\n * @framerDisableUnlink true\n */const Icon=withCSS(Component,css,\"framer-G4UYM\");Icon.displayName=\"Map Pin\";export default Icon;addPropertyControls(Icon,{YmfIrZ3Ez:{defaultValue:\"rgb(0, 0, 0)\",hidden:false,title:\"Stroke\",type:ControlType.Color}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Icon\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"24\",\"framerDisableUnlink\":\"true\",\"framerImmutableVariables\":\"true\",\"framerIntrinsicHeight\":\"24\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerVariables\":\"{\\\"YmfIrZ3Ez\\\":\\\"stroke\\\"}\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerVector\":\"{\\\"name\\\":\\\"Map Pin\\\",\\\"color\\\":{\\\"type\\\":\\\"variable\\\",\\\"value\\\":\\\"szd5nr\\\"},\\\"set\\\":{\\\"localId\\\":\\\"vectorSet/kNBkgkDkJ\\\",\\\"id\\\":\\\"kNBkgkDkJ\\\",\\\"moduleId\\\":\\\"DyJDRQD0f0RPOu0ZYoEG\\\"}}\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","/**\n * @framerDisableUnlink\n * @framerDisplayName \"Loader Counter\"\n *//**\n * Loader Counter v1.0.0\n * Professional animated number counter with authentic loader and linear modes.\n *\n * ✨ Features:\n * • Authentic loader animation with realistic pauses and speed variations\n * • Linear counting mode for smooth, consistent animations\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 *\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;};// 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);// 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\npausesRef.current=config.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(config.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\nconst easedProgress=config.isLoader?loaderEase(rawProgress):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.isLoader]);return{containerRef,value,progress,isAnimating};}/* ===== MAIN COMPONENT ===== */export default function LoaderCounter(props){const{// Animation\nisLoader=true,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;// 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);}else{// 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]);// 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,isLoader,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,{isLoader:{type:ControlType.Boolean,title:\"Style\",defaultValue:true,enabledTitle:\"Loader\",disabledTitle:\"Linear\"},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\":{\"framerDisableUnlinking\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"LoaderCounter\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./LoaderCounter.map"],"mappings":"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"}