-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.min.js
1 lines (1 loc) · 55.1 KB
/
main.min.js
1
const elements=document.getElementsByClassName("pop-up_container");for(let i=0;i<elements.length;i++)elements[i].addEventListener("click",(function(){elements[i].classList.remove("active")}));const COUNTER_TIMEOUT=2e3,counters=document.getElementsByClassName("animated-counter");for(let counter of counters){const value=parseFloat(counter.innerText),durationEach=2e3/value;animateCounter(counter,value,durationEach)}function animateCounter(counter,value,duration){let count=0;const interval=setInterval(()=>{count>=value?clearInterval(interval):(duration<10?count+=2:count++,counter.innerText=count)},duration)}const progressBars=document.getElementsByClassName("progress-bar");for(let progressBar of progressBars){const value=parseFloat(progressBar.getAttribute("value")),max=parseFloat(progressBar.getAttribute("max")),percentage=value/max*100;progressBar.style.width=`${percentage}%`,progressBar.innerHTML=`${percentage}%`}!function(){"use strict";function hasProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}function lastItemOf(arr){return arr[arr.length-1]}function pushUnique(arr,...items){return items.forEach(item=>{arr.includes(item)||arr.push(item)}),arr}function stringToArray(str,separator){return str?str.split(separator):[]}function isInRange(testVal,min,max){const minOK=void 0===min||testVal>=min,maxOK=void 0===max||testVal<=max;return minOK&&maxOK}function limitToRange(val,min,max){return val<min?min:val>max?max:val}function createTagRepeat(tagName,repeat,attributes={},index=0,html=""){const openTagSrc=Object.keys(attributes).reduce((src,attr)=>{let val=attributes[attr];return"function"==typeof val&&(val=val(index)),`${src} ${attr}="${val}"`},tagName);html+=`<${openTagSrc}></${tagName}>`;const next=index+1;return next<repeat?createTagRepeat(tagName,repeat,attributes,next,html):html}function optimizeTemplateHTML(html){return html.replace(/>\s+/g,">").replace(/\s+</,"<")}function stripTime(timeValue){return new Date(timeValue).setHours(0,0,0,0)}function today(){return(new Date).setHours(0,0,0,0)}function dateValue(...args){switch(args.length){case 0:return today();case 1:return stripTime(args[0])}const newDate=new Date(0);return newDate.setFullYear(...args),newDate.setHours(0,0,0,0)}function addDays(date,amount){const newDate=new Date(date);return newDate.setDate(newDate.getDate()+amount)}function addWeeks(date,amount){return addDays(date,7*amount)}function addMonths(date,amount){const newDate=new Date(date),monthsToSet=newDate.getMonth()+amount;let expectedMonth=monthsToSet%12;expectedMonth<0&&(expectedMonth+=12);const time=newDate.setMonth(monthsToSet);return newDate.getMonth()!==expectedMonth?newDate.setDate(0):time}function addYears(date,amount){const newDate=new Date(date),expectedMonth=newDate.getMonth(),time=newDate.setFullYear(newDate.getFullYear()+amount);return 1===expectedMonth&&2===newDate.getMonth()?newDate.setDate(0):time}function dayDiff(day,from){return(day-from+7)%7}function dayOfTheWeekOf(baseDate,dayOfWeek,weekStart=0){const baseDay=new Date(baseDate).getDay();return addDays(baseDate,dayDiff(dayOfWeek,weekStart)-dayDiff(baseDay,weekStart))}function getWeek(date){const thuOfTheWeek=dayOfTheWeekOf(date,4,1),firstThu=dayOfTheWeekOf(new Date(thuOfTheWeek).setMonth(0,4),4,1);return Math.round((thuOfTheWeek-firstThu)/6048e5)+1}function startOfYearPeriod(date,years){const year=new Date(date).getFullYear();return Math.floor(year/years)*years}function regularizeDate(date,timeSpan,useLastDate){if(1!==timeSpan&&2!==timeSpan)return date;const newDate=new Date(date);return 1===timeSpan?useLastDate?newDate.setMonth(newDate.getMonth()+1,0):newDate.setDate(1):useLastDate?newDate.setFullYear(newDate.getFullYear()+1,0,0):newDate.setMonth(0,1),newDate.setHours(0,0,0,0)}const reFormatTokens=/dd?|DD?|mm?|MM?|yy?(?:yy)?/,reNonDateParts=/[\s!-/:-@[-`{-~年月日]+/;let knownFormats={};const parseFns={y:(date,year)=>new Date(date).setFullYear(parseInt(year,10)),m(date,month,locale){const newDate=new Date(date);let monthIndex=parseInt(month,10)-1;if(isNaN(monthIndex)){if(!month)return NaN;const monthName=month.toLowerCase(),compareNames=name=>name.toLowerCase().startsWith(monthName);if(monthIndex=locale.monthsShort.findIndex(compareNames),monthIndex<0&&(monthIndex=locale.months.findIndex(compareNames)),monthIndex<0)return NaN}return newDate.setMonth(monthIndex),newDate.getMonth()!==normalizeMonth(monthIndex)?newDate.setDate(0):newDate.getTime()},d:(date,day)=>new Date(date).setDate(parseInt(day,10))},formatFns={d:date=>date.getDate(),dd:date=>padZero(date.getDate(),2),D:(date,locale)=>locale.daysShort[date.getDay()],DD:(date,locale)=>locale.days[date.getDay()],m:date=>date.getMonth()+1,mm:date=>padZero(date.getMonth()+1,2),M:(date,locale)=>locale.monthsShort[date.getMonth()],MM:(date,locale)=>locale.months[date.getMonth()],y:date=>date.getFullYear(),yy:date=>padZero(date.getFullYear(),2).slice(-2),yyyy:date=>padZero(date.getFullYear(),4)};function normalizeMonth(monthIndex){return monthIndex>-1?monthIndex%12:normalizeMonth(monthIndex+12)}function padZero(num,length){return num.toString().padStart(length,"0")}function parseFormatString(format){if("string"!=typeof format)throw new Error("Invalid date format.");if(format in knownFormats)return knownFormats[format];const separators=format.split(reFormatTokens),parts=format.match(new RegExp(reFormatTokens,"g"));if(0===separators.length||!parts)throw new Error("Invalid date format.");const partFormatters=parts.map(token=>formatFns[token]),partParserKeys=Object.keys(parseFns).reduce((keys,key)=>{const token=parts.find(part=>"D"!==part[0]&&part[0].toLowerCase()===key);return token&&keys.push(key),keys},[]);return knownFormats[format]={parser(dateStr,locale){const dateParts=dateStr.split(reNonDateParts).reduce((dtParts,part,index)=>{if(part.length>0&&parts[index]){const token=parts[index][0];"M"===token?dtParts.m=part:"D"!==token&&(dtParts[token]=part)}return dtParts},{});return partParserKeys.reduce((origDate,key)=>{const newDate=parseFns[key](origDate,dateParts[key],locale);return isNaN(newDate)?origDate:newDate},today())},formatter(date,locale){let dateStr;return partFormatters.reduce((str,fn,index)=>str+`${separators[index]}${fn(date,locale)}`,"")+lastItemOf(separators)}}}function parseDate(dateStr,format,locale){if(dateStr instanceof Date||"number"==typeof dateStr){const date=stripTime(dateStr);return isNaN(date)?void 0:date}if(dateStr){if("today"===dateStr)return today();if(format&&format.toValue){const date=format.toValue(dateStr,format,locale);return isNaN(date)?void 0:stripTime(date)}return parseFormatString(format).parser(dateStr,locale)}}function formatDate(date,format,locale){if(isNaN(date)||!date&&0!==date)return"";const dateObj="number"==typeof date?new Date(date):date;return format.toDisplay?format.toDisplay(dateObj,format,locale):parseFormatString(format).formatter(dateObj,locale)}const range=document.createRange();function parseHTML(html){return range.createContextualFragment(html)}function getParent(el){return el.parentElement||(el.parentNode instanceof ShadowRoot?el.parentNode.host:void 0)}function isActiveElement(el){return el.getRootNode().activeElement===el}function hideElement(el){"none"!==el.style.display&&(el.style.display&&(el.dataset.styleDisplay=el.style.display),el.style.display="none")}function showElement(el){"none"===el.style.display&&(el.dataset.styleDisplay?(el.style.display=el.dataset.styleDisplay,delete el.dataset.styleDisplay):el.style.display="")}function emptyChildNodes(el){el.firstChild&&(el.removeChild(el.firstChild),emptyChildNodes(el))}function replaceChildNodes(el,newChildNodes){emptyChildNodes(el),newChildNodes instanceof DocumentFragment?el.appendChild(newChildNodes):"string"==typeof newChildNodes?el.appendChild(parseHTML(newChildNodes)):"function"==typeof newChildNodes.forEach&&newChildNodes.forEach(node=>{el.appendChild(node)})}const listenerRegistry=new WeakMap,{addEventListener:addEventListener,removeEventListener:removeEventListener}=EventTarget.prototype;function registerListeners(keyObj,listeners){let registered=listenerRegistry.get(keyObj);registered||(registered=[],listenerRegistry.set(keyObj,registered)),listeners.forEach(listener=>{addEventListener.call(...listener),registered.push(listener)})}function unregisterListeners(keyObj){let listeners=listenerRegistry.get(keyObj);listeners&&(listeners.forEach(listener=>{removeEventListener.call(...listener)}),listenerRegistry.delete(keyObj))}if(!Event.prototype.composedPath){const getComposedPath=(node,path=[])=>{let parent;return path.push(node),node.parentNode?parent=node.parentNode:node.host?parent=node.host:node.defaultView&&(parent=node.defaultView),parent?getComposedPath(parent,path):path};Event.prototype.composedPath=function(){return getComposedPath(this.target)}}function findFromPath(path,criteria,currentTarget){const[node,...rest]=path;return criteria(node)?node:node!==currentTarget&&"HTML"!==node.tagName&&0!==rest.length?findFromPath(rest,criteria,currentTarget):void 0}function findElementInEventPath(ev,selector){const criteria="function"==typeof selector?selector:el=>el instanceof Element&&el.matches(selector);return findFromPath(ev.composedPath(),criteria,ev.currentTarget)}const locales={es:{days:["Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sábado"],daysShort:["Dom","Lun","Mar","Mie","Jue","Vie","Sab"],daysMin:["D","L","M","M","J","V","S"],months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthsShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dec"],today:"Hoy",clear:"Limpiar",titleFormat:"MM y"}},defaultOptions={autohide:!1,beforeShowDay:null,beforeShowDecade:null,beforeShowMonth:null,beforeShowYear:null,calendarWeeks:!1,clearBtn:!1,dateDelimiter:",",datesDisabled:[],daysOfWeekDisabled:[],daysOfWeekHighlighted:[],defaultViewDate:void 0,disableTouchKeyboard:!1,format:"mm/dd/yyyy",getCalendarWeek:null,language:"es",maxDate:null,maxNumberOfDates:1,maxView:3,minDate:null,nextArrow:'<i class="ri-arrow-right-s-line"></i>',orientation:"auto",pickLevel:0,prevArrow:'<i class="ri-arrow-left-s-line"></i>',showDaysOfWeek:!0,showOnClick:!0,showOnFocus:!0,startView:0,title:"",todayBtn:!1,todayBtnMode:0,todayHighlight:!0,updateOnBlur:!0,weekStart:0},{language:defaultLang,format:defaultFormat,weekStart:defaultWeekStart}=defaultOptions;function sanitizeDOW(dow,day){return dow.length<6&&day>=0&&day<7?pushUnique(dow,day):dow}function calcEndOfWeek(startOfWeek){return(startOfWeek+6)%7}function validateDate(value,format,locale,origValue){const date=parseDate(value,format,locale);return void 0!==date?date:origValue}function validateViewId(value,origValue,max=3){const viewId=parseInt(value,10);return viewId>=0&&viewId<=max?viewId:origValue}function processOptions(options,datepicker){const inOpts=Object.assign({},options),config={},locales=datepicker.constructor.locales,rangeSideIndex=datepicker.rangeSideIndex;let{format:format,getCalendarWeek:getCalendarWeek,language:language,locale:locale,maxDate:maxDate,maxView:maxView,minDate:minDate,pickLevel:pickLevel,startView:startView,weekStart:weekStart}=datepicker.config||{};if(inOpts.language){let lang;if(inOpts.language!==language&&(locales[inOpts.language]?lang=inOpts.language:(lang=inOpts.language.split("-")[0],void 0===locales[lang]&&(lang=!1))),delete inOpts.language,lang){language=config.language=lang;const origLocale=locale||locales[defaultLang];locale=Object.assign({format:defaultFormat,weekStart:defaultWeekStart},locales[defaultLang]),language!==defaultLang&&Object.assign(locale,locales[language]),config.locale=locale,format===origLocale.format&&(format=config.format=locale.format),weekStart===origLocale.weekStart&&(weekStart=config.weekStart=locale.weekStart,config.weekEnd=calcEndOfWeek(locale.weekStart))}}if(inOpts.format){const hasToDisplay="function"==typeof inOpts.format.toDisplay,hasToValue="function"==typeof inOpts.format.toValue,validFormatString=reFormatTokens.test(inOpts.format);(hasToDisplay&&hasToValue||validFormatString)&&(format=config.format=inOpts.format),delete inOpts.format}let newPickLevel=pickLevel;void 0!==inOpts.pickLevel&&(newPickLevel=validateViewId(inOpts.pickLevel,2),delete inOpts.pickLevel),newPickLevel!==pickLevel&&(newPickLevel>pickLevel&&(void 0===inOpts.minDate&&(inOpts.minDate=minDate),void 0===inOpts.maxDate&&(inOpts.maxDate=maxDate)),inOpts.datesDisabled||(inOpts.datesDisabled=[]),pickLevel=config.pickLevel=newPickLevel);let minDt=minDate,maxDt=maxDate;if(void 0!==inOpts.minDate){const defaultMinDt=dateValue(0,0,1);minDt=null===inOpts.minDate?defaultMinDt:validateDate(inOpts.minDate,format,locale,minDt),minDt!==defaultMinDt&&(minDt=regularizeDate(minDt,pickLevel,!1)),delete inOpts.minDate}if(void 0!==inOpts.maxDate&&(maxDt=null===inOpts.maxDate?void 0:validateDate(inOpts.maxDate,format,locale,maxDt),void 0!==maxDt&&(maxDt=regularizeDate(maxDt,pickLevel,!0)),delete inOpts.maxDate),maxDt<minDt?(minDate=config.minDate=maxDt,maxDate=config.maxDate=minDt):(minDate!==minDt&&(minDate=config.minDate=minDt),maxDate!==maxDt&&(maxDate=config.maxDate=maxDt)),inOpts.datesDisabled&&(config.datesDisabled=inOpts.datesDisabled.reduce((dates,dt)=>{const date=parseDate(dt,format,locale);return void 0!==date?pushUnique(dates,regularizeDate(date,pickLevel,rangeSideIndex)):dates},[]),delete inOpts.datesDisabled),void 0!==inOpts.defaultViewDate){const viewDate=parseDate(inOpts.defaultViewDate,format,locale);void 0!==viewDate&&(config.defaultViewDate=viewDate),delete inOpts.defaultViewDate}if(void 0!==inOpts.weekStart){const wkStart=Number(inOpts.weekStart)%7;isNaN(wkStart)||(weekStart=config.weekStart=wkStart,config.weekEnd=calcEndOfWeek(wkStart)),delete inOpts.weekStart}if(inOpts.daysOfWeekDisabled&&(config.daysOfWeekDisabled=inOpts.daysOfWeekDisabled.reduce(sanitizeDOW,[]),delete inOpts.daysOfWeekDisabled),inOpts.daysOfWeekHighlighted&&(config.daysOfWeekHighlighted=inOpts.daysOfWeekHighlighted.reduce(sanitizeDOW,[]),delete inOpts.daysOfWeekHighlighted),void 0!==inOpts.maxNumberOfDates){const maxNumberOfDates=parseInt(inOpts.maxNumberOfDates,10);maxNumberOfDates>=0&&(config.maxNumberOfDates=maxNumberOfDates,config.multidate=1!==maxNumberOfDates),delete inOpts.maxNumberOfDates}inOpts.dateDelimiter&&(config.dateDelimiter=String(inOpts.dateDelimiter),delete inOpts.dateDelimiter);let newMaxView=maxView;void 0!==inOpts.maxView&&(newMaxView=validateViewId(inOpts.maxView,maxView),delete inOpts.maxView),newMaxView=pickLevel>newMaxView?pickLevel:newMaxView,newMaxView!==maxView&&(maxView=config.maxView=newMaxView);let newStartView=startView;if(void 0!==inOpts.startView&&(newStartView=validateViewId(inOpts.startView,newStartView),delete inOpts.startView),newStartView<pickLevel?newStartView=pickLevel:newStartView>maxView&&(newStartView=maxView),newStartView!==startView&&(config.startView=newStartView),inOpts.prevArrow){const prevArrow=parseHTML(inOpts.prevArrow);prevArrow.childNodes.length>0&&(config.prevArrow=prevArrow.childNodes),delete inOpts.prevArrow}if(inOpts.nextArrow){const nextArrow=parseHTML(inOpts.nextArrow);nextArrow.childNodes.length>0&&(config.nextArrow=nextArrow.childNodes),delete inOpts.nextArrow}if(void 0!==inOpts.disableTouchKeyboard&&(config.disableTouchKeyboard="ontouchstart"in document&&!!inOpts.disableTouchKeyboard,delete inOpts.disableTouchKeyboard),inOpts.orientation){const orientation=inOpts.orientation.toLowerCase().split(/\s+/g);config.orientation={x:orientation.find(x=>"left"===x||"right"===x)||"auto",y:orientation.find(y=>"top"===y||"bottom"===y)||"auto"},delete inOpts.orientation}if(void 0!==inOpts.todayBtnMode){switch(inOpts.todayBtnMode){case 0:case 1:config.todayBtnMode=inOpts.todayBtnMode}delete inOpts.todayBtnMode}return config.getCalendarWeek="function"==typeof inOpts.getCalendarWeek?inOpts.getCalendarWeek:getCalendarWeek||null,delete inOpts.getCalendarWeek,Object.keys(inOpts).forEach(key=>{void 0!==inOpts[key]&&hasProperty(defaultOptions,key)&&(config[key]=inOpts[key])}),config}const pickerTemplate=optimizeTemplateHTML('<div class="datepicker">\n <div class="datepicker-picker">\n <div class="datepicker-header">\n <div class="datepicker-title"></div>\n <div class="datepicker-controls">\n <button type="button" class="%buttonClass% prev-btn"></button>\n <button type="button" class="%buttonClass% view-switch"></button>\n <button type="button" class="%buttonClass% next-btn"></button>\n </div>\n </div>\n <div class="datepicker-main"></div>\n <div class="datepicker-footer">\n <div class="datepicker-controls">\n <button type="button" class="%buttonClass% today-btn"></button>\n <button type="button" class="%buttonClass% clear-btn"></button>\n </div>\n </div>\n </div>\n</div>'),daysTemplate=optimizeTemplateHTML(`<div class="days">\n <div class="days-of-week">${createTagRepeat("span",7,{class:"dow"})}</div>\n <div class="datepicker-grid">${createTagRepeat("span",42)}</div>\n</div>`),calendarWeeksTemplate=optimizeTemplateHTML(`<div class="calendar-weeks">\n <div class="days-of-week"><span class="dow"></span></div>\n <div class="weeks">${createTagRepeat("span",6,{class:"week"})}</div>\n</div>`);class View{constructor(picker,config){Object.assign(this,config,{picker:picker,element:parseHTML('<div class="datepicker-view"></div>').firstChild,selected:[]}),this.init(this.picker.datepicker.config)}init(options){void 0!==options.pickLevel&&(this.isMinView=this.id===options.pickLevel),this.setOptions(options),this.updateFocus(),this.updateSelection()}performBeforeHook(el,current,timeValue){let result=this.beforeShow(new Date(timeValue));switch(typeof result){case"boolean":result={enabled:result};break;case"string":result={classes:result}}if(result){if(!1===result.enabled&&(el.classList.add("disabled"),pushUnique(this.disabled,current)),result.classes){const extraClasses=result.classes.split(/\s+/);el.classList.add(...extraClasses),extraClasses.includes("disabled")&&pushUnique(this.disabled,current)}result.content&&replaceChildNodes(el,result.content)}}}class DaysView extends View{constructor(picker){super(picker,{id:0,name:"days",cellClass:"day"})}init(options,onConstruction=!0){if(onConstruction){const inner=parseHTML(daysTemplate).firstChild;this.dow=inner.firstChild,this.grid=inner.lastChild,this.element.appendChild(inner)}super.init(options)}setOptions(options){let updateDOW;if(hasProperty(options,"minDate")&&(this.minDate=options.minDate),hasProperty(options,"maxDate")&&(this.maxDate=options.maxDate),options.datesDisabled&&(this.datesDisabled=options.datesDisabled),options.daysOfWeekDisabled&&(this.daysOfWeekDisabled=options.daysOfWeekDisabled,updateDOW=!0),options.daysOfWeekHighlighted&&(this.daysOfWeekHighlighted=options.daysOfWeekHighlighted),void 0!==options.todayHighlight&&(this.todayHighlight=options.todayHighlight),void 0!==options.weekStart&&(this.weekStart=options.weekStart,this.weekEnd=options.weekEnd,updateDOW=!0),options.locale){const locale=this.locale=options.locale;this.dayNames=locale.daysMin,this.switchLabelFormat=locale.titleFormat,updateDOW=!0}if(void 0!==options.beforeShowDay&&(this.beforeShow="function"==typeof options.beforeShowDay?options.beforeShowDay:void 0),void 0!==options.calendarWeeks)if(options.calendarWeeks&&!this.calendarWeeks){const weeksElem=parseHTML(calendarWeeksTemplate).firstChild;this.calendarWeeks={element:weeksElem,dow:weeksElem.firstChild,weeks:weeksElem.lastChild},this.element.insertBefore(weeksElem,this.element.firstChild)}else this.calendarWeeks&&!options.calendarWeeks&&(this.element.removeChild(this.calendarWeeks.element),this.calendarWeeks=null);"function"==typeof options.getCalendarWeek&&(this.getCalendarWeek=options.getCalendarWeek),void 0!==options.showDaysOfWeek&&(options.showDaysOfWeek?(showElement(this.dow),this.calendarWeeks&&showElement(this.calendarWeeks.dow)):(hideElement(this.dow),this.calendarWeeks&&hideElement(this.calendarWeeks.dow))),updateDOW&&Array.from(this.dow.children).forEach((el,index)=>{const dow=(this.weekStart+index)%7;el.textContent=this.dayNames[dow],el.className=this.daysOfWeekDisabled.includes(dow)?"dow disabled":"dow"})}updateFocus(){const viewDate=new Date(this.picker.viewDate),viewYear=viewDate.getFullYear(),viewMonth=viewDate.getMonth(),firstOfMonth=dateValue(viewYear,viewMonth,1),start=dayOfTheWeekOf(firstOfMonth,this.weekStart,this.weekStart);this.first=firstOfMonth,this.last=dateValue(viewYear,viewMonth+1,0),this.start=start,this.focused=this.picker.viewDate}updateSelection(){const{dates:dates,rangepicker:rangepicker}=this.picker.datepicker;this.selected=dates,rangepicker&&(this.range=rangepicker.dates)}render(){this.today=this.todayHighlight?today():void 0,this.disabled=[...this.datesDisabled];const switchLabel=formatDate(this.focused,this.switchLabelFormat,this.locale);if(this.picker.setViewSwitchLabel(switchLabel),this.picker.setPrevBtnDisabled(this.first<=this.minDate),this.picker.setNextBtnDisabled(this.last>=this.maxDate),this.calendarWeeks){const startOfWeek=dayOfTheWeekOf(this.first,1,this.weekStart),calcWeek=(timestamp,weekStart)=>this.getCalendarWeek?this.getCalendarWeek(new Date(timestamp),weekStart):getWeek(timestamp);Array.from(this.calendarWeeks.weeks.children).forEach((el,index)=>{el.textContent=calcWeek(addWeeks(startOfWeek,index),this.weekStart)})}Array.from(this.grid.children).forEach((el,index)=>{const classList=el.classList,current=addDays(this.start,index),date=new Date(current),day=date.getDay();if(el.className=`datepicker-cell ${this.cellClass}`,el.dataset.date=current,el.textContent=date.getDate(),current<this.first?classList.add("prev"):current>this.last&&classList.add("next"),this.today===current&&classList.add("today"),(current<this.minDate||current>this.maxDate||this.disabled.includes(current))&&classList.add("disabled"),this.daysOfWeekDisabled.includes(day)&&(classList.add("disabled"),pushUnique(this.disabled,current)),this.daysOfWeekHighlighted.includes(day)&&classList.add("highlighted"),this.range){const[rangeStart,rangeEnd]=this.range;current>rangeStart&¤t<rangeEnd&&classList.add("range"),current===rangeStart&&classList.add("range-start"),current===rangeEnd&&classList.add("range-end")}this.selected.includes(current)&&classList.add("selected"),current===this.focused&&classList.add("focused"),this.beforeShow&&this.performBeforeHook(el,current,current)})}refresh(){const[rangeStart,rangeEnd]=this.range||[];this.grid.querySelectorAll(".range, .range-start, .range-end, .selected, .focused").forEach(el=>{el.classList.remove("range","range-start","range-end","selected","focused")}),Array.from(this.grid.children).forEach(el=>{const current=Number(el.dataset.date),classList=el.classList;current>rangeStart&¤t<rangeEnd&&classList.add("range"),current===rangeStart&&classList.add("range-start"),current===rangeEnd&&classList.add("range-end"),this.selected.includes(current)&&classList.add("selected"),current===this.focused&&classList.add("focused")})}refreshFocus(){const index=Math.round((this.focused-this.start)/864e5);this.grid.querySelectorAll(".focused").forEach(el=>{el.classList.remove("focused")}),this.grid.children[index].classList.add("focused")}}function computeMonthRange(range,thisYear){if(!range||!range[0]||!range[1])return;const[[startY,startM],[endY,endM]]=range;return startY>thisYear||endY<thisYear?void 0:[startY===thisYear?startM:-1,endY===thisYear?endM:12]}class MonthsView extends View{constructor(picker){super(picker,{id:1,name:"months",cellClass:"month"})}init(options,onConstruction=!0){onConstruction&&(this.grid=this.element,this.element.classList.add("months","datepicker-grid"),this.grid.appendChild(parseHTML(createTagRepeat("span",12,{"data-month":ix=>ix})))),super.init(options)}setOptions(options){if(options.locale&&(this.monthNames=options.locale.monthsShort),hasProperty(options,"minDate"))if(void 0===options.minDate)this.minYear=this.minMonth=this.minDate=void 0;else{const minDateObj=new Date(options.minDate);this.minYear=minDateObj.getFullYear(),this.minMonth=minDateObj.getMonth(),this.minDate=minDateObj.setDate(1)}if(hasProperty(options,"maxDate"))if(void 0===options.maxDate)this.maxYear=this.maxMonth=this.maxDate=void 0;else{const maxDateObj=new Date(options.maxDate);this.maxYear=maxDateObj.getFullYear(),this.maxMonth=maxDateObj.getMonth(),this.maxDate=dateValue(this.maxYear,this.maxMonth+1,0)}this.isMinView?options.datesDisabled&&(this.datesDisabled=options.datesDisabled):this.datesDisabled=[],void 0!==options.beforeShowMonth&&(this.beforeShow="function"==typeof options.beforeShowMonth?options.beforeShowMonth:void 0)}updateFocus(){const viewDate=new Date(this.picker.viewDate);this.year=viewDate.getFullYear(),this.focused=viewDate.getMonth()}updateSelection(){const{dates:dates,rangepicker:rangepicker}=this.picker.datepicker;this.selected=dates.reduce((selected,timeValue)=>{const date=new Date(timeValue),year=date.getFullYear(),month=date.getMonth();return void 0===selected[year]?selected[year]=[month]:pushUnique(selected[year],month),selected},{}),rangepicker&&rangepicker.dates&&(this.range=rangepicker.dates.map(timeValue=>{const date=new Date(timeValue);return isNaN(date)?void 0:[date.getFullYear(),date.getMonth()]}))}render(){this.disabled=this.datesDisabled.reduce((arr,disabled)=>{const dt=new Date(disabled);return this.year===dt.getFullYear()&&arr.push(dt.getMonth()),arr},[]),this.picker.setViewSwitchLabel(this.year),this.picker.setPrevBtnDisabled(this.year<=this.minYear),this.picker.setNextBtnDisabled(this.year>=this.maxYear);const selected=this.selected[this.year]||[],yrOutOfRange=this.year<this.minYear||this.year>this.maxYear,isMinYear=this.year===this.minYear,isMaxYear=this.year===this.maxYear,range=computeMonthRange(this.range,this.year);Array.from(this.grid.children).forEach((el,index)=>{const classList=el.classList,date=dateValue(this.year,index,1);if(el.className=`datepicker-cell ${this.cellClass}`,this.isMinView&&(el.dataset.date=date),el.textContent=this.monthNames[index],(yrOutOfRange||isMinYear&&index<this.minMonth||isMaxYear&&index>this.maxMonth||this.disabled.includes(index))&&classList.add("disabled"),range){const[rangeStart,rangeEnd]=range;index>rangeStart&&index<rangeEnd&&classList.add("range"),index===rangeStart&&classList.add("range-start"),index===rangeEnd&&classList.add("range-end")}selected.includes(index)&&classList.add("selected"),index===this.focused&&classList.add("focused"),this.beforeShow&&this.performBeforeHook(el,index,date)})}refresh(){const selected=this.selected[this.year]||[],[rangeStart,rangeEnd]=computeMonthRange(this.range,this.year)||[];this.grid.querySelectorAll(".range, .range-start, .range-end, .selected, .focused").forEach(el=>{el.classList.remove("range","range-start","range-end","selected","focused")}),Array.from(this.grid.children).forEach((el,index)=>{const classList=el.classList;index>rangeStart&&index<rangeEnd&&classList.add("range"),index===rangeStart&&classList.add("range-start"),index===rangeEnd&&classList.add("range-end"),selected.includes(index)&&classList.add("selected"),index===this.focused&&classList.add("focused")})}refreshFocus(){this.grid.querySelectorAll(".focused").forEach(el=>{el.classList.remove("focused")}),this.grid.children[this.focused].classList.add("focused")}}function toTitleCase(word){return[...word].reduce((str,ch,ix)=>str+(ix?ch:ch.toUpperCase()),"")}class YearsView extends View{constructor(picker,config){super(picker,config)}init(options,onConstruction=!0){onConstruction&&(this.navStep=10*this.step,this.beforeShowOption=`beforeShow${toTitleCase(this.cellClass)}`,this.grid=this.element,this.element.classList.add(this.name,"datepicker-grid"),this.grid.appendChild(parseHTML(createTagRepeat("span",12)))),super.init(options)}setOptions(options){if(hasProperty(options,"minDate")&&(void 0===options.minDate?this.minYear=this.minDate=void 0:(this.minYear=startOfYearPeriod(options.minDate,this.step),this.minDate=dateValue(this.minYear,0,1))),hasProperty(options,"maxDate")&&(void 0===options.maxDate?this.maxYear=this.maxDate=void 0:(this.maxYear=startOfYearPeriod(options.maxDate,this.step),this.maxDate=dateValue(this.maxYear,11,31))),this.isMinView?options.datesDisabled&&(this.datesDisabled=options.datesDisabled):this.datesDisabled=[],void 0!==options[this.beforeShowOption]){const beforeShow=options[this.beforeShowOption];this.beforeShow="function"==typeof beforeShow?beforeShow:void 0}}updateFocus(){const viewDate=new Date(this.picker.viewDate),first=startOfYearPeriod(viewDate,this.navStep),last=first+9*this.step;this.first=first,this.last=last,this.start=first-this.step,this.focused=startOfYearPeriod(viewDate,this.step)}updateSelection(){const{dates:dates,rangepicker:rangepicker}=this.picker.datepicker;this.selected=dates.reduce((years,timeValue)=>pushUnique(years,startOfYearPeriod(timeValue,this.step)),[]),rangepicker&&rangepicker.dates&&(this.range=rangepicker.dates.map(timeValue=>{if(void 0!==timeValue)return startOfYearPeriod(timeValue,this.step)}))}render(){this.disabled=this.datesDisabled.map(disabled=>new Date(disabled).getFullYear()),this.picker.setViewSwitchLabel(`${this.first}-${this.last}`),this.picker.setPrevBtnDisabled(this.first<=this.minYear),this.picker.setNextBtnDisabled(this.last>=this.maxYear),Array.from(this.grid.children).forEach((el,index)=>{const classList=el.classList,current=this.start+index*this.step,date=dateValue(current,0,1);if(el.className=`datepicker-cell ${this.cellClass}`,this.isMinView&&(el.dataset.date=date),el.textContent=el.dataset.year=current,0===index?classList.add("prev"):11===index&&classList.add("next"),(current<this.minYear||current>this.maxYear||this.disabled.includes(current))&&classList.add("disabled"),this.range){const[rangeStart,rangeEnd]=this.range;current>rangeStart&¤t<rangeEnd&&classList.add("range"),current===rangeStart&&classList.add("range-start"),current===rangeEnd&&classList.add("range-end")}this.selected.includes(current)&&classList.add("selected"),current===this.focused&&classList.add("focused"),this.beforeShow&&this.performBeforeHook(el,current,date)})}refresh(){const[rangeStart,rangeEnd]=this.range||[];this.grid.querySelectorAll(".range, .range-start, .range-end, .selected, .focused").forEach(el=>{el.classList.remove("range","range-start","range-end","selected","focused")}),Array.from(this.grid.children).forEach(el=>{const current=Number(el.textContent),classList=el.classList;current>rangeStart&¤t<rangeEnd&&classList.add("range"),current===rangeStart&&classList.add("range-start"),current===rangeEnd&&classList.add("range-end"),this.selected.includes(current)&&classList.add("selected"),current===this.focused&&classList.add("focused")})}refreshFocus(){const index=Math.round((this.focused-this.start)/this.step);this.grid.querySelectorAll(".focused").forEach(el=>{el.classList.remove("focused")}),this.grid.children[index].classList.add("focused")}}function triggerDatepickerEvent(datepicker,type){const detail={date:datepicker.getDate(),viewDate:new Date(datepicker.picker.viewDate),viewId:datepicker.picker.currentView.id,datepicker:datepicker};datepicker.element.dispatchEvent(new CustomEvent(type,{detail:detail}))}function goToPrevOrNext(datepicker,direction){const{minDate:minDate,maxDate:maxDate}=datepicker.config,{currentView:currentView,viewDate:viewDate}=datepicker.picker;let newViewDate;switch(currentView.id){case 0:newViewDate=addMonths(viewDate,direction);break;case 1:newViewDate=addYears(viewDate,direction);break;default:newViewDate=addYears(viewDate,direction*currentView.navStep)}newViewDate=limitToRange(newViewDate,minDate,maxDate),datepicker.picker.changeFocus(newViewDate).render()}function switchView(datepicker){const viewId=datepicker.picker.currentView.id;viewId!==datepicker.config.maxView&&datepicker.picker.changeView(viewId+1).render()}function unfocus(datepicker){datepicker.config.updateOnBlur?datepicker.update({revert:!0}):datepicker.refresh("input"),datepicker.hide()}function goToSelectedMonthOrYear(datepicker,selection){const picker=datepicker.picker,viewDate=new Date(picker.viewDate),viewId=picker.currentView.id,newDate=1===viewId?addMonths(viewDate,selection-viewDate.getMonth()):addYears(viewDate,selection-viewDate.getFullYear());picker.changeFocus(newDate).changeView(viewId-1).render()}function onClickTodayBtn(datepicker){const picker=datepicker.picker,currentDate=today();if(1===datepicker.config.todayBtnMode){if(datepicker.config.autohide)return void datepicker.setDate(currentDate);datepicker.setDate(currentDate,{render:!1}),picker.update()}picker.viewDate!==currentDate&&picker.changeFocus(currentDate),picker.changeView(0).render()}function onClickClearBtn(datepicker){datepicker.setDate({clear:!0})}function onClickViewSwitch(datepicker){switchView(datepicker)}function onClickPrevBtn(datepicker){goToPrevOrNext(datepicker,-1)}function onClickNextBtn(datepicker){goToPrevOrNext(datepicker,1)}function onClickView(datepicker,ev){const target=findElementInEventPath(ev,".datepicker-cell");if(!target||target.classList.contains("disabled"))return;const{id:id,isMinView:isMinView}=datepicker.picker.currentView;isMinView?datepicker.setDate(Number(target.dataset.date)):goToSelectedMonthOrYear(datepicker,Number(1===id?target.dataset.month:target.dataset.year))}function onMousedownPicker(ev){ev.preventDefault()}const orientClasses=["left","top","right","bottom"].reduce((obj,key)=>(obj[key]=`datepicker-orient-${key}`,obj),{}),toPx=num=>num?`${num}px`:num;function processPickerOptions(picker,options){if(void 0!==options.title&&(options.title?(picker.controls.title.textContent=options.title,showElement(picker.controls.title)):(picker.controls.title.textContent="",hideElement(picker.controls.title))),options.prevArrow){const prevBtn=picker.controls.prevBtn;emptyChildNodes(prevBtn),options.prevArrow.forEach(node=>{prevBtn.appendChild(node.cloneNode(!0))})}if(options.nextArrow){const nextBtn=picker.controls.nextBtn;emptyChildNodes(nextBtn),options.nextArrow.forEach(node=>{nextBtn.appendChild(node.cloneNode(!0))})}if(options.locale&&(picker.controls.todayBtn.textContent=options.locale.today,picker.controls.clearBtn.textContent=options.locale.clear),void 0!==options.todayBtn&&(options.todayBtn?showElement(picker.controls.todayBtn):hideElement(picker.controls.todayBtn)),hasProperty(options,"minDate")||hasProperty(options,"maxDate")){const{minDate:minDate,maxDate:maxDate}=picker.datepicker.config;picker.controls.todayBtn.disabled=!isInRange(today(),minDate,maxDate)}void 0!==options.clearBtn&&(options.clearBtn?showElement(picker.controls.clearBtn):hideElement(picker.controls.clearBtn))}function computeResetViewDate(datepicker){const{dates:dates,config:config}=datepicker,viewDate=dates.length>0?lastItemOf(dates):config.defaultViewDate;return limitToRange(viewDate,config.minDate,config.maxDate)}function setViewDate(picker,newDate){const oldViewDate=new Date(picker.viewDate),newViewDate=new Date(newDate),{id:id,year:year,first:first,last:last}=picker.currentView,viewYear=newViewDate.getFullYear();switch(picker.viewDate=newDate,viewYear!==oldViewDate.getFullYear()&&triggerDatepickerEvent(picker.datepicker,"changeYear"),newViewDate.getMonth()!==oldViewDate.getMonth()&&triggerDatepickerEvent(picker.datepicker,"changeMonth"),id){case 0:return newDate<first||newDate>last;case 1:return viewYear!==year;default:return viewYear<first||viewYear>last}}function getTextDirection(el){return window.getComputedStyle(el).direction}function findScrollParents(el){const parent=getParent(el);if(parent!==document.body&&parent)return"visible"!==window.getComputedStyle(parent).overflow?parent:findScrollParents(parent)}class Picker{constructor(datepicker){const{config:config}=this.datepicker=datepicker,template=pickerTemplate.replace(/%buttonClass%/g,config.buttonClass),element=this.element=parseHTML(template).firstChild,[header,main,footer]=element.firstChild.children,title=header.firstElementChild,[prevBtn,viewSwitch,nextBtn]=header.lastElementChild.children,[todayBtn,clearBtn]=footer.firstChild.children,controls={title:title,prevBtn:prevBtn,viewSwitch:viewSwitch,nextBtn:nextBtn,todayBtn:todayBtn,clearBtn:clearBtn};this.main=main,this.controls=controls;const elementClass=datepicker.inline?"inline":"dropdown";element.classList.add(`datepicker-${elementClass}`),processPickerOptions(this,config),this.viewDate=computeResetViewDate(datepicker),registerListeners(datepicker,[[element,"mousedown",onMousedownPicker],[main,"click",onClickView.bind(null,datepicker)],[controls.viewSwitch,"click",onClickViewSwitch.bind(null,datepicker)],[controls.prevBtn,"click",onClickPrevBtn.bind(null,datepicker)],[controls.nextBtn,"click",onClickNextBtn.bind(null,datepicker)],[controls.todayBtn,"click",onClickTodayBtn.bind(null,datepicker)],[controls.clearBtn,"click",onClickClearBtn.bind(null,datepicker)]]),this.views=[new DaysView(this),new MonthsView(this),new YearsView(this,{id:2,name:"years",cellClass:"year",step:1}),new YearsView(this,{id:3,name:"decades",cellClass:"decade",step:10})],this.currentView=this.views[config.startView],this.currentView.render(),this.main.appendChild(this.currentView.element),config.container?config.container.appendChild(this.element):datepicker.inputField.after(this.element)}setOptions(options){processPickerOptions(this,options),this.views.forEach(view=>{view.init(options,!1)}),this.currentView.render()}detach(){this.element.remove()}show(){if(this.active)return;const{datepicker:datepicker,element:element}=this;if(datepicker.inline)element.classList.add("active");else{const inputDirection=getTextDirection(datepicker.inputField);inputDirection!==getTextDirection(getParent(element))?element.dir=inputDirection:element.dir&&element.removeAttribute("dir"),element.style.visiblity="hidden",element.classList.add("active"),this.place(),element.style.visiblity="",datepicker.config.disableTouchKeyboard&&datepicker.inputField.blur()}this.active=!0,triggerDatepickerEvent(datepicker,"show")}hide(){this.active&&(this.datepicker.exitEditMode(),this.element.classList.remove("active"),this.active=!1,triggerDatepickerEvent(this.datepicker,"hide"))}place(){const{classList:classList,offsetParent:offsetParent,style:style}=this.element,{config:config,inputField:inputField}=this.datepicker,{width:calendarWidth,height:calendarHeight}=this.element.getBoundingClientRect(),{left:inputLeft,top:inputTop,right:inputRight,bottom:inputBottom,width:inputWidth,height:inputHeight}=inputField.getBoundingClientRect();let{x:orientX,y:orientY}=config.orientation,left=inputLeft,top=inputTop;if(offsetParent!==document.body&&offsetParent){const offsetParentRect=offsetParent.getBoundingClientRect();left-=offsetParentRect.left-offsetParent.scrollLeft,top-=offsetParentRect.top-offsetParent.scrollTop}else left+=window.scrollX,top+=window.scrollY;const scrollParent=findScrollParents(inputField);let scrollAreaLeft=0,scrollAreaTop=0,{clientWidth:scrollAreaRight,clientHeight:scrollAreaBottom}=document.documentElement;if(scrollParent){const scrollParentRect=scrollParent.getBoundingClientRect();scrollParentRect.top>0&&(scrollAreaTop=scrollParentRect.top),scrollParentRect.left>0&&(scrollAreaLeft=scrollParentRect.left),scrollParentRect.right<scrollAreaRight&&(scrollAreaRight=scrollParentRect.right),scrollParentRect.bottom<scrollAreaBottom&&(scrollAreaBottom=scrollParentRect.bottom)}let adjustment=0;"auto"===orientX&&(inputLeft<scrollAreaLeft?(orientX="left",adjustment=scrollAreaLeft-inputLeft):inputLeft+calendarWidth>scrollAreaRight?(orientX="right",scrollAreaRight<inputRight&&(adjustment=scrollAreaRight-inputRight)):orientX="rtl"===getTextDirection(inputField)?inputRight-calendarWidth<scrollAreaLeft?"left":"right":"left"),"right"===orientX&&(left+=inputWidth-calendarWidth),left+=adjustment,"auto"===orientY&&(orientY=inputTop-calendarHeight>scrollAreaTop&&inputBottom+calendarHeight>scrollAreaBottom?"top":"bottom"),"top"===orientY?top-=calendarHeight:top+=inputHeight,classList.remove(...Object.values(orientClasses)),classList.add(orientClasses[orientX],orientClasses[orientY]),style.left=toPx(left),style.top=toPx(top)}setViewSwitchLabel(labelText){this.controls.viewSwitch.textContent=labelText}setPrevBtnDisabled(disabled){this.controls.prevBtn.disabled=disabled}setNextBtnDisabled(disabled){this.controls.nextBtn.disabled=disabled}changeView(viewId){const oldView=this.currentView,newView=this.views[viewId];return newView.id!==oldView.id&&(this.currentView=newView,this._renderMethod="render",triggerDatepickerEvent(this.datepicker,"changeView"),this.main.replaceChild(newView.element,oldView.element)),this}changeFocus(newViewDate){return this._renderMethod=setViewDate(this,newViewDate)?"render":"refreshFocus",this.views.forEach(view=>{view.updateFocus()}),this}update(){const newViewDate=computeResetViewDate(this.datepicker);return this._renderMethod=setViewDate(this,newViewDate)?"render":"refresh",this.views.forEach(view=>{view.updateFocus(),view.updateSelection()}),this}render(quickRender=!0){const renderMethod=quickRender&&this._renderMethod||"render";delete this._renderMethod,this.currentView[renderMethod]()}}function findNextAvailableOne(date,addFn,increase,testFn,min,max){if(isInRange(date,min,max)){if(testFn(date)){const newDate=addFn(date,increase);return findNextAvailableOne(newDate,addFn,increase,testFn,min,max)}return date}}function moveByArrowKey(datepicker,ev,direction,vertical){const picker=datepicker.picker,currentView=picker.currentView,step=currentView.step||1;let viewDate=picker.viewDate,addFn,testFn;switch(currentView.id){case 0:viewDate=vertical?addDays(viewDate,7*direction):ev.ctrlKey||ev.metaKey?addYears(viewDate,direction):addDays(viewDate,direction),addFn=addDays,testFn=date=>currentView.disabled.includes(date);break;case 1:viewDate=addMonths(viewDate,vertical?4*direction:direction),addFn=addMonths,testFn=date=>{const dt=new Date(date),{year:year,disabled:disabled}=currentView;return dt.getFullYear()===year&&disabled.includes(dt.getMonth())};break;default:viewDate=addYears(viewDate,direction*(vertical?4:1)*step),addFn=addYears,testFn=date=>currentView.disabled.includes(startOfYearPeriod(date,step))}viewDate=findNextAvailableOne(viewDate,addFn,direction<0?-step:step,testFn,currentView.minDate,currentView.maxDate),void 0!==viewDate&&picker.changeFocus(viewDate).render()}function onKeydown(datepicker,ev){const key=ev.key;if("Tab"===key)return void unfocus(datepicker);const picker=datepicker.picker,{id:id,isMinView:isMinView}=picker.currentView;if(picker.active){if(datepicker.editMode)return void("Enter"===key?datepicker.exitEditMode({update:!0,autohide:datepicker.config.autohide}):"Escape"===key&&picker.hide());if("ArrowLeft"===key)if(ev.ctrlKey||ev.metaKey)goToPrevOrNext(datepicker,-1);else{if(ev.shiftKey)return void datepicker.enterEditMode();moveByArrowKey(datepicker,ev,-1,!1)}else if("ArrowRight"===key)if(ev.ctrlKey||ev.metaKey)goToPrevOrNext(datepicker,1);else{if(ev.shiftKey)return void datepicker.enterEditMode();moveByArrowKey(datepicker,ev,1,!1)}else if("ArrowUp"===key)if(ev.ctrlKey||ev.metaKey)switchView(datepicker);else{if(ev.shiftKey)return void datepicker.enterEditMode();moveByArrowKey(datepicker,ev,-1,!0)}else if("ArrowDown"===key){if(ev.shiftKey&&!ev.ctrlKey&&!ev.metaKey)return void datepicker.enterEditMode();moveByArrowKey(datepicker,ev,1,!0)}else{if("Enter"!==key)return void("Escape"===key?picker.hide():"Backspace"!==key&&"Delete"!==key&&(1!==key.length||ev.ctrlKey||ev.metaKey)||datepicker.enterEditMode());if(isMinView)return void datepicker.setDate(picker.viewDate);picker.changeView(id-1).render()}}else{if("ArrowDown"!==key)return void("Enter"===key?datepicker.update():"Escape"===key&&picker.show());picker.show()}ev.preventDefault()}function onFocus(datepicker){datepicker.config.showOnFocus&&!datepicker._showing&&datepicker.show()}function onMousedown(datepicker,ev){const el=ev.target;(datepicker.picker.active||datepicker.config.showOnClick)&&(el._active=isActiveElement(el),el._clicking=setTimeout(()=>{delete el._active,delete el._clicking},2e3))}function onClickInput(datepicker,ev){const el=ev.target;el._clicking&&(clearTimeout(el._clicking),delete el._clicking,el._active&&datepicker.enterEditMode(),delete el._active,datepicker.config.showOnClick&&datepicker.show())}function onPaste(datepicker,ev){ev.clipboardData.types.includes("text/plain")&&datepicker.enterEditMode()}function onClickOutside(datepicker,ev){const{element:element,picker:picker}=datepicker;if(!picker.active&&!isActiveElement(element))return;const pickerElem=picker.element;findElementInEventPath(ev,el=>el===element||el===pickerElem)||unfocus(datepicker)}function stringifyDates(dates,config){return dates.map(dt=>formatDate(dt,config.format,config.locale)).join(config.dateDelimiter)}function processInputDates(datepicker,inputDates,clear=!1){const{config:config,dates:origDates,rangeSideIndex:rangeSideIndex}=datepicker;if(0===inputDates.length)return clear?[]:void 0;let newDates=inputDates.reduce((dates,dt)=>{let date=parseDate(dt,config.format,config.locale);return void 0===date?dates:(date=regularizeDate(date,config.pickLevel,rangeSideIndex),!isInRange(date,config.minDate,config.maxDate)||dates.includes(date)||config.datesDisabled.includes(date)||!(config.pickLevel>0)&&config.daysOfWeekDisabled.includes(new Date(date).getDay())||dates.push(date),dates)},[]);return 0!==newDates.length?(config.multidate&&!clear&&(newDates=newDates.reduce((dates,date)=>(origDates.includes(date)||dates.push(date),dates),origDates.filter(date=>!newDates.includes(date)))),config.maxNumberOfDates&&newDates.length>config.maxNumberOfDates?newDates.slice(-1*config.maxNumberOfDates):newDates):void 0}function refreshUI(datepicker,mode=3,quickRender=!0){const{config:config,picker:picker,inputField:inputField}=datepicker;if(2&mode){const newView=picker.active?config.pickLevel:config.startView;picker.update().changeView(newView).render(quickRender)}1&mode&&inputField&&(inputField.value=stringifyDates(datepicker.dates,config))}function setDate(datepicker,inputDates,options){let{clear:clear,render:render,autohide:autohide,revert:revert}=options;void 0===render&&(render=!0),render?void 0===autohide&&(autohide=datepicker.config.autohide):autohide=!1;const newDates=processInputDates(datepicker,inputDates,clear);(newDates||revert)&&(newDates&&newDates.toString()!==datepicker.dates.toString()?(datepicker.dates=newDates,refreshUI(datepicker,render?3:1),triggerDatepickerEvent(datepicker,"changeDate")):refreshUI(datepicker,1),autohide&&datepicker.hide())}class Datepicker{constructor(element,options={},rangepicker){element.datepicker=this,this.element=element;const config=this.config=Object.assign({buttonClass:options.buttonClass&&String(options.buttonClass)||"button",container:null,defaultViewDate:today(),maxDate:void 0,minDate:void 0},processOptions(defaultOptions,this)),inline=this.inline="INPUT"!==element.tagName;let inputField,initialDates;if(inline?config.container=element:(options.container&&(config.container=options.container instanceof HTMLElement?options.container:document.querySelector(options.container)),inputField=this.inputField=element,inputField.classList.add("datepicker-input")),rangepicker){const index=rangepicker.inputs.indexOf(inputField),datepickers=rangepicker.datepickers;if(index<0||index>1||!Array.isArray(datepickers))throw Error("Invalid rangepicker object.");datepickers[index]=this,Object.defineProperty(this,"rangepicker",{get:()=>rangepicker}),Object.defineProperty(this,"rangeSideIndex",{get:()=>index})}this._options=options,Object.assign(config,processOptions(options,this)),inline?(initialDates=stringToArray(element.dataset.date,config.dateDelimiter),delete element.dataset.date):initialDates=stringToArray(inputField.value,config.dateDelimiter),this.dates=[];const inputDateValues=processInputDates(this,initialDates);inputDateValues&&inputDateValues.length>0&&(this.dates=inputDateValues),inputField&&(inputField.value=stringifyDates(this.dates,config));const picker=this.picker=new Picker(this);if(inline)this.show();else{const onMousedownDocument=onClickOutside.bind(null,this),listeners=[[inputField,"keydown",onKeydown.bind(null,this)],[inputField,"focus",onFocus.bind(null,this)],[inputField,"mousedown",onMousedown.bind(null,this)],[inputField,"click",onClickInput.bind(null,this)],[inputField,"paste",onPaste.bind(null,this)],[document,"mousedown",onMousedownDocument],[document,"touchstart",onMousedownDocument],[window,"resize",picker.place.bind(picker)]];registerListeners(this,listeners)}}static formatDate(date,format,lang){return formatDate(date,format,lang&&locales[lang]||locales.en)}static parseDate(dateStr,format,lang){return parseDate(dateStr,format,lang&&locales[lang]||locales.en)}static get locales(){return locales}get active(){return!(!this.picker||!this.picker.active)}get pickerElement(){return this.picker?this.picker.element:void 0}setOptions(options){const picker=this.picker,newOptions=processOptions(options,this);Object.assign(this._options,options),Object.assign(this.config,newOptions),picker.setOptions(newOptions),refreshUI(this,3)}show(){if(this.inputField){if(this.inputField.disabled)return;isActiveElement(this.inputField)||this.config.disableTouchKeyboard||(this._showing=!0,this.inputField.focus(),delete this._showing)}this.picker.show()}hide(){this.inline||(this.picker.hide(),this.picker.update().changeView(this.config.startView).render())}destroy(){return this.hide(),unregisterListeners(this),this.picker.detach(),this.inline||this.inputField.classList.remove("datepicker-input"),delete this.element.datepicker,this}getDate(format){const callback=format?date=>formatDate(date,format,this.config.locale):date=>new Date(date);return this.config.multidate?this.dates.map(callback):this.dates.length>0?callback(this.dates[0]):void 0}setDate(...args){const dates=[...args],opts={},lastArg=lastItemOf(args);"object"!=typeof lastArg||Array.isArray(lastArg)||lastArg instanceof Date||!lastArg||Object.assign(opts,dates.pop());const inputDates=Array.isArray(dates[0])?dates[0]:dates;setDate(this,inputDates,opts)}update(options){if(this.inline)return;const opts=Object.assign(options||{},{clear:!0,render:!0}),inputDates=stringToArray(this.inputField.value,this.config.dateDelimiter);setDate(this,inputDates,opts)}refresh(target,forceRender=!1){let mode;target&&"string"!=typeof target&&(forceRender=target,target=void 0),mode="picker"===target?2:"input"===target?1:3,refreshUI(this,mode,!forceRender)}enterEditMode(){this.inline||!this.picker.active||this.editMode||(this.editMode=!0,this.inputField.classList.add("in-edit"))}exitEditMode(options){if(this.inline||!this.editMode)return;const opts=Object.assign({update:!1},options);delete this.editMode,this.inputField.classList.remove("in-edit"),opts.update&&this.update(opts)}}function filterOptions(options){const newOpts=Object.assign({},options);return delete newOpts.inputs,delete newOpts.allowOneSidedRange,delete newOpts.maxNumberOfDates,newOpts}function setupDatepicker(rangepicker,changeDateListener,el,options){registerListeners(rangepicker,[[el,"changeDate",changeDateListener]]),new Datepicker(el,options,rangepicker)}function onChangeDate(rangepicker,ev){if(rangepicker._updating)return;rangepicker._updating=!0;const target=ev.target;if(void 0===target.datepicker)return;const datepickers=rangepicker.datepickers,setDateOptions={render:!1},changedSide=rangepicker.inputs.indexOf(target),otherSide=0===changedSide?1:0,changedDate=datepickers[changedSide].dates[0],otherDate=datepickers[otherSide].dates[0];void 0!==changedDate&&void 0!==otherDate?0===changedSide&&changedDate>otherDate?(datepickers[0].setDate(otherDate,setDateOptions),datepickers[1].setDate(changedDate,setDateOptions)):1===changedSide&&changedDate<otherDate&&(datepickers[0].setDate(changedDate,setDateOptions),datepickers[1].setDate(otherDate,setDateOptions)):rangepicker.allowOneSidedRange||void 0===changedDate&&void 0===otherDate||(setDateOptions.clear=!0,datepickers[otherSide].setDate(datepickers[changedSide].dates,setDateOptions)),datepickers[0].picker.update().render(),datepickers[1].picker.update().render(),delete rangepicker._updating}class DateRangePicker{constructor(element,options={}){const inputs=Array.isArray(options.inputs)?options.inputs:Array.from(element.querySelectorAll("input"));if(inputs.length<2)return;element.rangepicker=this,this.element=element,this.inputs=inputs.slice(0,2),this.allowOneSidedRange=!!options.allowOneSidedRange;const changeDateListener=onChangeDate.bind(null,this),cleanOptions=filterOptions(options),datepickers=[];Object.defineProperty(this,"datepickers",{get:()=>datepickers}),setupDatepicker(this,changeDateListener,this.inputs[0],cleanOptions),setupDatepicker(this,changeDateListener,this.inputs[1],cleanOptions),Object.freeze(datepickers),datepickers[0].dates.length>0?onChangeDate(this,{target:this.inputs[0]}):datepickers[1].dates.length>0&&onChangeDate(this,{target:this.inputs[1]})}get dates(){return 2===this.datepickers.length?[this.datepickers[0].dates[0],this.datepickers[1].dates[0]]:void 0}setOptions(options){this.allowOneSidedRange=!!options.allowOneSidedRange;const cleanOptions=filterOptions(options);this.datepickers[0].setOptions(cleanOptions),this.datepickers[1].setOptions(cleanOptions)}destroy(){this.datepickers[0].destroy(),this.datepickers[1].destroy(),unregisterListeners(this),delete this.element.rangepicker}getDates(format){const callback=format?date=>formatDate(date,format,this.datepickers[0].config.locale):date=>new Date(date);return this.dates.map(date=>void 0===date?date:callback(date))}setDates(rangeStart,rangeEnd){const[datepicker0,datepicker1]=this.datepickers,origDates=this.dates;this._updating=!0,datepicker0.setDate(rangeStart),datepicker1.setDate(rangeEnd),delete this._updating,datepicker1.dates[0]!==origDates[1]?onChangeDate(this,{target:this.inputs[1]}):datepicker0.dates[0]!==origDates[0]&&onChangeDate(this,{target:this.inputs[0]})}}window.Datepicker=Datepicker,window.DateRangePicker=DateRangePicker}();let slidersArray=document.querySelectorAll(".slider");function validate(){const areatext=document.querySelector("textarea").value.length,textcount=document.querySelector("#textcount");textcount.innerHTML=areatext}slidersArray.forEach((function(e,index){e.addEventListener("click",(function(){let activeElements;document.querySelectorAll(".slider.active").forEach((function(element){element.classList.remove("active")})),e.classList.add("active");let sliderControls=document.querySelectorAll(".slider-control span");sliderControls.forEach((function(element){element.classList.remove("active")})),sliderControls[index].classList.add("active")}))})),calendarPickers=document.querySelectorAll("input.date"),calendarPickers.forEach((function(e){const datepicker=new Datepicker(e,{})}));const elem=document.querySelectorAll("input.date");var x,i,j,l,ll,selElmnt,a,b,c;for(l=(x=document.getElementsByClassName("custom-select")).length,i=0;i<l;i++){for(ll=(selElmnt=x[i].getElementsByTagName("select")[0]).length,(a=document.createElement("DIV")).setAttribute("class","form-select"),a.innerHTML=selElmnt.options[selElmnt.selectedIndex].innerHTML,x[i].appendChild(a),(b=document.createElement("DIV")).setAttribute("class","select-items select-hide"),j=1;j<ll;j++)(c=document.createElement("DIV")).innerHTML=selElmnt.options[j].innerHTML,c.addEventListener("click",(function(e){var y,i,k,s,h,sl,yl;for(sl=(s=this.parentNode.parentNode.getElementsByTagName("select")[0]).length,h=this.parentNode.previousSibling,i=0;i<sl;i++)if(s.options[i].innerHTML==this.innerHTML){for(s.selectedIndex=i,h.innerHTML=this.innerHTML,yl=(y=this.parentNode.getElementsByClassName("same-as-selected")).length,k=0;k<yl;k++)y[k].removeAttribute("class");this.setAttribute("class","same-as-selected");break}h.click()})),b.appendChild(c);x[i].appendChild(b),a.addEventListener("click",(function(e){e.stopPropagation(),closeAllSelect(this),this.nextSibling.classList.toggle("select-hide"),this.classList.toggle("select-arrow-active")}))}function closeAllSelect(elmnt){var x,y,i,xl,yl,arrNo=[];for(x=document.getElementsByClassName("select-items"),y=document.getElementsByClassName("form-select"),xl=x.length,yl=y.length,i=0;i<yl;i++)elmnt==y[i]?arrNo.push(i):y[i].classList.remove("select-arrow-active");for(i=0;i<xl;i++)arrNo.indexOf(i)&&x[i].classList.add("select-hide")}document.addEventListener("click",closeAllSelect);