{"version":3,"file":"LaunchTimer.B8StfkJS.mjs","names":["useState","useRef"],"sources":["https:/framerusercontent.com/modules/oOjb5xl5EeYDzd5geMf0/00WXapGiwFJzOBE8q9xO/LaunchTimer.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useState,useEffect,useRef}from\"react\";import{addPropertyControls,ControlType}from\"framer\";import{motion}from\"framer-motion\";/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any\n * @framerIntrinsicWidth 600\n */export default function LaunchTimer({labelFontSettings,fontColor,maxDigitFontSize,targetDate,targetTime,endMessage,endMessageFontSettings,enableFadeIn,fadeInDelay,fadeInDuration,fadeInEasing,staggerDuration}){// State for remaining time, end flag, and digit font size\nconst[remainingTime,setRemainingTime]=useState(determineRemainingTime(targetDate,targetTime));const[hasEnded,setHasEnded]=useState(false);const[digitFontSize,setDigitFontSize]=useState(\"1em\");const containerRef=useRef(null)// Reference for the container element\n;// Function to get animation settings for each label\n// Only apply animation if enableFadeIn is true\nconst getFadeInAnimation=index=>enableFadeIn?{initial:{opacity:0},animate:{opacity:1},transition:{delay:fadeInDelay+staggerDuration*index,duration:fadeInDuration,ease:fadeInEasing}}:{};// Effect for countdown logic\nuseEffect(()=>{setRemainingTime(determineRemainingTime(targetDate,targetTime));setHasEnded(false);// Interval to update remaining time every second\nconst countdownTimer=setInterval(()=>{const newRemainingTime=determineRemainingTime(targetDate,targetTime);setRemainingTime(newRemainingTime);// Check if countdown has ended\nif(Object.values(newRemainingTime).every(unit=>unit===0)){setHasEnded(true);clearInterval(countdownTimer);}},1e3);return()=>clearInterval(countdownTimer);},[targetDate,targetTime]);// Effect for responsive font size adjustment\nuseEffect(()=>{// ResizeObserver to adjust digit font size based on container width\nconst resizeObserver=new ResizeObserver(entries=>{for(let entry of entries){const{width}=entry.contentRect;let newFontSize=width/7// Calculation for responsive font size\n;newFontSize=Math.min(newFontSize,maxDigitFontSize)// Cap at max size\n;setDigitFontSize(`${newFontSize}px`);}});// Observe container for size changes\nif(containerRef.current){resizeObserver.observe(containerRef.current);}return()=>{if(containerRef.current){resizeObserver.unobserve(containerRef.current);}};},[maxDigitFontSize]);// Function to calculate remaining time\nfunction determineRemainingTime(date,time){const timeDifference=+new Date(`${date}T${time}`)-+new Date;const timeUnits={d:0,h:0,m:0,s:0};if(timeDifference>0){timeUnits.d=Math.floor(timeDifference/(1e3*60*60*24));timeUnits.h=Math.floor(timeDifference/(1e3*60*60)%24);timeUnits.m=Math.floor(timeDifference/(1e3*60)%60);timeUnits.s=Math.floor(timeDifference/1e3%60);}return timeUnits;}// Function to format numbers with leading zeros\nfunction formatNumber(num){return num<10?`0${num}`:num;}// Common style configurations\nconst commonStyle={color:fontColor};// Styles for digits, labels, and end message\nconst digitStyle={...commonStyle,fontSize:digitFontSize,fontFamily:labelFontSettings.fontFamily,fontWeight:labelFontSettings.fontWeight,letterSpacing:\"-0.05em\"};const labelStyle={...commonStyle,fontSize:labelFontSettings.fontSize,fontFamily:labelFontSettings.fontFamily,fontWeight:labelFontSettings.fontWeight,lineHeight:labelFontSettings.lineHeight,letterSpacing:labelFontSettings.letterSpacing,textTransform:\"capitalize\"};const endMessageStyle={...commonStyle,fontSize:endMessageFontSettings.fontSize,fontFamily:endMessageFontSettings.fontFamily,lineHeight:endMessageFontSettings.lineHeight};return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{display:\"flex\",width:\"100%\"},children:!hasEnded?Object.keys(remainingTime).map((unit,index)=>/*#__PURE__*/_jsxs(\"div\",{style:{width:\"25%\",textAlign:\"center\"},children:[/*#__PURE__*/_jsx(\"div\",{style:digitStyle,children:formatNumber(remainingTime[unit])}),/*#__PURE__*/_jsx(motion.div,{style:labelStyle,...getFadeInAnimation(index),children:unit})]},unit)):/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",textAlign:\"center\"},children:/*#__PURE__*/_jsx(\"span\",{style:endMessageStyle,children:endMessage})})});}// Property controls for the LaunchTimer component\naddPropertyControls(LaunchTimer,{maxDigitFontSize:{type:ControlType.Number,title:\"Max Font Size for Digits\",defaultValue:240,min:10,max:500,unit:\"px\"},labelFontSettings:{type:ControlType.Font,controls:\"extended\",displayTextAlignment:false,defaultValue:{fontSize:11},description:\"Font Family also used for digits!\"},fontColor:{type:ControlType.Color,defaultValue:\"#000000\"},targetDate:{type:ControlType.String,defaultValue:\"2024-04-01\",description:\"YYYY-MM-DD\"},targetTime:{type:ControlType.String,defaultValue:\"00:00:00\",description:\"HH:MM:SS\"},endMessage:{type:ControlType.String,defaultValue:\"The Countdown is Complete!\"},endMessageFontSettings:{type:ControlType.Font,controls:\"extended\",displayTextAlignment:false,defaultValue:{fontSize:60}},enableFadeIn:{type:ControlType.Boolean,title:\"Enable Fade-In\",defaultValue:false},fadeInDelay:{type:ControlType.Number,title:\"Fade In Delay\",defaultValue:0,min:0,max:10,unit:\"s\",hidden:props=>!props.enableFadeIn},fadeInDuration:{type:ControlType.Number,title:\"Fade In Duration\",defaultValue:1,min:.1,max:5,unit:\"s\",hidden:props=>!props.enableFadeIn},fadeInEasing:{type:ControlType.Enum,title:\"Fade In Easing\",defaultValue:\"easeOut\",options:[\"linear\",\"easeIn\",\"easeOut\",\"easeInOut\"],optionTitles:[\"Linear\",\"Ease In\",\"Ease Out\",\"Ease In Out\"],hidden:props=>!props.enableFadeIn},staggerDuration:{type:ControlType.Number,title:\"Stagger Duration\",defaultValue:.2,min:0,max:1,unit:\"s\",description:\"Delay between each label's animation\",hidden:props=>!props.enableFadeIn}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"LaunchTimer\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"600\",\"framerSupportedLayoutHeight\":\"any\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./LaunchTimer.map"],"mappings":"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"}