{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/bAWAa03djoLQQoGthc9h/kHjXYWSuQVS6beyOTloc/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={days:0,hours:0,minutes:0,seconds:0};if(timeDifference>0){timeUnits.days=Math.floor(timeDifference/(1e3*60*60*24));timeUnits.hours=Math.floor(timeDifference/(1e3*60*60)%24);timeUnits.minutes=Math.floor(timeDifference/(1e3*60)%60);timeUnits.seconds=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})]},`time-unit-${unit}-${index}`)):/*#__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:\"2025-07-20\",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\":{\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"600\",\"framerSupportedLayoutHeight\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./LaunchTimer.map"],
  "mappings": "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",
  "names": ["LaunchTimer", "labelFontSettings", "fontColor", "maxDigitFontSize", "targetDate", "targetTime", "endMessage", "endMessageFontSettings", "enableFadeIn", "fadeInDelay", "fadeInDuration", "fadeInEasing", "staggerDuration", "remainingTime", "setRemainingTime", "ye", "determineRemainingTime", "hasEnded", "setHasEnded", "digitFontSize", "setDigitFontSize", "containerRef", "pe", "getFadeInAnimation", "index", "ue", "countdownTimer", "newRemainingTime", "unit", "resizeObserver", "entries", "entry", "width", "newFontSize", "date", "time", "timeDifference", "timeUnits", "formatNumber", "num", "commonStyle", "digitStyle", "labelStyle", "endMessageStyle", "p", "u", "motion", "addPropertyControls", "ControlType", "props"]
}
