{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/hFaFm7mjZbVzfYCxbmUQ/yNqSq5YNgjRH4FR2Kiaa/Animated_counter.js"],
  "sourcesContent": ["import{jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{motion,useMotionValue,animate,useInView}from\"framer-motion\";/**\n * @framerDisableUnlink\n * @framerIntrinsicWidth 100\n * @framerIntrinsicHeight 100\n */export default function AnimatedNumberCounter(props){const{mode,start,end,value,decimals,commas,color,animation,prefix,suffix,userSelect,tag,monospace,font,style}=props;// V\u00E9rification si on est dans le canvas Framer\nconst isCanvas=RenderTarget.current()===RenderTarget.canvas;// Utilisation de la balise motion sp\u00E9cifi\u00E9e\nconst MotionTag=motion[tag];// D\u00E9termine si on est en mode \"default\" ou \"variants\"\nconst isDefault=mode===\"default\";// Valeur initiale selon le mode\nconst initialValue=isDefault?start:value;const transition=isDefault?animation.transition:props.transition;// Fonction de formatage du nombre\nconst formatNumber=num=>{// Cr\u00E9e une cha\u00EEne avec le nombre fixe de d\u00E9cimales\nconst fixed=num.toFixed(decimals);// Supprime les z\u00E9ros inutiles en convertissant en nombre puis en cha\u00EEne\nconst withoutTrailingZeros=parseFloat(fixed).toString();if(commas){// S\u00E9pare la cha\u00EEne en partie enti\u00E8re et d\u00E9cimale\nconst parts=withoutTrailingZeros.split(\".\");// Applique la regex uniquement sur la partie enti\u00E8re\n// Attention : utiliser /\\B(?=(\\d{5})+(?!\\d))/g ins\u00E8re une virgule tous les 5 chiffres dans la partie enti\u00E8re.\nparts[0]=parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g,\",\");return parts.join(\".\");}return withoutTrailingZeros;};// \u00C9tat local pour le nombre affich\u00E9 et l'animation en cours\nconst[currentNumber,setCurrentNumber]=React.useState(initialValue);const[currentAnimation,setCurrentAnimation]=React.useState(null);// R\u00E9f\u00E9rence et d\u00E9tection de l'apparition dans la vue\nconst ref=React.useRef(null);const isInView=useInView(ref,{once:!animation.replay,amount:\"some\"});// Motion value (pour usage ult\u00E9rieur)\nconst motionValue=useMotionValue(value);// Fonction pour lancer l'animation\nconst runAnimation=(from,to)=>{if(!isCanvas){if(currentAnimation){currentAnimation.stop();}setCurrentAnimation(animate(from,to,{...transition,onUpdate:latest=>{setCurrentNumber(latest);}}));}};// D\u00E9clenche l'animation lors de l'apparition\nReact.useEffect(()=>{if(isDefault&&animation.trigger===\"appear\"){runAnimation(start,end);}},[]);// D\u00E9clenche l'animation quand le composant appara\u00EEt dans la vue\nReact.useEffect(()=>{if(isDefault&&animation.trigger===\"layerInView\"){if(isInView){runAnimation(start,end);}else{if(currentAnimation){currentAnimation.stop();}setCurrentNumber(start);}}},[isInView]);// En mode \"variants\", l'animation se d\u00E9clenche sur changement de valeur\nReact.useEffect(()=>{if(!isDefault){runAnimation(currentNumber,value);}},[value]);// D\u00E9finition du style du texte\nconst textStyle={userSelect:userSelect?\"auto\":\"none\",fontVariantNumeric:monospace?\"tabular-nums\":undefined,margin:0,...color.mode===\"solid\"?{color:color.color}:{WebkitBackgroundClip:\"text\",WebkitTextFillColor:\"transparent\",backgroundImage:`linear-gradient(${color.angle}deg, ${color.startColor}, ${color.endColor})`},...font,...style};return /*#__PURE__*/_jsxs(MotionTag,{ref:ref,style:textStyle,children:[prefix,formatNumber(isCanvas?initialValue:currentNumber),suffix]});}AnimatedNumberCounter.displayName=\"Animated Number Counter\";addPropertyControls(AnimatedNumberCounter,{mode:{type:ControlType.Enum,options:[\"default\",\"variants\"],optionTitles:[\"Default\",\"Variants\"],displaySegmentedControl:true},value:{type:ControlType.Number,defaultValue:0,hidden:props=>props.mode!==\"variants\"},start:{type:ControlType.Number,defaultValue:0,hidden:props=>props.mode!==\"default\"},end:{type:ControlType.Number,defaultValue:100,hidden:props=>props.mode!==\"default\"},animation:{type:ControlType.Object,icon:\"effect\",hidden:props=>props.mode!==\"default\",controls:{trigger:{type:ControlType.Enum,defaultValue:\"layerInView\",options:[\"appear\",\"layerInView\"],optionTitles:[\"Appear\",\"Layer in View\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},replay:{type:ControlType.Boolean,defaultValue:true,hidden(props){return props.trigger!==\"layerInView\";}},transition:{type:ControlType.Transition,defaultValue:{type:\"spring\",duration:1,bounce:0}}}},transition:{type:ControlType.Transition,defaultValue:{type:\"spring\",duration:1,bounce:0},hidden:props=>props.mode!==\"variants\"},decimals:{type:ControlType.Enum,defaultValue:0,// Vous pouvez choisir d'afficher jusqu'\u00E0 5 d\u00E9cimales\noptions:[0,1,2,3,4,5],optionTitles:[\"Off\",\"1\",\"2\",\"3\",\"4\",\"5\"],displaySegmentedControl:true},commas:{type:ControlType.Boolean,defaultValue:true},font:{type:\"font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:16,lineHeight:1}},color:{type:ControlType.Object,controls:{mode:{type:ControlType.Enum,defaultValue:\"solid\",options:[\"solid\",\"gradient\"],optionTitles:[\"Solid\",\"Gradient\"],displaySegmentedControl:true},color:{type:ControlType.Color,defaultValue:\"#000\",hidden:props=>props.mode!==\"solid\"},startColor:{type:ControlType.Color,defaultValue:\"#000\",hidden:props=>props.mode!==\"gradient\"},endColor:{type:ControlType.Color,defaultValue:\"#FFF\",hidden:props=>props.mode!==\"gradient\"},angle:{type:ControlType.Number,defaultValue:180,min:-360,max:360,unit:\"\\xb0\",hidden:props=>props.mode!==\"gradient\"}}},prefix:{type:ControlType.String,placeholder:\"Prefix\"},suffix:{type:ControlType.String,placeholder:\"Suffix\"},userSelect:{type:ControlType.Boolean,defaultValue:true},tag:{type:ControlType.Enum,defaultValue:\"p\",displaySegmentedControl:true,options:[\"h1\",\"h2\",\"h3\",\"p\"],optionTitles:[\"H1\",\"H2\",\"H3\",\"P\"]},monospace:{type:ControlType.Boolean,defaultValue:false,description:\"Component by https://lplabs.io \"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"AnimatedNumberCounter\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"100\",\"framerDisableUnlink\":\"* @framerIntrinsicWidth 100\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Animated_counter.map"],
  "mappings": "iJAIkB,SAARA,EAAuCC,EAAM,CAAC,GAAK,CAAC,KAAAC,EAAK,MAAAC,EAAM,IAAAC,EAAI,MAAAC,EAAM,SAAAC,EAAS,OAAAC,EAAO,MAAAC,EAAM,UAAAC,EAAU,OAAAC,EAAO,OAAAC,EAAO,WAAAC,EAAW,IAAAC,EAAI,UAAAC,EAAU,KAAAC,EAAK,MAAAC,CAAK,EAAEf,EAChKgB,EAASC,EAAa,QAAQ,IAAIA,EAAa,OAC/CC,EAAUC,EAAOP,CAAG,EACpBQ,EAAUnB,IAAO,UACjBoB,EAAaD,EAAUlB,EAAME,EAAYkB,EAAWF,EAAUZ,EAAU,WAAWR,EAAM,WACzFuB,EAAaC,GAAK,CACxB,IAAMC,EAAMD,EAAI,QAAQnB,CAAQ,EAC1BqB,EAAqB,WAAWD,CAAK,EAAE,SAAS,EAAE,GAAGnB,EAAO,CAClE,IAAMqB,EAAMD,EAAqB,MAAM,GAAG,EAE1C,OAAAC,EAAM,CAAC,EAAEA,EAAM,CAAC,EAAE,QAAQ,wBAAwB,GAAG,EAASA,EAAM,KAAK,GAAG,EAAG,OAAOD,CAAqB,EACtG,CAACE,EAAcC,CAAgB,EAAQC,EAAST,CAAY,EAAO,CAACU,EAAiBC,CAAmB,EAAQF,EAAS,IAAI,EAC5HG,EAAUC,EAAO,IAAI,EAAQC,EAASC,EAAUH,EAAI,CAAC,KAAK,CAACzB,EAAU,OAAO,OAAO,MAAM,CAAC,EAC1F6B,EAAYC,EAAelC,CAAK,EAChCmC,EAAa,CAACC,EAAKC,IAAK,CAAKzB,IAAae,GAAkBA,EAAiB,KAAK,EAAGC,EAAoBU,EAAQF,EAAKC,EAAG,CAAC,GAAGnB,EAAW,SAASqB,GAAQ,CAACd,EAAiBc,CAAM,CAAE,CAAC,CAAC,CAAC,EAAG,EACzLC,EAAU,IAAI,CAAIxB,GAAWZ,EAAU,UAAU,UAAU+B,EAAarC,EAAMC,CAAG,CAAG,EAAE,CAAC,CAAC,EACxFyC,EAAU,IAAI,CAAIxB,GAAWZ,EAAU,UAAU,gBAAkB2B,EAAUI,EAAarC,EAAMC,CAAG,GAAW4B,GAAkBA,EAAiB,KAAK,EAAGF,EAAiB3B,CAAK,GAAI,EAAE,CAACiC,CAAQ,CAAC,EAC/LS,EAAU,IAAI,CAAKxB,GAAWmB,EAAaX,EAAcxB,CAAK,CAAG,EAAE,CAACA,CAAK,CAAC,EAChF,IAAMyC,EAAU,CAAC,WAAWlC,EAAW,OAAO,OAAO,mBAAmBE,EAAU,eAAe,OAAU,OAAO,EAAE,GAAGN,EAAM,OAAO,QAAQ,CAAC,MAAMA,EAAM,KAAK,EAAE,CAAC,qBAAqB,OAAO,oBAAoB,cAAc,gBAAgB,mBAAmBA,EAAM,aAAaA,EAAM,eAAeA,EAAM,WAAW,EAAE,GAAGO,EAAK,GAAGC,CAAK,EAAE,OAAoB+B,EAAM5B,EAAU,CAAC,IAAIe,EAAI,MAAMY,EAAU,SAAS,CAACpC,EAAOc,EAAaP,EAASK,EAAaO,CAAa,EAAElB,CAAM,CAAC,CAAC,CAAE,CAACX,EAAsB,YAAY,0BAA0BgD,EAAoBhD,EAAsB,CAAC,KAAK,CAAC,KAAKiD,EAAY,KAAK,QAAQ,CAAC,UAAU,UAAU,EAAE,aAAa,CAAC,UAAU,UAAU,EAAE,wBAAwB,EAAI,EAAE,MAAM,CAAC,KAAKA,EAAY,OAAO,aAAa,EAAE,OAAOhD,GAAOA,EAAM,OAAO,UAAU,EAAE,MAAM,CAAC,KAAKgD,EAAY,OAAO,aAAa,EAAE,OAAOhD,GAAOA,EAAM,OAAO,SAAS,EAAE,IAAI,CAAC,KAAKgD,EAAY,OAAO,aAAa,IAAI,OAAOhD,GAAOA,EAAM,OAAO,SAAS,EAAE,UAAU,CAAC,KAAKgD,EAAY,OAAO,KAAK,SAAS,OAAOhD,GAAOA,EAAM,OAAO,UAAU,SAAS,CAAC,QAAQ,CAAC,KAAKgD,EAAY,KAAK,aAAa,cAAc,QAAQ,CAAC,SAAS,aAAa,EAAE,aAAa,CAAC,SAAS,eAAe,EAAE,wBAAwB,GAAK,0BAA0B,UAAU,EAAE,OAAO,CAAC,KAAKA,EAAY,QAAQ,aAAa,GAAK,OAAOhD,EAAM,CAAC,OAAOA,EAAM,UAAU,aAAc,CAAC,EAAE,WAAW,CAAC,KAAKgD,EAAY,WAAW,aAAa,CAAC,KAAK,SAAS,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,KAAKA,EAAY,WAAW,aAAa,CAAC,KAAK,SAAS,SAAS,EAAE,OAAO,CAAC,EAAE,OAAOhD,GAAOA,EAAM,OAAO,UAAU,EAAE,SAAS,CAAC,KAAKgD,EAAY,KAAK,aAAa,EACnlD,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,aAAa,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,wBAAwB,EAAI,EAAE,OAAO,CAAC,KAAKA,EAAY,QAAQ,aAAa,EAAI,EAAE,KAAK,CAAC,KAAK,OAAO,SAAS,WAAW,gBAAgB,aAAa,aAAa,CAAC,SAAS,GAAG,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,KAAKA,EAAY,OAAO,SAAS,CAAC,KAAK,CAAC,KAAKA,EAAY,KAAK,aAAa,QAAQ,QAAQ,CAAC,QAAQ,UAAU,EAAE,aAAa,CAAC,QAAQ,UAAU,EAAE,wBAAwB,EAAI,EAAE,MAAM,CAAC,KAAKA,EAAY,MAAM,aAAa,OAAO,OAAOhD,GAAOA,EAAM,OAAO,OAAO,EAAE,WAAW,CAAC,KAAKgD,EAAY,MAAM,aAAa,OAAO,OAAOhD,GAAOA,EAAM,OAAO,UAAU,EAAE,SAAS,CAAC,KAAKgD,EAAY,MAAM,aAAa,OAAO,OAAOhD,GAAOA,EAAM,OAAO,UAAU,EAAE,MAAM,CAAC,KAAKgD,EAAY,OAAO,aAAa,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,OAAO,OAAOhD,GAAOA,EAAM,OAAO,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,KAAKgD,EAAY,OAAO,YAAY,QAAQ,EAAE,OAAO,CAAC,KAAKA,EAAY,OAAO,YAAY,QAAQ,EAAE,WAAW,CAAC,KAAKA,EAAY,QAAQ,aAAa,EAAI,EAAE,IAAI,CAAC,KAAKA,EAAY,KAAK,aAAa,IAAI,wBAAwB,GAAK,QAAQ,CAAC,KAAK,KAAK,KAAK,GAAG,EAAE,aAAa,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,EAAE,UAAU,CAAC,KAAKA,EAAY,QAAQ,aAAa,GAAM,YAAY,iCAAiC,CAAC,CAAC",
  "names": ["AnimatedNumberCounter", "props", "mode", "start", "end", "value", "decimals", "commas", "color", "animation", "prefix", "suffix", "userSelect", "tag", "monospace", "font", "style", "isCanvas", "RenderTarget", "MotionTag", "motion", "isDefault", "initialValue", "transition", "formatNumber", "num", "fixed", "withoutTrailingZeros", "parts", "currentNumber", "setCurrentNumber", "ye", "currentAnimation", "setCurrentAnimation", "ref", "pe", "isInView", "useInView", "motionValue", "useMotionValue", "runAnimation", "from", "to", "animate", "latest", "ue", "textStyle", "u", "addPropertyControls", "ControlType"]
}
