{"version":3,"file":"GradientCounter.DoRa9rl_.mjs","names":["React.useState","React.useRef"],"sources":["https:/framerusercontent.com/modules/KGbSwrXss0FtaUmIgXiT/ByGcAbCNj8NqzRJqZusT/GradientCounter.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{motion}from\"framer-motion\";import{addPropertyControls,ControlType}from\"framer\";export default function GradientCountdown(props){const{start=10,end=0,duration=5,decimals=0,fontSize=64,loop=false,gradientStart=\"#ff6ec4\",gradientEnd=\"#7873f5\",font}=props;const[value,setValue]=React.useState(start);const[hasStarted,setHasStarted]=React.useState(false);const startTimeRef=React.useRef(null);const rafRef=React.useRef(null);const containerRef=React.useRef(null);const formatValue=val=>val.toFixed(decimals);const animate=timestamp=>{if(!startTimeRef.current)startTimeRef.current=timestamp;const elapsed=(timestamp-startTimeRef.current)/1e3;const progress=Math.min(elapsed/duration,1);const interpolated=start+(end-start)*progress;setValue(interpolated);if(progress<1){rafRef.current=requestAnimationFrame(animate);}else if(loop){startTimeRef.current=null;rafRef.current=requestAnimationFrame(animate);}};// IntersectionObserver — démarre l'animation quand visible\nReact.useEffect(()=>{const el=containerRef.current;if(!el)return;const observer=new IntersectionObserver(entries=>{entries.forEach(entry=>{if(entry.isIntersecting&&!hasStarted){setHasStarted(true);}});},{threshold:.3});observer.observe(el);return()=>observer.disconnect();},[hasStarted]);// Lance l'animation uniquement quand hasStarted passe à true\nReact.useEffect(()=>{if(!hasStarted)return;cancelAnimationFrame(rafRef.current);setValue(start);startTimeRef.current=null;rafRef.current=requestAnimationFrame(animate);return()=>cancelAnimationFrame(rafRef.current);},[hasStarted,start,end,duration,loop]);const gradientStyle={background:`linear-gradient(90deg, ${gradientStart}, ${gradientEnd})`,WebkitBackgroundClip:\"text\",WebkitTextFillColor:\"transparent\",fontSize:typeof fontSize===\"number\"?`${fontSize}px`:fontSize,fontWeight:font?.fontWeight??700,fontFamily:font?.fontFamily??\"sans-serif\",lineHeight:font?.lineHeight??1.1,textAlign:\"center\",userSelect:\"none\"};return /*#__PURE__*/_jsx(motion.div,{ref:containerRef,style:{display:\"flex\",justifyContent:\"center\",alignItems:\"center\",width:\"100%\",height:\"100%\"},children:/*#__PURE__*/_jsx(\"div\",{style:gradientStyle,children:formatValue(hasStarted?value:start)})});}addPropertyControls(GradientCountdown,{start:{type:ControlType.Number,title:\"Start\",defaultValue:10},end:{type:ControlType.Number,title:\"End\",defaultValue:0},duration:{type:ControlType.Number,title:\"Duration (s)\",defaultValue:5,min:1,step:.1},decimals:{type:ControlType.Number,title:\"Decimals\",defaultValue:0,min:0,max:4,step:1},loop:{type:ControlType.Boolean,title:\"Loop\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},gradientStart:{type:ControlType.Color,title:\"Gradient Start\",defaultValue:\"#ff6ec4\"},gradientEnd:{type:ControlType.Color,title:\"Gradient End\",defaultValue:\"#7873f5\"},fontSize:{type:ControlType.Number,title:\"Font Size\",defaultValue:64,min:10,max:300,step:1,unit:\"px\"},font:{type:ControlType.Font,title:\"Font\",defaultValue:{fontFamily:\"system-ui\",fontWeight:700,lineHeight:1.1},controls:\"extended\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"GradientCountdown\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./GradientCounter.map"],"mappings":"oOAA6J,SAAwB,EAAkB,EAAM,CAAC,GAAK,CAAC,QAAM,GAAG,MAAI,EAAE,WAAS,EAAE,WAAS,EAAE,WAAS,GAAG,OAAK,GAAM,gBAAc,UAAU,cAAY,UAAU,QAAM,EAAW,CAAC,EAAM,GAAUA,EAAe,CAAK,EAAO,CAAC,EAAW,GAAeA,EAAe,EAAK,EAAQ,EAAaC,EAAa,IAAI,EAAQ,EAAOA,EAAa,IAAI,EAAQ,EAAaA,EAAa,IAAI,EAAQ,EAAY,GAAK,EAAI,QAAQ,CAAQ,EAAQ,EAAQ,GAAW,CAAC,AAAyB,EAAa,UAAQ,EAAU,IAAM,GAAS,EAAU,EAAa,SAAS,IAAU,EAAS,KAAK,IAAI,EAAQ,EAAS,CAAC,EAAQ,EAAa,GAAO,EAAI,GAAO,EAAS,EAAS,CAAY,EAAK,EAAS,EAAG,EAAO,QAAQ,sBAAsB,CAAO,EAAW,IAAM,EAAa,QAAQ,KAAK,EAAO,QAAQ,sBAAsB,CAAO,EAAG,EACh9B,MAAoB,CAAC,IAAM,EAAG,EAAa,QAAQ,GAAG,CAAC,EAAG,OAAO,IAAM,EAAS,IAAI,qBAAqB,GAAS,CAAC,EAAQ,QAAQ,GAAO,CAAI,EAAM,gBAAgB,CAAC,GAAY,EAAc,EAAI,CAAG,CAAC,CAAE,EAAE,CAAC,UAAU,EAAE,CAAC,EAAuB,OAArB,EAAS,QAAQ,CAAE,MAAY,EAAS,WAAW,CAAE,EAAE,CAAC,CAAU,CAAC,EAC9R,MAAoB,CAAK,KAA+I,OAA7H,qBAAqB,EAAO,OAAO,EAAE,EAAS,CAAK,EAAE,EAAa,QAAQ,KAAK,EAAO,QAAQ,sBAAsB,CAAO,MAAY,qBAAqB,EAAO,OAAO,CAAE,EAAE,CAAC,EAAW,EAAM,EAAI,EAAS,CAAI,CAAC,EAAE,IAAM,EAAc,CAAC,WAAW,0BAA0B,EAAc,IAAI,EAAY,GAAG,qBAAqB,OAAO,oBAAoB,cAAc,SAAS,OAAO,GAAW,SAAS,GAAG,EAAS,IAAI,EAAS,WAAW,GAAM,YAAY,IAAI,WAAW,GAAM,YAAY,aAAa,WAAW,GAAM,YAAY,IAAI,UAAU,SAAS,WAAW,MAAM,EAAE,OAAoB,EAAK,EAAO,IAAI,CAAC,IAAI,EAAa,MAAM,CAAC,QAAQ,OAAO,eAAe,SAAS,WAAW,SAAS,MAAM,OAAO,OAAO,MAAM,EAAE,SAAsB,EAAK,MAAM,CAAC,MAAM,EAAc,SAAS,EAAY,EAAW,EAAM,CAAK,CAAC,CAAC,CAAC,CAAC,CAAE,iBAFxzB,IAA4B,IAAkC,IAAoD,EAEusB,EAAoB,EAAkB,CAAC,MAAM,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,aAAa,EAAE,EAAE,IAAI,CAAC,KAAK,EAAY,OAAO,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,EAAY,QAAQ,MAAM,OAAO,aAAa,GAAM,aAAa,KAAK,cAAc,KAAK,EAAE,cAAc,CAAC,KAAK,EAAY,MAAM,MAAM,iBAAiB,aAAa,SAAS,EAAE,YAAY,CAAC,KAAK,EAAY,MAAM,MAAM,eAAe,aAAa,SAAS,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,aAAa,GAAG,IAAI,GAAG,IAAI,IAAI,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,CAAC,KAAK,EAAY,KAAK,MAAM,OAAO,aAAa,CAAC,WAAW,YAAY,WAAW,IAAI,WAAW,GAAG,EAAE,SAAS,UAAU,CAAC,CAAC"}