{"version":3,"file":"js/countdown-block.401c42103dfa34004a58.js","mappings":"mBAOA,MAAMA,EAAoB,CAACC,EAA2BC,KAClD,MAAMC,EAAkBF,EAAaG,cAAc,yBAC7CC,EAAkBJ,EAAaG,cAAc,yBAC7CE,EAAmBL,EAAaG,cAAc,0BAC9CG,EAAmBN,EAAaG,cAAc,0BAC9CI,EAAqBP,EAAaG,cAAc,4BAChDK,EAAqBR,EAAaG,cAAc,4BAChDM,EAAqBT,EAAaG,cAAc,4BAChDO,EAAqBV,EAAaG,cAAc,4BAmBhDQ,EAAiB,CAACC,EAA0BC,KAC9C,MAAMC,EAASF,EAAQT,cAAc,sBAC/BY,EAAaH,EAAQT,cAAc,2BACnCa,EAAgBC,SAASH,EAAOI,aAEtC,GAAIL,IAAcG,EACd,OAGJ,MAAMG,EAAMC,SAASC,cAAc,QAC7BC,EAAUF,SAASC,cAAc,QAEvCF,EAAII,UAAUC,IAAI,kBAClBL,EAAIM,aAAa,cAAe,QAChCH,EAAQC,UAAUC,IAAI,uBACtBF,EAAQG,aAAa,cAAe,QACpCN,EAAID,YAAcF,EAAcU,WAChCJ,EAAQK,UAAY,SAASX,WAC7BF,EAAOI,YAAcF,EAAcU,WACnCX,EAAWY,UAAY,SAASd,WAEhCM,EAAIS,iBAAiB,gBAAgB,KACjCT,EAAIU,QAAQ,IAGhBP,EAAQM,iBAAiB,kBAAkB,KACvCN,EAAQK,UAAY,SAASd,UAAkB,IAGnDS,EAAQM,iBAAiB,gBAAgB,KACrCd,EAAOI,YAAcL,EAAUa,WAC/BJ,EAAQO,QAAQ,IAGpBjB,EAAQkB,QAAQX,EAAKG,EAAQ,EAqBd,MACf,MAAMS,EAAeC,aAAY,KAC7B,MAAMC,EA1EW,MACrB,MAAMC,EAAkB,IAAIC,KACtBC,GAASnC,EAAgBoC,UAAYH,EAAgBG,WAAa,IAMxE,MAAO,CACHD,QACAE,KAPSC,KAAKC,MAAMJ,EAAQ,OAQ5BK,MAPUF,KAAKC,MAAMJ,EAAQ,KAAY,IAQzCM,QAPYH,KAAKC,MAAOJ,EAAQ,IAAO,GAQvCO,QAPYJ,KAAKC,MAAMJ,EAAQ,IAQlC,EA4DyBQ,GApBV,CAACX,IACbA,EAAcG,MAAQ,IACtBH,EAAcK,KAAO,EACrBL,EAAcQ,MAAQ,EACtBR,EAAcS,QAAU,EACxBT,EAAcU,QAAU,GAG5BhC,EAAeT,EAAiBqC,KAAKC,MAAMP,EAAcK,KAAO,KAChE3B,EAAeP,EAAiB6B,EAAcK,KAAO,IACrD3B,EAAeN,EAAkBkC,KAAKC,MAAMP,EAAcQ,MAAQ,KAClE9B,EAAeL,EAAkB2B,EAAcQ,MAAQ,IACvD9B,EAAeJ,EAAoBgC,KAAKC,MAAMP,EAAcS,QAAU,KACtE/B,EAAeH,EAAoByB,EAAcS,QAAU,IAC3D/B,EAAeF,EAAoB8B,KAAKC,MAAMP,EAAcU,QAAU,KACtEhC,EAAeD,EAAoBuB,EAAcU,QAAU,GAAG,EAM1DE,CAAYZ,GAERA,EAAcG,OAAS,GACvBU,cAAcf,E,GAEnB,IAAK,EAGZgB,EAAY,EAGhB3B,SAASQ,iBAAiB,oBAAoB,KAC1C,MAAMoB,EAAyB5B,SAAS6B,iBAAiB,oBAErDD,EAAuBE,OAAS,GAChCF,EAAuBG,SAASnD,IAC5B,MAAMoD,EAAwCpD,EAAaG,cAAc,6BACzE,IAAKiD,EACD,OAGJ,MAAMnD,EAAkB,IAAIkC,KAAKiB,EAAeC,QAAQpD,iBAExDF,EAAkBC,EAAcC,EAAgB,G","sources":["webpack:///./Features/Components/CountdownBlock/scripts/countdownBlock.ts"],"sourcesContent":["interface ITimeRemaining {\r\n total: number,\r\n days: number,\r\n hours: number,\r\n minutes: number,\r\n seconds: number\r\n}\r\nconst useCountdownBlock = (blockElement: HTMLElement, countToDateTime: Date): void => {\r\n const daysTensElement = blockElement.querySelector('.flip-card--days-tens') as HTMLSpanElement;\r\n const daysOnesElement = blockElement.querySelector('.flip-card--days-ones') as HTMLSpanElement;\r\n const hoursTensElement = blockElement.querySelector('.flip-card--hours-tens') as HTMLSpanElement;\r\n const hoursOnesElement = blockElement.querySelector('.flip-card--hours-ones') as HTMLSpanElement;\r\n const minutesTensElement = blockElement.querySelector('.flip-card--minutes-tens') as HTMLSpanElement;\r\n const minutesOnesElement = blockElement.querySelector('.flip-card--minutes-ones') as HTMLSpanElement;\r\n const secondsTensElement = blockElement.querySelector('.flip-card--seconds-tens') as HTMLSpanElement;\r\n const secondsOnesElement = blockElement.querySelector('.flip-card--seconds-ones') as HTMLSpanElement;\r\n \r\n const getTimeRemaining = (): ITimeRemaining => {\r\n const currentDateTime = new Date();\r\n const total = (countToDateTime.getTime() - currentDateTime.getTime()) / 1000;\r\n const days = Math.floor(total / (60 * 60 * 24));\r\n const hours = Math.floor(total / (60 * 60) % 24);\r\n const minutes = Math.floor((total / 60)) % 60;\r\n const seconds = Math.floor(total % 60);\r\n\r\n return {\r\n total,\r\n days,\r\n hours,\r\n minutes,\r\n seconds\r\n };\r\n }\r\n \r\n const updateFlipCard = (element: HTMLSpanElement, newNumber: number): void => {\r\n const bottom = element.querySelector('.flip-card__bottom') as HTMLSpanElement;\r\n const bottomBack = element.querySelector('.flip-card__bottom-back') as HTMLSpanElement;\r\n const initialNumber = parseInt(bottom.textContent as string);\r\n \r\n if (newNumber === initialNumber) {\r\n return;\r\n }\r\n \r\n const top = document.createElement('span');\r\n const topBack = document.createElement('span');\r\n \r\n top.classList.add('flip-card__top');\r\n top.setAttribute('aria-hidden', 'true');\r\n topBack.classList.add('flip-card__top-back');\r\n topBack.setAttribute('aria-hidden', 'true');\r\n top.textContent = initialNumber.toString();\r\n topBack.innerHTML = `${initialNumber}`;\r\n bottom.textContent = initialNumber.toString();\r\n bottomBack.innerHTML = `${newNumber}`;\r\n \r\n top.addEventListener('animationend', () => {\r\n top.remove();\r\n });\r\n \r\n topBack.addEventListener('animationstart', () => {\r\n topBack.innerHTML = `${newNumber}`;\r\n });\r\n\r\n topBack.addEventListener('animationend', () => {\r\n bottom.textContent = newNumber.toString();\r\n topBack.remove();\r\n });\r\n \r\n element.prepend(top, topBack);\r\n }\r\n \r\n const updateTimer = (timeRemaining: ITimeRemaining): void => {\r\n if (timeRemaining.total < 0) {\r\n timeRemaining.days = 0;\r\n timeRemaining.hours = 0;\r\n timeRemaining.minutes = 0;\r\n timeRemaining.seconds = 0;\r\n }\r\n\r\n updateFlipCard(daysTensElement, Math.floor(timeRemaining.days / 10));\r\n updateFlipCard(daysOnesElement, timeRemaining.days % 10);\r\n updateFlipCard(hoursTensElement, Math.floor(timeRemaining.hours / 10));\r\n updateFlipCard(hoursOnesElement, timeRemaining.hours % 10);\r\n updateFlipCard(minutesTensElement, Math.floor(timeRemaining.minutes / 10));\r\n updateFlipCard(minutesOnesElement, timeRemaining.minutes % 10);\r\n updateFlipCard(secondsTensElement, Math.floor(timeRemaining.seconds / 10));\r\n updateFlipCard(secondsOnesElement, timeRemaining.seconds % 10);\r\n }\r\n \r\n const initialize = (): void => {\r\n const timeInterval = setInterval(() => {\r\n const timeRemaining = getTimeRemaining();\r\n updateTimer(timeRemaining);\r\n\r\n if (timeRemaining.total <= 0) {\r\n clearInterval(timeInterval);\r\n }\r\n }, 1000);\r\n }\r\n \r\n initialize();\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n const countdownBlockElements = document.querySelectorAll('.countdown-block') as NodeListOf;\r\n\r\n if (countdownBlockElements.length > 0) {\r\n countdownBlockElements.forEach((blockElement) => {\r\n const contentElement: HTMLDivElement | null = blockElement.querySelector('.countdown-block__content');\r\n if (!contentElement) {\r\n return;\r\n }\r\n\r\n const countToDateTime = new Date(contentElement.dataset.countToDateTime as string);\r\n \r\n useCountdownBlock(blockElement, countToDateTime);\r\n })\r\n }\r\n});\r\n"],"names":["useCountdownBlock","blockElement","countToDateTime","daysTensElement","querySelector","daysOnesElement","hoursTensElement","hoursOnesElement","minutesTensElement","minutesOnesElement","secondsTensElement","secondsOnesElement","updateFlipCard","element","newNumber","bottom","bottomBack","initialNumber","parseInt","textContent","top","document","createElement","topBack","classList","add","setAttribute","toString","innerHTML","addEventListener","remove","prepend","timeInterval","setInterval","timeRemaining","currentDateTime","Date","total","getTime","days","Math","floor","hours","minutes","seconds","getTimeRemaining","updateTimer","clearInterval","initialize","countdownBlockElements","querySelectorAll","length","forEach","contentElement","dataset"],"sourceRoot":""}