{"version":3,"names":["tempusDominus","$","core","luxon","_interopDefaultLegacy","e","default","_interopNamespace","__esModule","n","Object","create","keys","forEach","k","d","getOwnPropertyDescriptor","defineProperty","get","enumerable","Unit","$__default","luxon__namespace","twoDigitTemplate","month","day","year","hour","minute","second","hour12","twoDigitTwentyFourTemplate","getFormatByUnit","unit","dateStyle","DateTime","Date","constructor","super","arguments","this","locale","nonLeapLadder","leapLadder","setLocale","value","static","date","Error","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","input","localization","clone","hours","minutes","seconds","startOf","startOfTheWeek","undefined","setMilliseconds","setSeconds","setMinutes","setHours","weekDay","goBack","manipulate","setDate","setMonth","endOf","format","template","Intl","DateTimeFormat","isBefore","compare","valueOf","isAfter","isSame","convert","isBetween","left","right","inclusivity","leftInclusivity","rightInclusivity","parts","timeStyle","formatToParts","filter","x","type","secondsFormatted","minutesFormatted","hoursFormatted","twelveHoursFormatted","meridiem","_a","find","p","dateFormatted","getDay","targetMonth","endOfMonth","monthFormatted","setFullYear","week","ordinal","computeOrdinal","weekday","getUTCDay","weekNumber","Math","floor","weeksInWeekYear","weekYear","p1","last","p2","isLeapYear","TdError","ErrorMessages","base","failedToSetInvalidDate","failedToParseInput","unexpectedOption","optionName","error","code","unexpectedOptions","join","unexpectedOptionValue","badValue","validOptions","typeMismatch","badType","expectedType","numbersOutOfRage","lower","upper","failedToParseDate","soft","console","warn","mustProvideElement","subscribeMismatch","conflictingConfiguration","message","customDateFormatError","dateString","throwError","NAME","Namespace","dataKey","events","Events","key","change","update","show","hide","blur","focus","keyup","keydown","css","Css","widget","calendarHeader","switch","toolbar","noHighlight","sideBySide","previous","next","disabled","old","new","active","dateContainer","decadesContainer","decade","yearsContainer","monthsContainer","daysContainer","calendarWeeks","dayOfTheWeek","today","weekend","timeContainer","separator","clockContainer","hourContainer","minuteContainer","secondContainer","toggleMeridiem","collapsing","collapse","inline","lightTheme","darkTheme","isDarkPreferredQuery","errorMessages","ServiceLocator","cache","Map","locate","identifier","service","set","serviceLocator","CalendarModes","name","className","step","OptionsStore","viewDate","_currentCalendarViewMode","minimumCalendarViewMode","currentView","currentCalendarViewMode","refreshCurrentView","Validation","optionsStore","isValid","targetDate","granularity","options","restrictions","disabledDates","length","_isInDisabledDates","enabledDates","_isInEnabledDates","daysOfWeekDisabled","indexOf","minDate","maxDate","disabledHours","_isInDisabledHours","enabledHours","_isInEnabledHours","disabledTimeIntervals","from","to","testDate","formattedDate","map","EventEmitter","subscribers","subscribe","callback","push","unsubscribe","bind","index","splice","emit","destroy","EventEmitters","triggerEvent","viewUpdate","updateDisplay","action","DefaultOptions","display","icons","time","up","down","clear","close","viewMode","toolbarPlacement","keepOpen","buttons","components","calendar","decades","clock","useTwentyfourHour","theme","stepping","useCurrent","defaultDate","selectMonth","previousMonth","nextMonth","selectYear","previousYear","nextYear","selectDecade","previousDecade","nextDecade","previousCentury","nextCentury","pickHour","incrementHour","decrementHour","pickMinute","incrementMinute","decrementMinute","pickSecond","incrementSecond","decrementSecond","selectTime","selectDate","dayViewHeaderFormat","dateFormats","LTS","LT","L","LL","LLL","LLLL","keepInvalid","debug","allowInputToggle","multipleDates","multipleDatesSeparator","promptTimeOnDateChange","promptTimeOnDateChangeTransitionDelay","meta","container","OptionConverter","o","inputElement","HTMLElement","Element","Array","isArray","deepCopy","paths","obj","charAt","slice","split","reduce","isValue","provided","copyTo","path","defaultOptions","objectPath","unsupportedOptions","includes","flattenedOptions","getFlattenDefaultOptions","errors","didYouMean","y","defaultOptionValue","providedType","defaultType","substring","lastIndexOf","ignoreProperties","processKey","spread","dateTime","dateConversion","_typeCheckNumberArray","_typeCheckDateArray","valueObject","i","vk","subOptionName","keyOptions","appendChild","toString","providedOptions","mergeTo","newConfig","element","eData","JSON","parse","stringify","dataset","tdTargetInput","tdTargetToggle","DOMStringMap","dataOptions","objectToNormalized","object","lowered","toLowerCase","rabbitHole","optionSubgroup","keyOption","internalObject","optionsLower","startsWith","_mergeOptions","fromString","converted","_dateTypeCheck","_flattenDefaults","deepKeys","t","pre","entries","flatMap","v","config","a","Dates","_dates","validation","_eventEmitters","picked","lastPicked","lastPickedIndex","formatInput","parseInput","setFromInput","setValue","add","isPicked","innerDateFormatted","pickedIndex","unset","oldDate","isClear","factor","startYear","target","noIndex","updateInput","newValue","round","reason","ActionTypes","ActionTypes$1","DateDisplay","dates","getPicker","document","createElement","classList","append","_daysOfTheWeek","div","setAttribute","selectDay","_update","paint","getElementsByClassName","switcher","parentElement","getElementsByTagName","remove","innerDate","querySelectorAll","containerClone","contains","innerText","classes","row","htmlDivElement","MonthDisplay","YearDisplay","_startYear","_endYear","DecadeDisplay","start","end","getStartEndYear","_startDecade","_endDecade","pickedYears","textContent","startDecadeYear","endDecadeYear","TimeDisplay","_gridColumns","iconTag","_grid","timesDiv","querySelector","incrementHours","decrementHours","incrementMinutes","decrementMinutes","incrementSeconds","decrementSeconds","toggle","style","gridTemplateAreas","top","middle","bottom","upIcon","downIcon","separatorColon","cloneNode","innerHTML","getSeparator","colon","divElement","showHours","showMinutes","showSeconds","button","trim","HourDisplay","selectHour","MinuteDisplay","selectMinute","secondDisplay","selectSecond","Collapse","height","setTimeout","showImmediately","getTransitionDurationFromElement","scrollHeight","getBoundingClientRect","offsetHeight","hideImmediately","transitionDuration","transitionDelay","window","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","Display","_isVisible","_documentClickEvent","composedPath","_actionsClickEvent","dateDisplay","monthDisplay","yearDisplay","decadeDisplay","timeDisplay","hourDisplay","minuteDisplay","_widget","result","isVisible","_hasTime","_updateCalendarHeader","_hasDate","_unit","_date","_classes","_element","_b","tries","direction","_buildWidget","_updateTheme","onlyClock","showClock","_showMode","body","_popperInstance","createPopper","modifiers","enabled","placement","documentElement","dir","addEventListener","max","min","datePickerMode","picker","_getThemeClass","matchMedia","removeEventListener","currentTheme","isDarkMode","matches","showing","getAttribute","_dispose","parentNode","removeChild","dateView","getHeadTemplate","timeView","_iconTag","getToolbarElements","arrow","title","icon","togglePicker","changeCalendarView","iconClass","svg","createElementNS","_rebuild","wasVisible","Actions","do","currentTarget","handleNextPrevious","hideOrClock","manipulateAndSet","outerHTML","handleShowClockContainers","htmlElement","classToUse","newDate","TempusDominus","_subscribers","_isDisabled","_inputChangeEvent","event","detail","setViewDate","valueSplit","_toggleClickEvent","actions","_initializeOptions","_initializeInput","_initializeToggle","_triggerEvent","_viewUpdate","updateOptions","reset","disable","enable","removeAttribute","eventTypes","callbacks","callBackArray","returnArray","eventType","_unsubscribe","dispose","_c","_toggle","language","asked","loadedLocales","isChangeEvent","_handleAfterChangeEvent","dispatchEvent","CustomEvent","jQuery","trigger","_publish","eventName","includeDataset","_dataToOptions","_validateConflicts","findIndex","dayPeriod","tagName","query","clearTimeout","_currentPromptTimeTimeout","extend","plugin","option","installed","loadLocale","l","version","tdClasses","tdFactory","prototype","parsedDate","fromFormat","toJSDate","getTime","fromJSDate","toFormat","jQueryInterface","argument","jQueryHandleThis","each","me","data","isDateUpdateThroughDateOptionFromClientCode","ret","getSelectorFromElement","$element","$selector","selector","attr","test","JQUERY_NO_CONFLICT","fn","Constructor","noConflict","Popper"],"sources":["./dist/js/tempus-dominus.js"],"sourcesContent":["/*!\n * Tempus Dominus v6.0.0 (https://getdatepicker.com/)\n * Copyright 2013-2022 Jonathan Peterson\n * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE)\n */\nvar tempusDominus = (function ($, core, luxon) {\n 'use strict';\n\n function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\n function _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return n;\n }\n\n var $__default = /*#__PURE__*/_interopDefaultLegacy($);\n var luxon__namespace = /*#__PURE__*/_interopNamespace(luxon);\n\n var Unit;\r\n (function (Unit) {\r\n Unit[\"seconds\"] = \"seconds\";\r\n Unit[\"minutes\"] = \"minutes\";\r\n Unit[\"hours\"] = \"hours\";\r\n Unit[\"date\"] = \"date\";\r\n Unit[\"month\"] = \"month\";\r\n Unit[\"year\"] = \"year\";\r\n })(Unit || (Unit = {}));\r\n const twoDigitTemplate = {\r\n month: '2-digit',\r\n day: '2-digit',\r\n year: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n second: '2-digit',\r\n hour12: true,\r\n };\r\n const twoDigitTwentyFourTemplate = {\r\n hour: '2-digit',\r\n hour12: false\r\n };\r\n const getFormatByUnit = (unit) => {\r\n switch (unit) {\r\n case 'date':\r\n return { dateStyle: 'short' };\r\n case 'month':\r\n return {\r\n month: 'numeric',\r\n year: 'numeric'\r\n };\r\n case 'year':\r\n return { year: 'numeric' };\r\n }\r\n };\r\n /**\r\n * For the most part this object behaves exactly the same way\r\n * as the native Date object with a little extra spice.\r\n */\r\n class DateTime extends Date {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * Used with Intl.DateTimeFormat\r\n */\r\n this.locale = 'default';\r\n this.nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\r\n this.leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\r\n }\r\n /**\r\n * Chainable way to set the {@link locale}\r\n * @param value\r\n */\r\n setLocale(value) {\r\n this.locale = value;\r\n return this;\r\n }\r\n /**\r\n * Converts a plain JS date object to a DateTime object.\r\n * Doing this allows access to format, etc.\r\n * @param date\r\n * @param locale\r\n */\r\n static convert(date, locale = 'default') {\r\n if (!date)\r\n throw new Error(`A date is required`);\r\n return new DateTime(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()).setLocale(locale);\r\n }\r\n /**\r\n * Attempts to create a DateTime from a string. A customDateFormat is required for non US dates.\r\n * @param input\r\n * @param localization\r\n */\r\n static fromString(input, localization) {\r\n return new DateTime(input);\r\n }\r\n /**\r\n * Native date manipulations are not pure functions. This function creates a duplicate of the DateTime object.\r\n */\r\n get clone() {\r\n return new DateTime(this.year, this.month, this.date, this.hours, this.minutes, this.seconds, this.getMilliseconds()).setLocale(this.locale);\r\n }\r\n /**\r\n * Sets the current date to the start of the {@link unit} provided\r\n * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).startOf('month')\r\n * would return April 1, 2021, 12:00:00.000 AM (midnight)\r\n * @param unit\r\n * @param startOfTheWeek Allows for the changing the start of the week.\r\n */\r\n startOf(unit, startOfTheWeek = 0) {\r\n if (this[unit] === undefined)\r\n throw new Error(`Unit '${unit}' is not valid`);\r\n switch (unit) {\r\n case 'seconds':\r\n this.setMilliseconds(0);\r\n break;\r\n case 'minutes':\r\n this.setSeconds(0, 0);\r\n break;\r\n case 'hours':\r\n this.setMinutes(0, 0, 0);\r\n break;\r\n case 'date':\r\n this.setHours(0, 0, 0, 0);\r\n break;\r\n case 'weekDay':\r\n this.startOf(Unit.date);\r\n if (this.weekDay === startOfTheWeek)\r\n break;\r\n let goBack = this.weekDay;\r\n if (startOfTheWeek !== 0 && this.weekDay === 0)\r\n goBack = 8 - startOfTheWeek;\r\n this.manipulate(startOfTheWeek - goBack, Unit.date);\r\n break;\r\n case 'month':\r\n this.startOf(Unit.date);\r\n this.setDate(1);\r\n break;\r\n case 'year':\r\n this.startOf(Unit.date);\r\n this.setMonth(0, 1);\r\n break;\r\n }\r\n return this;\r\n }\r\n /**\r\n * Sets the current date to the end of the {@link unit} provided\r\n * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).endOf('month')\r\n * would return April 30, 2021, 11:59:59.999 PM\r\n * @param unit\r\n * @param startOfTheWeek\r\n */\r\n endOf(unit, startOfTheWeek = 0) {\r\n if (this[unit] === undefined)\r\n throw new Error(`Unit '${unit}' is not valid`);\r\n switch (unit) {\r\n case 'seconds':\r\n this.setMilliseconds(999);\r\n break;\r\n case 'minutes':\r\n this.setSeconds(59, 999);\r\n break;\r\n case 'hours':\r\n this.setMinutes(59, 59, 999);\r\n break;\r\n case 'date':\r\n this.setHours(23, 59, 59, 999);\r\n break;\r\n case 'weekDay':\r\n this.endOf(Unit.date);\r\n this.manipulate((6 + startOfTheWeek) - this.weekDay, Unit.date);\r\n break;\r\n case 'month':\r\n this.endOf(Unit.date);\r\n this.manipulate(1, Unit.month);\r\n this.setDate(0);\r\n break;\r\n case 'year':\r\n this.endOf(Unit.date);\r\n this.manipulate(1, Unit.year);\r\n this.setDate(0);\r\n break;\r\n }\r\n return this;\r\n }\r\n /**\r\n * Change a {@link unit} value. Value can be positive or negative\r\n * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).manipulate(1, 'month')\r\n * would return May 30, 2021, 11:45:32.984 AM\r\n * @param value A positive or negative number\r\n * @param unit\r\n */\r\n manipulate(value, unit) {\r\n if (this[unit] === undefined)\r\n throw new Error(`Unit '${unit}' is not valid`);\r\n this[unit] += value;\r\n return this;\r\n }\r\n /**\r\n * Returns a string format.\r\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat\r\n * for valid templates and locale objects\r\n * @param template An object. Uses browser defaults otherwise.\r\n * @param locale Can be a string or an array of strings. Uses browser defaults otherwise.\r\n */\r\n format(template, locale = this.locale) {\r\n return new Intl.DateTimeFormat(locale, template).format(this);\r\n }\r\n /**\r\n * Return true if {@link compare} is before this date\r\n * @param compare The Date/DateTime to compare\r\n * @param unit If provided, uses {@link startOf} for\r\n * comparision.\r\n */\r\n isBefore(compare, unit) {\r\n if (!unit)\r\n return this.valueOf() < compare.valueOf();\r\n if (this[unit] === undefined)\r\n throw new Error(`Unit '${unit}' is not valid`);\r\n return (this.clone.startOf(unit).valueOf() < compare.clone.startOf(unit).valueOf());\r\n }\r\n /**\r\n * Return true if {@link compare} is after this date\r\n * @param compare The Date/DateTime to compare\r\n * @param unit If provided, uses {@link startOf} for\r\n * comparision.\r\n */\r\n isAfter(compare, unit) {\r\n if (!unit)\r\n return this.valueOf() > compare.valueOf();\r\n if (this[unit] === undefined)\r\n throw new Error(`Unit '${unit}' is not valid`);\r\n return (this.clone.startOf(unit).valueOf() > compare.clone.startOf(unit).valueOf());\r\n }\r\n /**\r\n * Return true if {@link compare} is same this date\r\n * @param compare The Date/DateTime to compare\r\n * @param unit If provided, uses {@link startOf} for\r\n * comparision.\r\n */\r\n isSame(compare, unit) {\r\n if (!unit)\r\n return this.valueOf() === compare.valueOf();\r\n if (this[unit] === undefined)\r\n throw new Error(`Unit '${unit}' is not valid`);\r\n compare = DateTime.convert(compare);\r\n return (this.clone.startOf(unit).valueOf() === compare.startOf(unit).valueOf());\r\n }\r\n /**\r\n * Check if this is between two other DateTimes, optionally looking at unit scale. The match is exclusive.\r\n * @param left\r\n * @param right\r\n * @param unit.\r\n * @param inclusivity. A [ indicates inclusion of a value. A ( indicates exclusion.\r\n * If the inclusivity parameter is used, both indicators must be passed.\r\n */\r\n isBetween(left, right, unit, inclusivity = '()') {\r\n if (unit && this[unit] === undefined)\r\n throw new Error(`Unit '${unit}' is not valid`);\r\n const leftInclusivity = inclusivity[0] === '(';\r\n const rightInclusivity = inclusivity[1] === ')';\r\n return (((leftInclusivity\r\n ? this.isAfter(left, unit)\r\n : !this.isBefore(left, unit)) &&\r\n (rightInclusivity\r\n ? this.isBefore(right, unit)\r\n : !this.isAfter(right, unit))) ||\r\n ((leftInclusivity\r\n ? this.isBefore(left, unit)\r\n : !this.isAfter(left, unit)) &&\r\n (rightInclusivity\r\n ? this.isAfter(right, unit)\r\n : !this.isBefore(right, unit))));\r\n }\r\n /**\r\n * Returns flattened object of the date. Does not include literals\r\n * @param locale\r\n * @param template\r\n */\r\n parts(locale = this.locale, template = { dateStyle: 'full', timeStyle: 'long' }) {\r\n const parts = {};\r\n new Intl.DateTimeFormat(locale, template)\r\n .formatToParts(this)\r\n .filter((x) => x.type !== 'literal')\r\n .forEach((x) => (parts[x.type] = x.value));\r\n return parts;\r\n }\r\n /**\r\n * Shortcut to Date.getSeconds()\r\n */\r\n get seconds() {\r\n return this.getSeconds();\r\n }\r\n /**\r\n * Shortcut to Date.setSeconds()\r\n */\r\n set seconds(value) {\r\n this.setSeconds(value);\r\n }\r\n /**\r\n * Returns two digit hours\r\n */\r\n get secondsFormatted() {\r\n return this.parts(undefined, twoDigitTemplate).second;\r\n }\r\n /**\r\n * Shortcut to Date.getMinutes()\r\n */\r\n get minutes() {\r\n return this.getMinutes();\r\n }\r\n /**\r\n * Shortcut to Date.setMinutes()\r\n */\r\n set minutes(value) {\r\n this.setMinutes(value);\r\n }\r\n /**\r\n * Returns two digit minutes\r\n */\r\n get minutesFormatted() {\r\n return this.parts(undefined, twoDigitTemplate).minute;\r\n }\r\n /**\r\n * Shortcut to Date.getHours()\r\n */\r\n get hours() {\r\n return this.getHours();\r\n }\r\n /**\r\n * Shortcut to Date.setHours()\r\n */\r\n set hours(value) {\r\n this.setHours(value);\r\n }\r\n /**\r\n * Returns two digit hours\r\n */\r\n get hoursFormatted() {\r\n return this.parts(undefined, twoDigitTwentyFourTemplate).hour;\r\n }\r\n /**\r\n * Returns two digit hours but in twelve hour mode e.g. 13 -> 1\r\n */\r\n get twelveHoursFormatted() {\r\n return this.parts(undefined, twoDigitTemplate).hour;\r\n }\r\n /**\r\n * Get the meridiem of the date. E.g. AM or PM.\r\n * If the {@link locale} provides a \"dayPeriod\" then this will be returned,\r\n * otherwise it will return AM or PM.\r\n * @param locale\r\n */\r\n meridiem(locale = this.locale) {\r\n var _a;\r\n return (_a = new Intl.DateTimeFormat(locale, {\r\n hour: 'numeric',\r\n hour12: true\r\n })\r\n .formatToParts(this)\r\n .find((p) => p.type === 'dayPeriod')) === null || _a === void 0 ? void 0 : _a.value;\r\n }\r\n /**\r\n * Shortcut to Date.getDate()\r\n */\r\n get date() {\r\n return this.getDate();\r\n }\r\n /**\r\n * Shortcut to Date.setDate()\r\n */\r\n set date(value) {\r\n this.setDate(value);\r\n }\r\n /**\r\n * Return two digit date\r\n */\r\n get dateFormatted() {\r\n return this.parts(undefined, twoDigitTemplate).day;\r\n }\r\n /**\r\n * Shortcut to Date.getDay()\r\n */\r\n get weekDay() {\r\n return this.getDay();\r\n }\r\n /**\r\n * Shortcut to Date.getMonth()\r\n */\r\n get month() {\r\n return this.getMonth();\r\n }\r\n /**\r\n * Shortcut to Date.setMonth()\r\n */\r\n set month(value) {\r\n const targetMonth = new Date(this.year, value + 1);\r\n targetMonth.setDate(0);\r\n const endOfMonth = targetMonth.getDate();\r\n if (this.date > endOfMonth) {\r\n this.date = endOfMonth;\r\n }\r\n this.setMonth(value);\r\n }\r\n /**\r\n * Return two digit, human expected month. E.g. January = 1, December = 12\r\n */\r\n get monthFormatted() {\r\n return this.parts(undefined, twoDigitTemplate).month;\r\n }\r\n /**\r\n * Shortcut to Date.getFullYear()\r\n */\r\n get year() {\r\n return this.getFullYear();\r\n }\r\n /**\r\n * Shortcut to Date.setFullYear()\r\n */\r\n set year(value) {\r\n this.setFullYear(value);\r\n }\r\n // borrowed a bunch of stuff from Luxon\r\n /**\r\n * Gets the week of the year\r\n */\r\n get week() {\r\n const ordinal = this.computeOrdinal(), weekday = this.getUTCDay();\r\n let weekNumber = Math.floor((ordinal - weekday + 10) / 7);\r\n if (weekNumber < 1) {\r\n weekNumber = this.weeksInWeekYear(this.year - 1);\r\n }\r\n else if (weekNumber > this.weeksInWeekYear(this.year)) {\r\n weekNumber = 1;\r\n }\r\n return weekNumber;\r\n }\r\n weeksInWeekYear(weekYear) {\r\n const p1 = (weekYear +\r\n Math.floor(weekYear / 4) -\r\n Math.floor(weekYear / 100) +\r\n Math.floor(weekYear / 400)) %\r\n 7, last = weekYear - 1, p2 = (last +\r\n Math.floor(last / 4) -\r\n Math.floor(last / 100) +\r\n Math.floor(last / 400)) %\r\n 7;\r\n return p1 === 4 || p2 === 3 ? 53 : 52;\r\n }\r\n get isLeapYear() {\r\n return this.year % 4 === 0 && (this.year % 100 !== 0 || this.year % 400 === 0);\r\n }\r\n computeOrdinal() {\r\n return this.date + (this.isLeapYear ? this.leapLadder : this.nonLeapLadder)[this.month];\r\n }\r\n }\n\n class TdError extends Error {\r\n }\r\n class ErrorMessages {\r\n constructor() {\r\n this.base = 'TD:';\r\n //#endregion\r\n //#region used with notify.error\r\n /**\r\n * Used with an Error Event type if the user selects a date that\r\n * fails restriction validation.\r\n */\r\n this.failedToSetInvalidDate = 'Failed to set invalid date';\r\n /**\r\n * Used with an Error Event type when a user changes the value of the\r\n * input field directly, and does not provide a valid date.\r\n */\r\n this.failedToParseInput = 'Failed parse input field';\r\n //#endregion\r\n }\r\n //#region out to console\r\n /**\r\n * Throws an error indicating that a key in the options object is invalid.\r\n * @param optionName\r\n */\r\n unexpectedOption(optionName) {\r\n const error = new TdError(`${this.base} Unexpected option: ${optionName} does not match a known option.`);\r\n error.code = 1;\r\n throw error;\r\n }\r\n /**\r\n * Throws an error indicating that one more keys in the options object is invalid.\r\n * @param optionName\r\n */\r\n unexpectedOptions(optionName) {\r\n const error = new TdError(`${this.base}: ${optionName.join(', ')}`);\r\n error.code = 1;\r\n throw error;\r\n }\r\n /**\r\n * Throws an error when an option is provide an unsupported value.\r\n * For example a value of 'cheese' for toolbarPlacement which only supports\r\n * 'top', 'bottom', 'default'.\r\n * @param optionName\r\n * @param badValue\r\n * @param validOptions\r\n */\r\n unexpectedOptionValue(optionName, badValue, validOptions) {\r\n const error = new TdError(`${this.base} Unexpected option value: ${optionName} does not accept a value of \"${badValue}\". Valid values are: ${validOptions.join(', ')}`);\r\n error.code = 2;\r\n throw error;\r\n }\r\n /**\r\n * Throws an error when an option value is the wrong type.\r\n * For example a string value was provided to multipleDates which only\r\n * supports true or false.\r\n * @param optionName\r\n * @param badType\r\n * @param expectedType\r\n */\r\n typeMismatch(optionName, badType, expectedType) {\r\n const error = new TdError(`${this.base} Mismatch types: ${optionName} has a type of ${badType} instead of the required ${expectedType}`);\r\n error.code = 3;\r\n throw error;\r\n }\r\n /**\r\n * Throws an error when an option value is outside of the expected range.\r\n * For example restrictions.daysOfWeekDisabled excepts a value between 0 and 6.\r\n * @param optionName\r\n * @param lower\r\n * @param upper\r\n */\r\n numbersOutOfRage(optionName, lower, upper) {\r\n const error = new TdError(`${this.base} ${optionName} expected an array of number between ${lower} and ${upper}.`);\r\n error.code = 4;\r\n throw error;\r\n }\r\n /**\r\n * Throws an error when a value for a date options couldn't be parsed. Either\r\n * the option was an invalid string or an invalid Date object.\r\n * @param optionName\r\n * @param date\r\n * @param soft If true, logs a warning instead of an error.\r\n */\r\n failedToParseDate(optionName, date, soft = false) {\r\n const error = new TdError(`${this.base} Could not correctly parse \"${date}\" to a date for ${optionName}.`);\r\n error.code = 5;\r\n if (!soft)\r\n throw error;\r\n console.warn(error);\r\n }\r\n /**\r\n * Throws when an element to attach to was not provided in the constructor.\r\n */\r\n mustProvideElement() {\r\n const error = new TdError(`${this.base} No element was provided.`);\r\n error.code = 6;\r\n throw error;\r\n }\r\n /**\r\n * Throws if providing an array for the events to subscribe method doesn't have\r\n * the same number of callbacks. E.g., subscribe([1,2], [1])\r\n */\r\n subscribeMismatch() {\r\n const error = new TdError(`${this.base} The subscribed events does not match the number of callbacks`);\r\n error.code = 7;\r\n throw error;\r\n }\r\n /**\r\n * Throws if the configuration has conflicting rules e.g. minDate is after maxDate\r\n */\r\n conflictingConfiguration(message) {\r\n const error = new TdError(`${this.base} A configuration value conflicts with another rule. ${message}`);\r\n error.code = 8;\r\n throw error;\r\n }\r\n /**\r\n * customDateFormat errors\r\n */\r\n customDateFormatError(message) {\r\n const error = new TdError(`${this.base} customDateFormat: ${message}`);\r\n error.code = 9;\r\n throw error;\r\n }\r\n /**\r\n * Logs a warning if a date option value is provided as a string, instead of\r\n * a date/datetime object.\r\n */\r\n dateString() {\r\n console.warn(`${this.base} Using a string for date options is not recommended unless you specify an ISO string or use the customDateFormat plugin.`);\r\n }\r\n throwError(message) {\r\n const error = new TdError(`${this.base} ${message}`);\r\n error.code = 9;\r\n throw error;\r\n }\r\n }\n\n // this is not the way I want this to stay but nested classes seemed to blown up once its compiled.\r\n const NAME = 'tempus-dominus', dataKey = 'td';\r\n /**\r\n * Events\r\n */\r\n class Events {\r\n constructor() {\r\n this.key = `.${dataKey}`;\r\n /**\r\n * Change event. Fired when the user selects a date.\r\n * See also EventTypes.ChangeEvent\r\n */\r\n this.change = `change${this.key}`;\r\n /**\r\n * Emit when the view changes for example from month view to the year view.\r\n * See also EventTypes.ViewUpdateEvent\r\n */\r\n this.update = `update${this.key}`;\r\n /**\r\n * Emits when a selected date or value from the input field fails to meet the provided validation rules.\r\n * See also EventTypes.FailEvent\r\n */\r\n this.error = `error${this.key}`;\r\n /**\r\n * Show event\r\n * @event Events#show\r\n */\r\n this.show = `show${this.key}`;\r\n /**\r\n * Hide event\r\n * @event Events#hide\r\n */\r\n this.hide = `hide${this.key}`;\r\n // blur and focus are used in the jQuery provider but are otherwise unused.\r\n // keyup/down will be used later for keybinding options\r\n this.blur = `blur${this.key}`;\r\n this.focus = `focus${this.key}`;\r\n this.keyup = `keyup${this.key}`;\r\n this.keydown = `keydown${this.key}`;\r\n }\r\n }\r\n class Css {\r\n constructor() {\r\n /**\r\n * The outer element for the widget.\r\n */\r\n this.widget = `${NAME}-widget`;\r\n /**\r\n * Hold the previous, next and switcher divs\r\n */\r\n this.calendarHeader = 'calendar-header';\r\n /**\r\n * The element for the action to change the calendar view. E.g. month -> year.\r\n */\r\n this.switch = 'picker-switch';\r\n /**\r\n * The elements for all the toolbar options\r\n */\r\n this.toolbar = 'toolbar';\r\n /**\r\n * Disables the hover and rounding affect.\r\n */\r\n this.noHighlight = 'no-highlight';\r\n /**\r\n * Applied to the widget element when the side by side option is in use.\r\n */\r\n this.sideBySide = 'timepicker-sbs';\r\n /**\r\n * The element for the action to change the calendar view, e.g. August -> July\r\n */\r\n this.previous = 'previous';\r\n /**\r\n * The element for the action to change the calendar view, e.g. August -> September\r\n */\r\n this.next = 'next';\r\n /**\r\n * Applied to any action that would violate any restriction options. ALso applied\r\n * to an input field if the disabled function is called.\r\n */\r\n this.disabled = 'disabled';\r\n /**\r\n * Applied to any date that is less than requested view,\r\n * e.g. the last day of the previous month.\r\n */\r\n this.old = 'old';\r\n /**\r\n * Applied to any date that is greater than of requested view,\r\n * e.g. the last day of the previous month.\r\n */\r\n this.new = 'new';\r\n /**\r\n * Applied to any date that is currently selected.\r\n */\r\n this.active = 'active';\r\n //#region date element\r\n /**\r\n * The outer element for the calendar view.\r\n */\r\n this.dateContainer = 'date-container';\r\n /**\r\n * The outer element for the decades view.\r\n */\r\n this.decadesContainer = `${this.dateContainer}-decades`;\r\n /**\r\n * Applied to elements within the decades container, e.g. 2020, 2030\r\n */\r\n this.decade = 'decade';\r\n /**\r\n * The outer element for the years view.\r\n */\r\n this.yearsContainer = `${this.dateContainer}-years`;\r\n /**\r\n * Applied to elements within the years container, e.g. 2021, 2021\r\n */\r\n this.year = 'year';\r\n /**\r\n * The outer element for the month view.\r\n */\r\n this.monthsContainer = `${this.dateContainer}-months`;\r\n /**\r\n * Applied to elements within the month container, e.g. January, February\r\n */\r\n this.month = 'month';\r\n /**\r\n * The outer element for the calendar view.\r\n */\r\n this.daysContainer = `${this.dateContainer}-days`;\r\n /**\r\n * Applied to elements within the day container, e.g. 1, 2..31\r\n */\r\n this.day = 'day';\r\n /**\r\n * If display.calendarWeeks is enabled, a column displaying the week of year\r\n * is shown. This class is applied to each cell in that column.\r\n */\r\n this.calendarWeeks = 'cw';\r\n /**\r\n * Applied to the first row of the calendar view, e.g. Sunday, Monday\r\n */\r\n this.dayOfTheWeek = 'dow';\r\n /**\r\n * Applied to the current date on the calendar view.\r\n */\r\n this.today = 'today';\r\n /**\r\n * Applied to the locale's weekend dates on the calendar view, e.g. Sunday, Saturday\r\n */\r\n this.weekend = 'weekend';\r\n //#endregion\r\n //#region time element\r\n /**\r\n * The outer element for all time related elements.\r\n */\r\n this.timeContainer = 'time-container';\r\n /**\r\n * Applied the separator columns between time elements, e.g. hour *:* minute *:* second\r\n */\r\n this.separator = 'separator';\r\n /**\r\n * The outer element for the clock view.\r\n */\r\n this.clockContainer = `${this.timeContainer}-clock`;\r\n /**\r\n * The outer element for the hours selection view.\r\n */\r\n this.hourContainer = `${this.timeContainer}-hour`;\r\n /**\r\n * The outer element for the minutes selection view.\r\n */\r\n this.minuteContainer = `${this.timeContainer}-minute`;\r\n /**\r\n * The outer element for the seconds selection view.\r\n */\r\n this.secondContainer = `${this.timeContainer}-second`;\r\n /**\r\n * Applied to each element in the hours selection view.\r\n */\r\n this.hour = 'hour';\r\n /**\r\n * Applied to each element in the minutes selection view.\r\n */\r\n this.minute = 'minute';\r\n /**\r\n * Applied to each element in the seconds selection view.\r\n */\r\n this.second = 'second';\r\n /**\r\n * Applied AM/PM toggle button.\r\n */\r\n this.toggleMeridiem = 'toggleMeridiem';\r\n //#endregion\r\n //#region collapse\r\n /**\r\n * Applied the element of the current view mode, e.g. calendar or clock.\r\n */\r\n this.show = 'show';\r\n /**\r\n * Applied to the currently showing view mode during a transition\r\n * between calendar and clock views\r\n */\r\n this.collapsing = 'td-collapsing';\r\n /**\r\n * Applied to the currently hidden view mode.\r\n */\r\n this.collapse = 'td-collapse';\r\n //#endregion\r\n /**\r\n * Applied to the widget when the option display.inline is enabled.\r\n */\r\n this.inline = 'inline';\r\n /**\r\n * Applied to the widget when the option display.theme is light.\r\n */\r\n this.lightTheme = 'light';\r\n /**\r\n * Applied to the widget when the option display.theme is dark.\r\n */\r\n this.darkTheme = 'dark';\r\n /**\r\n * Used for detecting if the system color preference is dark mode\r\n */\r\n this.isDarkPreferredQuery = '(prefers-color-scheme: dark)';\r\n }\r\n }\r\n class Namespace {\r\n }\r\n Namespace.NAME = NAME;\r\n // noinspection JSUnusedGlobalSymbols\r\n Namespace.dataKey = dataKey;\r\n Namespace.events = new Events();\r\n Namespace.css = new Css();\r\n Namespace.errorMessages = new ErrorMessages();\n\n class ServiceLocator {\r\n constructor() {\r\n this.cache = new Map();\r\n }\r\n locate(identifier) {\r\n const service = this.cache.get(identifier);\r\n if (service)\r\n return service;\r\n const value = new identifier();\r\n this.cache.set(identifier, value);\r\n return value;\r\n }\r\n }\r\n const setupServiceLocator = () => {\r\n serviceLocator = new ServiceLocator();\r\n };\r\n let serviceLocator;\n\n const CalendarModes = [\r\n {\r\n name: 'calendar',\r\n className: Namespace.css.daysContainer,\r\n unit: Unit.month,\r\n step: 1,\r\n },\r\n {\r\n name: 'months',\r\n className: Namespace.css.monthsContainer,\r\n unit: Unit.year,\r\n step: 1,\r\n },\r\n {\r\n name: 'years',\r\n className: Namespace.css.yearsContainer,\r\n unit: Unit.year,\r\n step: 10,\r\n },\r\n {\r\n name: 'decades',\r\n className: Namespace.css.decadesContainer,\r\n unit: Unit.year,\r\n step: 100,\r\n },\r\n ];\n\n class OptionsStore {\r\n constructor() {\r\n this.viewDate = new DateTime();\r\n this._currentCalendarViewMode = 0;\r\n this.minimumCalendarViewMode = 0;\r\n this.currentView = 'calendar';\r\n }\r\n get currentCalendarViewMode() {\r\n return this._currentCalendarViewMode;\r\n }\r\n set currentCalendarViewMode(value) {\r\n this._currentCalendarViewMode = value;\r\n this.currentView = CalendarModes[value].name;\r\n }\r\n /**\r\n * When switching back to the calendar from the clock,\r\n * this sets currentView to the correct calendar view.\r\n */\r\n refreshCurrentView() {\r\n this.currentView = CalendarModes[this.currentCalendarViewMode].name;\r\n }\r\n }\n\n /**\r\n * Main class for date validation rules based on the options provided.\r\n */\r\n class Validation {\r\n constructor() {\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n }\r\n /**\r\n * Checks to see if the target date is valid based on the rules provided in the options.\r\n * Granularity can be provided to check portions of the date instead of the whole.\r\n * @param targetDate\r\n * @param granularity\r\n */\r\n isValid(targetDate, granularity) {\r\n var _a;\r\n if (this.optionsStore.options.restrictions.disabledDates.length > 0 &&\r\n this._isInDisabledDates(targetDate)) {\r\n return false;\r\n }\r\n if (this.optionsStore.options.restrictions.enabledDates.length > 0 &&\r\n !this._isInEnabledDates(targetDate)) {\r\n return false;\r\n }\r\n if (granularity !== Unit.month &&\r\n granularity !== Unit.year &&\r\n ((_a = this.optionsStore.options.restrictions.daysOfWeekDisabled) === null || _a === void 0 ? void 0 : _a.length) > 0 &&\r\n this.optionsStore.options.restrictions.daysOfWeekDisabled.indexOf(targetDate.weekDay) !== -1) {\r\n return false;\r\n }\r\n if (this.optionsStore.options.restrictions.minDate &&\r\n targetDate.isBefore(this.optionsStore.options.restrictions.minDate, granularity)) {\r\n return false;\r\n }\r\n if (this.optionsStore.options.restrictions.maxDate &&\r\n targetDate.isAfter(this.optionsStore.options.restrictions.maxDate, granularity)) {\r\n return false;\r\n }\r\n if (granularity === Unit.hours ||\r\n granularity === Unit.minutes ||\r\n granularity === Unit.seconds) {\r\n if (this.optionsStore.options.restrictions.disabledHours.length > 0 &&\r\n this._isInDisabledHours(targetDate)) {\r\n return false;\r\n }\r\n if (this.optionsStore.options.restrictions.enabledHours.length > 0 &&\r\n !this._isInEnabledHours(targetDate)) {\r\n return false;\r\n }\r\n if (this.optionsStore.options.restrictions.disabledTimeIntervals.length > 0) {\r\n for (let disabledTimeIntervals of this.optionsStore.options.restrictions.disabledTimeIntervals) {\r\n if (targetDate.isBetween(disabledTimeIntervals.from, disabledTimeIntervals.to))\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Checks to see if the disabledDates option is in use and returns true (meaning invalid)\r\n * if the `testDate` is with in the array. Granularity is by date.\r\n * @param testDate\r\n * @private\r\n */\r\n _isInDisabledDates(testDate) {\r\n if (!this.optionsStore.options.restrictions.disabledDates ||\r\n this.optionsStore.options.restrictions.disabledDates.length === 0)\r\n return false;\r\n const formattedDate = testDate.format(getFormatByUnit(Unit.date));\r\n return this.optionsStore.options.restrictions.disabledDates\r\n .map((x) => x.format(getFormatByUnit(Unit.date)))\r\n .find((x) => x === formattedDate);\r\n }\r\n /**\r\n * Checks to see if the enabledDates option is in use and returns true (meaning valid)\r\n * if the `testDate` is with in the array. Granularity is by date.\r\n * @param testDate\r\n * @private\r\n */\r\n _isInEnabledDates(testDate) {\r\n if (!this.optionsStore.options.restrictions.enabledDates ||\r\n this.optionsStore.options.restrictions.enabledDates.length === 0)\r\n return true;\r\n const formattedDate = testDate.format(getFormatByUnit(Unit.date));\r\n return this.optionsStore.options.restrictions.enabledDates\r\n .map((x) => x.format(getFormatByUnit(Unit.date)))\r\n .find((x) => x === formattedDate);\r\n }\r\n /**\r\n * Checks to see if the disabledHours option is in use and returns true (meaning invalid)\r\n * if the `testDate` is with in the array. Granularity is by hours.\r\n * @param testDate\r\n * @private\r\n */\r\n _isInDisabledHours(testDate) {\r\n if (!this.optionsStore.options.restrictions.disabledHours ||\r\n this.optionsStore.options.restrictions.disabledHours.length === 0)\r\n return false;\r\n const formattedDate = testDate.hours;\r\n return this.optionsStore.options.restrictions.disabledHours.find((x) => x === formattedDate);\r\n }\r\n /**\r\n * Checks to see if the enabledHours option is in use and returns true (meaning valid)\r\n * if the `testDate` is with in the array. Granularity is by hours.\r\n * @param testDate\r\n * @private\r\n */\r\n _isInEnabledHours(testDate) {\r\n if (!this.optionsStore.options.restrictions.enabledHours ||\r\n this.optionsStore.options.restrictions.enabledHours.length === 0)\r\n return true;\r\n const formattedDate = testDate.hours;\r\n return this.optionsStore.options.restrictions.enabledHours.find((x) => x === formattedDate);\r\n }\r\n }\n\n class EventEmitter {\r\n constructor() {\r\n this.subscribers = [];\r\n }\r\n subscribe(callback) {\r\n this.subscribers.push(callback);\r\n return this.unsubscribe.bind(this, this.subscribers.length - 1);\r\n }\r\n unsubscribe(index) {\r\n this.subscribers.splice(index, 1);\r\n }\r\n emit(value) {\r\n this.subscribers.forEach((callback) => {\r\n callback(value);\r\n });\r\n }\r\n destroy() {\r\n this.subscribers = null;\r\n this.subscribers = [];\r\n }\r\n }\r\n class EventEmitters {\r\n constructor() {\r\n this.triggerEvent = new EventEmitter();\r\n this.viewUpdate = new EventEmitter();\r\n this.updateDisplay = new EventEmitter();\r\n this.action = new EventEmitter();\r\n }\r\n destroy() {\r\n this.triggerEvent.destroy();\r\n this.viewUpdate.destroy();\r\n this.updateDisplay.destroy();\r\n this.action.destroy();\r\n }\r\n }\n\n const DefaultOptions = {\r\n restrictions: {\r\n minDate: undefined,\r\n maxDate: undefined,\r\n disabledDates: [],\r\n enabledDates: [],\r\n daysOfWeekDisabled: [],\r\n disabledTimeIntervals: [],\r\n disabledHours: [],\r\n enabledHours: []\r\n },\r\n display: {\r\n icons: {\r\n type: 'icons',\r\n time: 'fa-solid fa-clock',\r\n date: 'fa-solid fa-calendar',\r\n up: 'fa-solid fa-arrow-up',\r\n down: 'fa-solid fa-arrow-down',\r\n previous: 'fa-solid fa-chevron-left',\r\n next: 'fa-solid fa-chevron-right',\r\n today: 'fa-solid fa-calendar-check',\r\n clear: 'fa-solid fa-trash',\r\n close: 'fa-solid fa-xmark'\r\n },\r\n sideBySide: false,\r\n calendarWeeks: false,\r\n viewMode: 'calendar',\r\n toolbarPlacement: 'bottom',\r\n keepOpen: false,\r\n buttons: {\r\n today: false,\r\n clear: false,\r\n close: false\r\n },\r\n components: {\r\n calendar: true,\r\n date: true,\r\n month: true,\r\n year: true,\r\n decades: true,\r\n clock: true,\r\n hours: true,\r\n minutes: true,\r\n seconds: false,\r\n useTwentyfourHour: undefined\r\n },\r\n inline: false,\r\n theme: 'auto'\r\n },\r\n stepping: 1,\r\n useCurrent: true,\r\n defaultDate: undefined,\r\n localization: {\r\n today: 'Go to today',\r\n clear: 'Clear selection',\r\n close: 'Close the picker',\r\n selectMonth: 'Select Month',\r\n previousMonth: 'Previous Month',\r\n nextMonth: 'Next Month',\r\n selectYear: 'Select Year',\r\n previousYear: 'Previous Year',\r\n nextYear: 'Next Year',\r\n selectDecade: 'Select Decade',\r\n previousDecade: 'Previous Decade',\r\n nextDecade: 'Next Decade',\r\n previousCentury: 'Previous Century',\r\n nextCentury: 'Next Century',\r\n pickHour: 'Pick Hour',\r\n incrementHour: 'Increment Hour',\r\n decrementHour: 'Decrement Hour',\r\n pickMinute: 'Pick Minute',\r\n incrementMinute: 'Increment Minute',\r\n decrementMinute: 'Decrement Minute',\r\n pickSecond: 'Pick Second',\r\n incrementSecond: 'Increment Second',\r\n decrementSecond: 'Decrement Second',\r\n toggleMeridiem: 'Toggle Meridiem',\r\n selectTime: 'Select Time',\r\n selectDate: 'Select Date',\r\n dayViewHeaderFormat: { month: 'long', year: '2-digit' },\r\n locale: 'default',\r\n startOfTheWeek: 0,\r\n /**\r\n * This is only used with the customDateFormat plugin\r\n */\r\n dateFormats: {\r\n LTS: 'h:mm:ss T',\r\n LT: 'h:mm T',\r\n L: 'MM/dd/yyyy',\r\n LL: 'MMMM d, yyyy',\r\n LLL: 'MMMM d, yyyy h:mm T',\r\n LLLL: 'dddd, MMMM d, yyyy h:mm T',\r\n },\r\n /**\r\n * This is only used with the customDateFormat plugin\r\n */\r\n ordinal: (n) => n,\r\n /**\r\n * This is only used with the customDateFormat plugin\r\n */\r\n format: 'L'\r\n },\r\n keepInvalid: false,\r\n debug: false,\r\n allowInputToggle: false,\r\n viewDate: new DateTime(),\r\n multipleDates: false,\r\n multipleDatesSeparator: '; ',\r\n promptTimeOnDateChange: false,\r\n promptTimeOnDateChangeTransitionDelay: 200,\r\n meta: {},\r\n container: undefined\r\n };\n\n class OptionConverter {\r\n static deepCopy(input) {\r\n const o = {};\r\n Object.keys(input).forEach((key) => {\r\n const inputElement = input[key];\r\n o[key] = inputElement;\r\n if (typeof inputElement !== 'object' ||\r\n inputElement instanceof HTMLElement ||\r\n inputElement instanceof Element ||\r\n inputElement instanceof Date)\r\n return;\r\n if (!Array.isArray(inputElement)) {\r\n o[key] = OptionConverter.deepCopy(inputElement);\r\n }\r\n });\r\n return o;\r\n }\r\n /**\r\n * Finds value out of an object based on a string, period delimited, path\r\n * @param paths\r\n * @param obj\r\n */\r\n static objectPath(paths, obj) {\r\n if (paths.charAt(0) === '.')\r\n paths = paths.slice(1);\r\n if (!paths)\r\n return obj;\r\n return paths.split('.')\r\n .reduce((value, key) => (OptionConverter.isValue(value) || OptionConverter.isValue(value[key]) ?\r\n value[key] :\r\n undefined), obj);\r\n }\r\n /**\r\n * The spread operator caused sub keys to be missing after merging.\r\n * This is to fix that issue by using spread on the child objects first.\r\n * Also handles complex options like disabledDates\r\n * @param provided An option from new providedOptions\r\n * @param copyTo Destination object. This was added to prevent reference copies\r\n * @param path\r\n * @param localization\r\n */\r\n static spread(provided, copyTo, path = '', localization) {\r\n const defaultOptions = OptionConverter.objectPath(path, DefaultOptions);\r\n const unsupportedOptions = Object.keys(provided).filter((x) => !Object.keys(defaultOptions).includes(x));\r\n if (unsupportedOptions.length > 0) {\r\n const flattenedOptions = OptionConverter.getFlattenDefaultOptions();\r\n const errors = unsupportedOptions.map((x) => {\r\n let error = `\"${path}.${x}\" in not a known option.`;\r\n let didYouMean = flattenedOptions.find((y) => y.includes(x));\r\n if (didYouMean)\r\n error += `Did you mean \"${didYouMean}\"?`;\r\n return error;\r\n });\r\n Namespace.errorMessages.unexpectedOptions(errors);\r\n }\r\n Object.keys(provided).filter(key => key !== '__proto__' && key !== 'constructor').forEach((key) => {\r\n path += `.${key}`;\r\n if (path.charAt(0) === '.')\r\n path = path.slice(1);\r\n const defaultOptionValue = defaultOptions[key];\r\n let providedType = typeof provided[key];\r\n let defaultType = typeof defaultOptionValue;\r\n let value = provided[key];\r\n if (value === undefined || value === null) {\r\n copyTo[key] = value;\r\n path = path.substring(0, path.lastIndexOf(`.${key}`));\r\n return;\r\n }\r\n if (typeof defaultOptionValue === 'object' &&\r\n !Array.isArray(provided[key]) &&\r\n !(defaultOptionValue instanceof Date || OptionConverter.ignoreProperties.includes(key))) {\r\n OptionConverter.spread(provided[key], copyTo[key], path, localization);\r\n }\r\n else {\r\n copyTo[key] = OptionConverter.processKey(key, value, providedType, defaultType, path, localization);\r\n }\r\n path = path.substring(0, path.lastIndexOf(`.${key}`));\r\n });\r\n }\r\n static processKey(key, value, providedType, defaultType, path, localization) {\r\n switch (key) {\r\n case 'defaultDate': {\r\n const dateTime = this.dateConversion(value, 'defaultDate', localization);\r\n if (dateTime !== undefined) {\r\n dateTime.setLocale(localization.locale);\r\n return dateTime;\r\n }\r\n Namespace.errorMessages.typeMismatch('defaultDate', providedType, 'DateTime or Date');\r\n break;\r\n }\r\n case 'viewDate': {\r\n const dateTime = this.dateConversion(value, 'viewDate', localization);\r\n if (dateTime !== undefined) {\r\n dateTime.setLocale(localization.locale);\r\n return dateTime;\r\n }\r\n Namespace.errorMessages.typeMismatch('viewDate', providedType, 'DateTime or Date');\r\n break;\r\n }\r\n case 'minDate': {\r\n if (value === undefined) {\r\n return value;\r\n }\r\n const dateTime = this.dateConversion(value, 'restrictions.minDate', localization);\r\n if (dateTime !== undefined) {\r\n dateTime.setLocale(localization.locale);\r\n return dateTime;\r\n }\r\n Namespace.errorMessages.typeMismatch('restrictions.minDate', providedType, 'DateTime or Date');\r\n break;\r\n }\r\n case 'maxDate': {\r\n if (value === undefined) {\r\n return value;\r\n }\r\n const dateTime = this.dateConversion(value, 'restrictions.maxDate', localization);\r\n if (dateTime !== undefined) {\r\n dateTime.setLocale(localization.locale);\r\n return dateTime;\r\n }\r\n Namespace.errorMessages.typeMismatch('restrictions.maxDate', providedType, 'DateTime or Date');\r\n break;\r\n }\r\n case 'disabledHours':\r\n if (value === undefined) {\r\n return [];\r\n }\r\n this._typeCheckNumberArray('restrictions.disabledHours', value, providedType);\r\n if (value.filter((x) => x < 0 || x > 24).length > 0)\r\n Namespace.errorMessages.numbersOutOfRage('restrictions.disabledHours', 0, 23);\r\n return value;\r\n case 'enabledHours':\r\n if (value === undefined) {\r\n return [];\r\n }\r\n this._typeCheckNumberArray('restrictions.enabledHours', value, providedType);\r\n if (value.filter((x) => x < 0 || x > 24).length > 0)\r\n Namespace.errorMessages.numbersOutOfRage('restrictions.enabledHours', 0, 23);\r\n return value;\r\n case 'daysOfWeekDisabled':\r\n if (value === undefined) {\r\n return [];\r\n }\r\n this._typeCheckNumberArray('restrictions.daysOfWeekDisabled', value, providedType);\r\n if (value.filter((x) => x < 0 || x > 6).length > 0)\r\n Namespace.errorMessages.numbersOutOfRage('restrictions.daysOfWeekDisabled', 0, 6);\r\n return value;\r\n case 'enabledDates':\r\n if (value === undefined) {\r\n return [];\r\n }\r\n this._typeCheckDateArray('restrictions.enabledDates', value, providedType, localization);\r\n return value;\r\n case 'disabledDates':\r\n if (value === undefined) {\r\n return [];\r\n }\r\n this._typeCheckDateArray('restrictions.disabledDates', value, providedType, localization);\r\n return value;\r\n case 'disabledTimeIntervals':\r\n if (value === undefined) {\r\n return [];\r\n }\r\n if (!Array.isArray(value)) {\r\n Namespace.errorMessages.typeMismatch(key, providedType, 'array of { from: DateTime|Date, to: DateTime|Date }');\r\n }\r\n const valueObject = value;\r\n for (let i = 0; i < valueObject.length; i++) {\r\n Object.keys(valueObject[i]).forEach((vk) => {\r\n const subOptionName = `${key}[${i}].${vk}`;\r\n let d = valueObject[i][vk];\r\n const dateTime = this.dateConversion(d, subOptionName, localization);\r\n if (!dateTime) {\r\n Namespace.errorMessages.typeMismatch(subOptionName, typeof d, 'DateTime or Date');\r\n }\r\n dateTime.setLocale(localization.locale);\r\n valueObject[i][vk] = dateTime;\r\n });\r\n }\r\n return valueObject;\r\n case 'toolbarPlacement':\r\n case 'type':\r\n case 'viewMode':\r\n case 'theme':\r\n const optionValues = {\r\n toolbarPlacement: ['top', 'bottom', 'default'],\r\n type: ['icons', 'sprites'],\r\n viewMode: ['clock', 'calendar', 'months', 'years', 'decades'],\r\n theme: ['light', 'dark', 'auto']\r\n };\r\n const keyOptions = optionValues[key];\r\n if (!keyOptions.includes(value))\r\n Namespace.errorMessages.unexpectedOptionValue(path.substring(1), value, keyOptions);\r\n return value;\r\n case 'meta':\r\n case 'dayViewHeaderFormat':\r\n return value;\r\n case 'container':\r\n if (value &&\r\n !(value instanceof HTMLElement ||\r\n value instanceof Element ||\r\n (value === null || value === void 0 ? void 0 : value.appendChild))) {\r\n Namespace.errorMessages.typeMismatch(path.substring(1), typeof value, 'HTMLElement');\r\n }\r\n return value;\r\n case 'useTwentyfourHour':\r\n if (value === undefined || providedType === 'boolean')\r\n return value;\r\n Namespace.errorMessages.typeMismatch(path, providedType, defaultType);\r\n break;\r\n default:\r\n switch (defaultType) {\r\n case 'boolean':\r\n return value === 'true' || value === true;\r\n case 'number':\r\n return +value;\r\n case 'string':\r\n return value.toString();\r\n case 'object':\r\n return {};\r\n case 'function':\r\n return value;\r\n default:\r\n Namespace.errorMessages.typeMismatch(path, providedType, defaultType);\r\n }\r\n }\r\n }\r\n static _mergeOptions(providedOptions, mergeTo) {\r\n var _a;\r\n const newConfig = OptionConverter.deepCopy(mergeTo);\r\n //see if the options specify a locale\r\n const localization = ((_a = mergeTo.localization) === null || _a === void 0 ? void 0 : _a.locale) !== 'default'\r\n ? mergeTo.localization\r\n : (providedOptions === null || providedOptions === void 0 ? void 0 : providedOptions.localization) || DefaultOptions.localization;\r\n OptionConverter.spread(providedOptions, newConfig, '', localization);\r\n return newConfig;\r\n }\r\n static _dataToOptions(element, options) {\r\n const eData = JSON.parse(JSON.stringify(element.dataset));\r\n if (eData === null || eData === void 0 ? void 0 : eData.tdTargetInput)\r\n delete eData.tdTargetInput;\r\n if (eData === null || eData === void 0 ? void 0 : eData.tdTargetToggle)\r\n delete eData.tdTargetToggle;\r\n if (!eData ||\r\n Object.keys(eData).length === 0 ||\r\n eData.constructor !== DOMStringMap)\r\n return options;\r\n let dataOptions = {};\r\n // because dataset returns camelCase including the 'td' key the option\r\n // key won't align\r\n const objectToNormalized = (object) => {\r\n const lowered = {};\r\n Object.keys(object).forEach((x) => {\r\n lowered[x.toLowerCase()] = x;\r\n });\r\n return lowered;\r\n };\r\n const rabbitHole = (split, index, optionSubgroup, value) => {\r\n // first round = display { ... }\r\n const normalizedOptions = objectToNormalized(optionSubgroup);\r\n const keyOption = normalizedOptions[split[index].toLowerCase()];\r\n const internalObject = {};\r\n if (keyOption === undefined)\r\n return internalObject;\r\n // if this is another object, continue down the rabbit hole\r\n if (optionSubgroup[keyOption].constructor === Object) {\r\n index++;\r\n internalObject[keyOption] = rabbitHole(split, index, optionSubgroup[keyOption], value);\r\n }\r\n else {\r\n internalObject[keyOption] = value;\r\n }\r\n return internalObject;\r\n };\r\n const optionsLower = objectToNormalized(options);\r\n Object.keys(eData)\r\n .filter((x) => x.startsWith(Namespace.dataKey))\r\n .map((x) => x.substring(2))\r\n .forEach((key) => {\r\n let keyOption = optionsLower[key.toLowerCase()];\r\n // dataset merges dashes to camelCase... yay\r\n // i.e. key = display_components_seconds\r\n if (key.includes('_')) {\r\n // [display, components, seconds]\r\n const split = key.split('_');\r\n // display\r\n keyOption = optionsLower[split[0].toLowerCase()];\r\n if (keyOption !== undefined &&\r\n options[keyOption].constructor === Object) {\r\n dataOptions[keyOption] = rabbitHole(split, 1, options[keyOption], eData[`td${key}`]);\r\n }\r\n }\r\n // or key = multipleDate\r\n else if (keyOption !== undefined) {\r\n dataOptions[keyOption] = eData[`td${key}`];\r\n }\r\n });\r\n return this._mergeOptions(dataOptions, options);\r\n }\r\n /**\r\n * Attempts to prove `d` is a DateTime or Date or can be converted into one.\r\n * @param d If a string will attempt creating a date from it.\r\n * @param localization object containing locale and format settings. Only used with the custom formats\r\n * @private\r\n */\r\n static _dateTypeCheck(d, localization) {\r\n if (d.constructor.name === DateTime.name)\r\n return d;\r\n if (d.constructor.name === Date.name) {\r\n return DateTime.convert(d);\r\n }\r\n if (typeof d === typeof '') {\r\n const dateTime = DateTime.fromString(d, localization);\r\n if (JSON.stringify(dateTime) === 'null') {\r\n return null;\r\n }\r\n return dateTime;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Type checks that `value` is an array of Date or DateTime\r\n * @param optionName Provides text to error messages e.g. disabledDates\r\n * @param value Option value\r\n * @param providedType Used to provide text to error messages\r\n * @param localization\r\n */\r\n static _typeCheckDateArray(optionName, value, providedType, localization) {\r\n var _a;\r\n if (!Array.isArray(value)) {\r\n Namespace.errorMessages.typeMismatch(optionName, providedType, 'array of DateTime or Date');\r\n }\r\n for (let i = 0; i < value.length; i++) {\r\n let d = value[i];\r\n const dateTime = this.dateConversion(d, optionName, localization);\r\n if (!dateTime) {\r\n Namespace.errorMessages.typeMismatch(optionName, typeof d, 'DateTime or Date');\r\n }\r\n dateTime.setLocale((_a = localization === null || localization === void 0 ? void 0 : localization.locale) !== null && _a !== void 0 ? _a : 'default');\r\n value[i] = dateTime;\r\n }\r\n }\r\n /**\r\n * Type checks that `value` is an array of numbers\r\n * @param optionName Provides text to error messages e.g. disabledDates\r\n * @param value Option value\r\n * @param providedType Used to provide text to error messages\r\n */\r\n static _typeCheckNumberArray(optionName, value, providedType) {\r\n if (!Array.isArray(value) || value.find((x) => typeof x !== typeof 0)) {\r\n Namespace.errorMessages.typeMismatch(optionName, providedType, 'array of numbers');\r\n }\r\n }\r\n /**\r\n * Attempts to convert `d` to a DateTime object\r\n * @param d value to convert\r\n * @param optionName Provides text to error messages e.g. disabledDates\r\n * @param localization object containing locale and format settings. Only used with the custom formats\r\n */\r\n static dateConversion(d, optionName, localization) {\r\n if (typeof d === typeof '' && optionName !== 'input') {\r\n Namespace.errorMessages.dateString();\r\n }\r\n const converted = this._dateTypeCheck(d, localization);\r\n if (!converted) {\r\n Namespace.errorMessages.failedToParseDate(optionName, d, optionName === 'input');\r\n }\r\n return converted;\r\n }\r\n static getFlattenDefaultOptions() {\r\n if (this._flattenDefaults)\r\n return this._flattenDefaults;\r\n const deepKeys = (t, pre = []) => {\r\n if (Array.isArray(t))\r\n return [];\r\n if (Object(t) === t) {\r\n return Object.entries(t).flatMap(([k, v]) => deepKeys(v, [...pre, k]));\r\n }\r\n else {\r\n return pre.join('.');\r\n }\r\n };\r\n this._flattenDefaults = deepKeys(DefaultOptions);\r\n return this._flattenDefaults;\r\n }\r\n /**\r\n * Some options conflict like min/max date. Verify that these kinds of options\r\n * are set correctly.\r\n * @param config\r\n */\r\n static _validateConflicts(config) {\r\n if (config.display.sideBySide &&\r\n (!config.display.components.clock ||\r\n !(config.display.components.hours ||\r\n config.display.components.minutes ||\r\n config.display.components.seconds))) {\r\n Namespace.errorMessages.conflictingConfiguration('Cannot use side by side mode without the clock components');\r\n }\r\n if (config.restrictions.minDate && config.restrictions.maxDate) {\r\n if (config.restrictions.minDate.isAfter(config.restrictions.maxDate)) {\r\n Namespace.errorMessages.conflictingConfiguration('minDate is after maxDate');\r\n }\r\n if (config.restrictions.maxDate.isBefore(config.restrictions.minDate)) {\r\n Namespace.errorMessages.conflictingConfiguration('maxDate is before minDate');\r\n }\r\n }\r\n }\r\n }\r\n OptionConverter.ignoreProperties = ['meta', 'dayViewHeaderFormat',\r\n 'container', 'dateForms', 'ordinal'];\r\n OptionConverter.isValue = a => a != null; // everything except undefined + null\n\n class Dates {\r\n constructor() {\r\n this._dates = [];\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n this.validation = serviceLocator.locate(Validation);\r\n this._eventEmitters = serviceLocator.locate(EventEmitters);\r\n }\r\n /**\r\n * Returns the array of selected dates\r\n */\r\n get picked() {\r\n return this._dates;\r\n }\r\n /**\r\n * Returns the last picked value.\r\n */\r\n get lastPicked() {\r\n return this._dates[this.lastPickedIndex];\r\n }\r\n /**\r\n * Returns the length of picked dates -1 or 0 if none are selected.\r\n */\r\n get lastPickedIndex() {\r\n if (this._dates.length === 0)\r\n return 0;\r\n return this._dates.length - 1;\r\n }\r\n /**\r\n * Formats a DateTime object to a string. Used when setting the input value.\r\n * @param date\r\n */\r\n formatInput(date) {\r\n const components = this.optionsStore.options.display.components;\r\n if (!date)\r\n return '';\r\n return date.format({\r\n year: components.calendar && components.year ? 'numeric' : undefined,\r\n month: components.calendar && components.month ? '2-digit' : undefined,\r\n day: components.calendar && components.date ? '2-digit' : undefined,\r\n hour: components.clock && components.hours\r\n ? components.useTwentyfourHour\r\n ? '2-digit'\r\n : 'numeric'\r\n : undefined,\r\n minute: components.clock && components.minutes ? '2-digit' : undefined,\r\n second: components.clock && components.seconds ? '2-digit' : undefined,\r\n hour12: !components.useTwentyfourHour,\r\n });\r\n }\r\n /**\r\n * parse the value into a DateTime object.\r\n * this can be overwritten to supply your own parsing.\r\n */\r\n parseInput(value) {\r\n return OptionConverter.dateConversion(value, 'input', this.optionsStore.options.localization);\r\n }\r\n /**\r\n * Tries to convert the provided value to a DateTime object.\r\n * If value is null|undefined then clear the value of the provided index (or 0).\r\n * @param value Value to convert or null|undefined\r\n * @param index When using multidates this is the index in the array\r\n */\r\n setFromInput(value, index) {\r\n if (!value) {\r\n this.setValue(undefined, index);\r\n return;\r\n }\r\n const converted = this.parseInput(value);\r\n if (converted) {\r\n converted.setLocale(this.optionsStore.options.localization.locale);\r\n this.setValue(converted, index);\r\n }\r\n }\r\n /**\r\n * Adds a new DateTime to selected dates array\r\n * @param date\r\n */\r\n add(date) {\r\n this._dates.push(date);\r\n }\r\n /**\r\n * Returns true if the `targetDate` is part of the selected dates array.\r\n * If `unit` is provided then a granularity to that unit will be used.\r\n * @param targetDate\r\n * @param unit\r\n */\r\n isPicked(targetDate, unit) {\r\n if (!unit)\r\n return this._dates.find((x) => x === targetDate) !== undefined;\r\n const format = getFormatByUnit(unit);\r\n let innerDateFormatted = targetDate.format(format);\r\n return (this._dates\r\n .map((x) => x.format(format))\r\n .find((x) => x === innerDateFormatted) !== undefined);\r\n }\r\n /**\r\n * Returns the index at which `targetDate` is in the array.\r\n * This is used for updating or removing a date when multi-date is used\r\n * If `unit` is provided then a granularity to that unit will be used.\r\n * @param targetDate\r\n * @param unit\r\n */\r\n pickedIndex(targetDate, unit) {\r\n if (!unit)\r\n return this._dates.indexOf(targetDate);\r\n const format = getFormatByUnit(unit);\r\n let innerDateFormatted = targetDate.format(format);\r\n return this._dates.map((x) => x.format(format)).indexOf(innerDateFormatted);\r\n }\r\n /**\r\n * Clears all selected dates.\r\n */\r\n clear() {\r\n this.optionsStore.unset = true;\r\n this._eventEmitters.triggerEvent.emit({\r\n type: Namespace.events.change,\r\n date: undefined,\r\n oldDate: this.lastPicked,\r\n isClear: true,\r\n isValid: true,\r\n });\r\n this._dates = [];\r\n }\r\n /**\r\n * Find the \"book end\" years given a `year` and a `factor`\r\n * @param factor e.g. 100 for decades\r\n * @param year e.g. 2021\r\n */\r\n static getStartEndYear(factor, year) {\r\n const step = factor / 10, startYear = Math.floor(year / factor) * factor, endYear = startYear + step * 9, focusValue = Math.floor(year / step) * step;\r\n return [startYear, endYear, focusValue];\r\n }\r\n /**\r\n * Attempts to either clear or set the `target` date at `index`.\r\n * If the `target` is null then the date will be cleared.\r\n * If multi-date is being used then it will be removed from the array.\r\n * If `target` is valid and multi-date is used then if `index` is\r\n * provided the date at that index will be replaced, otherwise it is appended.\r\n * @param target\r\n * @param index\r\n */\r\n setValue(target, index) {\r\n const noIndex = typeof index === 'undefined', isClear = !target && noIndex;\r\n let oldDate = this.optionsStore.unset ? null : this._dates[index];\r\n if (!oldDate && !this.optionsStore.unset && noIndex && isClear) {\r\n oldDate = this.lastPicked;\r\n }\r\n const updateInput = () => {\r\n if (!this.optionsStore.input)\r\n return;\r\n let newValue = this.formatInput(target);\r\n if (this.optionsStore.options.multipleDates) {\r\n newValue = this._dates\r\n .map((d) => this.formatInput(d))\r\n .join(this.optionsStore.options.multipleDatesSeparator);\r\n }\r\n if (this.optionsStore.input.value != newValue)\r\n this.optionsStore.input.value = newValue;\r\n };\r\n if (target && (oldDate === null || oldDate === void 0 ? void 0 : oldDate.isSame(target))) {\r\n updateInput();\r\n return;\r\n }\r\n // case of calling setValue(null)\r\n if (!target) {\r\n if (!this.optionsStore.options.multipleDates ||\r\n this._dates.length === 1 ||\r\n isClear) {\r\n this.optionsStore.unset = true;\r\n this._dates = [];\r\n }\r\n else {\r\n this._dates.splice(index, 1);\r\n }\r\n updateInput();\r\n this._eventEmitters.triggerEvent.emit({\r\n type: Namespace.events.change,\r\n date: undefined,\r\n oldDate,\r\n isClear,\r\n isValid: true,\r\n });\r\n this._eventEmitters.updateDisplay.emit('all');\r\n return;\r\n }\r\n index = index || 0;\r\n target = target.clone;\r\n // minute stepping is being used, force the minute to the closest value\r\n if (this.optionsStore.options.stepping !== 1) {\r\n target.minutes =\r\n Math.round(target.minutes / this.optionsStore.options.stepping) *\r\n this.optionsStore.options.stepping;\r\n target.seconds = 0;\r\n }\r\n if (this.validation.isValid(target)) {\r\n this._dates[index] = target;\r\n this.optionsStore.viewDate = target.clone;\r\n updateInput();\r\n this.optionsStore.unset = false;\r\n this._eventEmitters.updateDisplay.emit('all');\r\n this._eventEmitters.triggerEvent.emit({\r\n type: Namespace.events.change,\r\n date: target,\r\n oldDate,\r\n isClear,\r\n isValid: true,\r\n });\r\n return;\r\n }\r\n if (this.optionsStore.options.keepInvalid) {\r\n this._dates[index] = target;\r\n this.optionsStore.viewDate = target.clone;\r\n updateInput();\r\n this._eventEmitters.triggerEvent.emit({\r\n type: Namespace.events.change,\r\n date: target,\r\n oldDate,\r\n isClear,\r\n isValid: false,\r\n });\r\n }\r\n this._eventEmitters.triggerEvent.emit({\r\n type: Namespace.events.error,\r\n reason: Namespace.errorMessages.failedToSetInvalidDate,\r\n date: target,\r\n oldDate,\r\n });\r\n }\r\n }\n\n var ActionTypes;\r\n (function (ActionTypes) {\r\n ActionTypes[\"next\"] = \"next\";\r\n ActionTypes[\"previous\"] = \"previous\";\r\n ActionTypes[\"changeCalendarView\"] = \"changeCalendarView\";\r\n ActionTypes[\"selectMonth\"] = \"selectMonth\";\r\n ActionTypes[\"selectYear\"] = \"selectYear\";\r\n ActionTypes[\"selectDecade\"] = \"selectDecade\";\r\n ActionTypes[\"selectDay\"] = \"selectDay\";\r\n ActionTypes[\"selectHour\"] = \"selectHour\";\r\n ActionTypes[\"selectMinute\"] = \"selectMinute\";\r\n ActionTypes[\"selectSecond\"] = \"selectSecond\";\r\n ActionTypes[\"incrementHours\"] = \"incrementHours\";\r\n ActionTypes[\"incrementMinutes\"] = \"incrementMinutes\";\r\n ActionTypes[\"incrementSeconds\"] = \"incrementSeconds\";\r\n ActionTypes[\"decrementHours\"] = \"decrementHours\";\r\n ActionTypes[\"decrementMinutes\"] = \"decrementMinutes\";\r\n ActionTypes[\"decrementSeconds\"] = \"decrementSeconds\";\r\n ActionTypes[\"toggleMeridiem\"] = \"toggleMeridiem\";\r\n ActionTypes[\"togglePicker\"] = \"togglePicker\";\r\n ActionTypes[\"showClock\"] = \"showClock\";\r\n ActionTypes[\"showHours\"] = \"showHours\";\r\n ActionTypes[\"showMinutes\"] = \"showMinutes\";\r\n ActionTypes[\"showSeconds\"] = \"showSeconds\";\r\n ActionTypes[\"clear\"] = \"clear\";\r\n ActionTypes[\"close\"] = \"close\";\r\n ActionTypes[\"today\"] = \"today\";\r\n })(ActionTypes || (ActionTypes = {}));\r\n var ActionTypes$1 = ActionTypes;\n\n /**\r\n * Creates and updates the grid for `date`\r\n */\r\n class DateDisplay {\r\n constructor() {\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n this.dates = serviceLocator.locate(Dates);\r\n this.validation = serviceLocator.locate(Validation);\r\n }\r\n /**\r\n * Build the container html for the display\r\n * @private\r\n */\r\n getPicker() {\r\n const container = document.createElement(\"div\");\r\n container.classList.add(Namespace.css.daysContainer);\r\n container.append(...this._daysOfTheWeek());\r\n if (this.optionsStore.options.display.calendarWeeks) {\r\n const div = document.createElement(\"div\");\r\n div.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight);\r\n container.appendChild(div);\r\n }\r\n for (let i = 0; i < 42; i++) {\r\n if (i !== 0 && i % 7 === 0) {\r\n if (this.optionsStore.options.display.calendarWeeks) {\r\n const div = document.createElement(\"div\");\r\n div.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight);\r\n container.appendChild(div);\r\n }\r\n }\r\n const div = document.createElement(\"div\");\r\n div.setAttribute(\"data-action\", ActionTypes$1.selectDay);\r\n container.appendChild(div);\r\n }\r\n return container;\r\n }\r\n /**\r\n * Populates the grid and updates enabled states\r\n * @private\r\n */\r\n _update(widget, paint) {\r\n const container = widget.getElementsByClassName(Namespace.css.daysContainer)[0];\r\n if (this.optionsStore.currentView === \"calendar\") {\r\n const [previous, switcher, next] = container.parentElement\r\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\r\n .getElementsByTagName(\"div\");\r\n switcher.setAttribute(Namespace.css.daysContainer, this.optionsStore.viewDate.format(this.optionsStore.options.localization.dayViewHeaderFormat));\r\n this.optionsStore.options.display.components.month\r\n ? switcher.classList.remove(Namespace.css.disabled)\r\n : switcher.classList.add(Namespace.css.disabled);\r\n this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, Unit.month), Unit.month)\r\n ? previous.classList.remove(Namespace.css.disabled)\r\n : previous.classList.add(Namespace.css.disabled);\r\n this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, Unit.month), Unit.month)\r\n ? next.classList.remove(Namespace.css.disabled)\r\n : next.classList.add(Namespace.css.disabled);\r\n }\r\n let innerDate = this.optionsStore.viewDate.clone\r\n .startOf(Unit.month)\r\n .startOf(\"weekDay\", this.optionsStore.options.localization.startOfTheWeek)\r\n .manipulate(12, Unit.hours);\r\n container\r\n .querySelectorAll(`[data-action=\"${ActionTypes$1.selectDay}\"], .${Namespace.css.calendarWeeks}`)\r\n .forEach((containerClone) => {\r\n if (this.optionsStore.options.display.calendarWeeks &&\r\n containerClone.classList.contains(Namespace.css.calendarWeeks)) {\r\n if (containerClone.innerText === \"#\")\r\n return;\r\n containerClone.innerText = `${innerDate.week}`;\r\n return;\r\n }\r\n let classes = [];\r\n classes.push(Namespace.css.day);\r\n if (innerDate.isBefore(this.optionsStore.viewDate, Unit.month)) {\r\n classes.push(Namespace.css.old);\r\n }\r\n if (innerDate.isAfter(this.optionsStore.viewDate, Unit.month)) {\r\n classes.push(Namespace.css.new);\r\n }\r\n if (!this.optionsStore.unset &&\r\n this.dates.isPicked(innerDate, Unit.date)) {\r\n classes.push(Namespace.css.active);\r\n }\r\n if (!this.validation.isValid(innerDate, Unit.date)) {\r\n classes.push(Namespace.css.disabled);\r\n }\r\n if (innerDate.isSame(new DateTime(), Unit.date)) {\r\n classes.push(Namespace.css.today);\r\n }\r\n if (innerDate.weekDay === 0 || innerDate.weekDay === 6) {\r\n classes.push(Namespace.css.weekend);\r\n }\r\n paint(Unit.date, innerDate, classes, containerClone);\r\n containerClone.classList.remove(...containerClone.classList);\r\n containerClone.classList.add(...classes);\r\n containerClone.setAttribute(\"data-value\", `${innerDate.year}-${innerDate.monthFormatted}-${innerDate.dateFormatted}`);\r\n containerClone.setAttribute(\"data-day\", `${innerDate.date}`);\r\n containerClone.innerText = innerDate.format({ day: \"numeric\" });\r\n innerDate.manipulate(1, Unit.date);\r\n });\r\n }\r\n /***\r\n * Generates an html row that contains the days of the week.\r\n * @private\r\n */\r\n _daysOfTheWeek() {\r\n let innerDate = this.optionsStore.viewDate.clone\r\n .startOf(\"weekDay\", this.optionsStore.options.localization.startOfTheWeek)\r\n .startOf(Unit.date);\r\n const row = [];\r\n document.createElement(\"div\");\r\n if (this.optionsStore.options.display.calendarWeeks) {\r\n const htmlDivElement = document.createElement(\"div\");\r\n htmlDivElement.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight);\r\n htmlDivElement.innerText = \"#\";\r\n row.push(htmlDivElement);\r\n }\r\n for (let i = 0; i < 7; i++) {\r\n const htmlDivElement = document.createElement(\"div\");\r\n htmlDivElement.classList.add(Namespace.css.dayOfTheWeek, Namespace.css.noHighlight);\r\n htmlDivElement.innerText = innerDate.format({ weekday: \"short\" });\r\n innerDate.manipulate(1, Unit.date);\r\n row.push(htmlDivElement);\r\n }\r\n return row;\r\n }\r\n }\n\n /**\r\n * Creates and updates the grid for `month`\r\n */\r\n class MonthDisplay {\r\n constructor() {\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n this.dates = serviceLocator.locate(Dates);\r\n this.validation = serviceLocator.locate(Validation);\r\n }\r\n /**\r\n * Build the container html for the display\r\n * @private\r\n */\r\n getPicker() {\r\n const container = document.createElement('div');\r\n container.classList.add(Namespace.css.monthsContainer);\r\n for (let i = 0; i < 12; i++) {\r\n const div = document.createElement('div');\r\n div.setAttribute('data-action', ActionTypes$1.selectMonth);\r\n container.appendChild(div);\r\n }\r\n return container;\r\n }\r\n /**\r\n * Populates the grid and updates enabled states\r\n * @private\r\n */\r\n _update(widget, paint) {\r\n const container = widget.getElementsByClassName(Namespace.css.monthsContainer)[0];\r\n if (this.optionsStore.currentView === 'months') {\r\n const [previous, switcher, next] = container.parentElement\r\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\r\n .getElementsByTagName('div');\r\n switcher.setAttribute(Namespace.css.monthsContainer, this.optionsStore.viewDate.format({ year: 'numeric' }));\r\n this.optionsStore.options.display.components.year\r\n ? switcher.classList.remove(Namespace.css.disabled)\r\n : switcher.classList.add(Namespace.css.disabled);\r\n this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, Unit.year), Unit.year)\r\n ? previous.classList.remove(Namespace.css.disabled)\r\n : previous.classList.add(Namespace.css.disabled);\r\n this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, Unit.year), Unit.year)\r\n ? next.classList.remove(Namespace.css.disabled)\r\n : next.classList.add(Namespace.css.disabled);\r\n }\r\n let innerDate = this.optionsStore.viewDate.clone.startOf(Unit.year);\r\n container\r\n .querySelectorAll(`[data-action=\"${ActionTypes$1.selectMonth}\"]`)\r\n .forEach((containerClone, index) => {\r\n let classes = [];\r\n classes.push(Namespace.css.month);\r\n if (!this.optionsStore.unset &&\r\n this.dates.isPicked(innerDate, Unit.month)) {\r\n classes.push(Namespace.css.active);\r\n }\r\n if (!this.validation.isValid(innerDate, Unit.month)) {\r\n classes.push(Namespace.css.disabled);\r\n }\r\n paint(Unit.month, innerDate, classes, containerClone);\r\n containerClone.classList.remove(...containerClone.classList);\r\n containerClone.classList.add(...classes);\r\n containerClone.setAttribute('data-value', `${index}`);\r\n containerClone.innerText = `${innerDate.format({ month: 'short' })}`;\r\n innerDate.manipulate(1, Unit.month);\r\n });\r\n }\r\n }\n\n /**\r\n * Creates and updates the grid for `year`\r\n */\r\n class YearDisplay {\r\n constructor() {\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n this.dates = serviceLocator.locate(Dates);\r\n this.validation = serviceLocator.locate(Validation);\r\n }\r\n /**\r\n * Build the container html for the display\r\n * @private\r\n */\r\n getPicker() {\r\n const container = document.createElement(\"div\");\r\n container.classList.add(Namespace.css.yearsContainer);\r\n for (let i = 0; i < 12; i++) {\r\n const div = document.createElement(\"div\");\r\n div.setAttribute(\"data-action\", ActionTypes$1.selectYear);\r\n container.appendChild(div);\r\n }\r\n return container;\r\n }\r\n /**\r\n * Populates the grid and updates enabled states\r\n * @private\r\n */\r\n _update(widget, paint) {\r\n this._startYear = this.optionsStore.viewDate.clone.manipulate(-1, Unit.year);\r\n this._endYear = this.optionsStore.viewDate.clone.manipulate(10, Unit.year);\r\n const container = widget.getElementsByClassName(Namespace.css.yearsContainer)[0];\r\n if (this.optionsStore.currentView === \"years\") {\r\n const [previous, switcher, next] = container.parentElement\r\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\r\n .getElementsByTagName(\"div\");\r\n switcher.setAttribute(Namespace.css.yearsContainer, `${this._startYear.format({ year: \"numeric\" })}-${this._endYear.format({ year: \"numeric\" })}`);\r\n this.optionsStore.options.display.components.decades\r\n ? switcher.classList.remove(Namespace.css.disabled)\r\n : switcher.classList.add(Namespace.css.disabled);\r\n this.validation.isValid(this._startYear, Unit.year)\r\n ? previous.classList.remove(Namespace.css.disabled)\r\n : previous.classList.add(Namespace.css.disabled);\r\n this.validation.isValid(this._endYear, Unit.year)\r\n ? next.classList.remove(Namespace.css.disabled)\r\n : next.classList.add(Namespace.css.disabled);\r\n }\r\n let innerDate = this.optionsStore.viewDate.clone\r\n .startOf(Unit.year)\r\n .manipulate(-1, Unit.year);\r\n container\r\n .querySelectorAll(`[data-action=\"${ActionTypes$1.selectYear}\"]`)\r\n .forEach((containerClone) => {\r\n let classes = [];\r\n classes.push(Namespace.css.year);\r\n if (!this.optionsStore.unset &&\r\n this.dates.isPicked(innerDate, Unit.year)) {\r\n classes.push(Namespace.css.active);\r\n }\r\n if (!this.validation.isValid(innerDate, Unit.year)) {\r\n classes.push(Namespace.css.disabled);\r\n }\r\n paint(Unit.year, innerDate, classes, containerClone);\r\n containerClone.classList.remove(...containerClone.classList);\r\n containerClone.classList.add(...classes);\r\n containerClone.setAttribute(\"data-value\", `${innerDate.year}`);\r\n containerClone.innerText = innerDate.format({ year: \"numeric\" });\r\n innerDate.manipulate(1, Unit.year);\r\n });\r\n }\r\n }\n\n /**\r\n * Creates and updates the grid for `seconds`\r\n */\r\n class DecadeDisplay {\r\n constructor() {\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n this.dates = serviceLocator.locate(Dates);\r\n this.validation = serviceLocator.locate(Validation);\r\n }\r\n /**\r\n * Build the container html for the display\r\n * @private\r\n */\r\n getPicker() {\r\n const container = document.createElement(\"div\");\r\n container.classList.add(Namespace.css.decadesContainer);\r\n for (let i = 0; i < 12; i++) {\r\n const div = document.createElement(\"div\");\r\n div.setAttribute(\"data-action\", ActionTypes$1.selectDecade);\r\n container.appendChild(div);\r\n }\r\n return container;\r\n }\r\n /**\r\n * Populates the grid and updates enabled states\r\n * @private\r\n */\r\n _update(widget, paint) {\r\n const [start, end] = Dates.getStartEndYear(100, this.optionsStore.viewDate.year);\r\n this._startDecade = this.optionsStore.viewDate.clone.startOf(Unit.year);\r\n this._startDecade.year = start;\r\n this._endDecade = this.optionsStore.viewDate.clone.startOf(Unit.year);\r\n this._endDecade.year = end;\r\n const container = widget.getElementsByClassName(Namespace.css.decadesContainer)[0];\r\n const [previous, switcher, next] = container.parentElement\r\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\r\n .getElementsByTagName(\"div\");\r\n if (this.optionsStore.currentView === 'decades') {\r\n switcher.setAttribute(Namespace.css.decadesContainer, `${this._startDecade.format({ year: \"numeric\" })}-${this._endDecade.format({ year: \"numeric\" })}`);\r\n this.validation.isValid(this._startDecade, Unit.year)\r\n ? previous.classList.remove(Namespace.css.disabled)\r\n : previous.classList.add(Namespace.css.disabled);\r\n this.validation.isValid(this._endDecade, Unit.year)\r\n ? next.classList.remove(Namespace.css.disabled)\r\n : next.classList.add(Namespace.css.disabled);\r\n }\r\n const pickedYears = this.dates.picked.map((x) => x.year);\r\n container\r\n .querySelectorAll(`[data-action=\"${ActionTypes$1.selectDecade}\"]`)\r\n .forEach((containerClone, index) => {\r\n if (index === 0) {\r\n containerClone.classList.add(Namespace.css.old);\r\n if (this._startDecade.year - 10 < 0) {\r\n containerClone.textContent = \" \";\r\n previous.classList.add(Namespace.css.disabled);\r\n containerClone.classList.add(Namespace.css.disabled);\r\n containerClone.setAttribute(\"data-value\", ``);\r\n return;\r\n }\r\n else {\r\n containerClone.innerText = this._startDecade.clone.manipulate(-10, Unit.year).format({ year: \"numeric\" });\r\n containerClone.setAttribute(\"data-value\", `${this._startDecade.year}`);\r\n return;\r\n }\r\n }\r\n let classes = [];\r\n classes.push(Namespace.css.decade);\r\n const startDecadeYear = this._startDecade.year;\r\n const endDecadeYear = this._startDecade.year + 9;\r\n if (!this.optionsStore.unset &&\r\n pickedYears.filter((x) => x >= startDecadeYear && x <= endDecadeYear)\r\n .length > 0) {\r\n classes.push(Namespace.css.active);\r\n }\r\n paint(\"decade\", this._startDecade, classes, containerClone);\r\n containerClone.classList.remove(...containerClone.classList);\r\n containerClone.classList.add(...classes);\r\n containerClone.setAttribute(\"data-value\", `${this._startDecade.year}`);\r\n containerClone.innerText = `${this._startDecade.format({ year: \"numeric\" })}`;\r\n this._startDecade.manipulate(10, Unit.year);\r\n });\r\n }\r\n }\n\n /**\r\n * Creates the clock display\r\n */\r\n class TimeDisplay {\r\n constructor() {\r\n this._gridColumns = '';\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n this.dates = serviceLocator.locate(Dates);\r\n this.validation = serviceLocator.locate(Validation);\r\n }\r\n /**\r\n * Build the container html for the clock display\r\n * @private\r\n */\r\n getPicker(iconTag) {\r\n const container = document.createElement('div');\r\n container.classList.add(Namespace.css.clockContainer);\r\n container.append(...this._grid(iconTag));\r\n return container;\r\n }\r\n /**\r\n * Populates the various elements with in the clock display\r\n * like the current hour and if the manipulation icons are enabled.\r\n * @private\r\n */\r\n _update(widget) {\r\n const timesDiv = (widget.getElementsByClassName(Namespace.css.clockContainer)[0]);\r\n const lastPicked = (this.dates.lastPicked || this.optionsStore.viewDate).clone;\r\n timesDiv\r\n .querySelectorAll('.disabled')\r\n .forEach((element) => element.classList.remove(Namespace.css.disabled));\r\n if (this.optionsStore.options.display.components.hours) {\r\n if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, Unit.hours), Unit.hours)) {\r\n timesDiv\r\n .querySelector(`[data-action=${ActionTypes$1.incrementHours}]`)\r\n .classList.add(Namespace.css.disabled);\r\n }\r\n if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, Unit.hours), Unit.hours)) {\r\n timesDiv\r\n .querySelector(`[data-action=${ActionTypes$1.decrementHours}]`)\r\n .classList.add(Namespace.css.disabled);\r\n }\r\n timesDiv.querySelector(`[data-time-component=${Unit.hours}]`).innerText = this.optionsStore.options.display.components.useTwentyfourHour\r\n ? lastPicked.hoursFormatted\r\n : lastPicked.twelveHoursFormatted;\r\n }\r\n if (this.optionsStore.options.display.components.minutes) {\r\n if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, Unit.minutes), Unit.minutes)) {\r\n timesDiv\r\n .querySelector(`[data-action=${ActionTypes$1.incrementMinutes}]`)\r\n .classList.add(Namespace.css.disabled);\r\n }\r\n if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, Unit.minutes), Unit.minutes)) {\r\n timesDiv\r\n .querySelector(`[data-action=${ActionTypes$1.decrementMinutes}]`)\r\n .classList.add(Namespace.css.disabled);\r\n }\r\n timesDiv.querySelector(`[data-time-component=${Unit.minutes}]`).innerText = lastPicked.minutesFormatted;\r\n }\r\n if (this.optionsStore.options.display.components.seconds) {\r\n if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, Unit.seconds), Unit.seconds)) {\r\n timesDiv\r\n .querySelector(`[data-action=${ActionTypes$1.incrementSeconds}]`)\r\n .classList.add(Namespace.css.disabled);\r\n }\r\n if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, Unit.seconds), Unit.seconds)) {\r\n timesDiv\r\n .querySelector(`[data-action=${ActionTypes$1.decrementSeconds}]`)\r\n .classList.add(Namespace.css.disabled);\r\n }\r\n timesDiv.querySelector(`[data-time-component=${Unit.seconds}]`).innerText = lastPicked.secondsFormatted;\r\n }\r\n if (!this.optionsStore.options.display.components.useTwentyfourHour) {\r\n const toggle = timesDiv.querySelector(`[data-action=${ActionTypes$1.toggleMeridiem}]`);\r\n toggle.innerText = lastPicked.meridiem();\r\n if (!this.validation.isValid(lastPicked.clone.manipulate(lastPicked.hours >= 12 ? -12 : 12, Unit.hours))) {\r\n toggle.classList.add(Namespace.css.disabled);\r\n }\r\n else {\r\n toggle.classList.remove(Namespace.css.disabled);\r\n }\r\n }\r\n timesDiv.style.gridTemplateAreas = `\"${this._gridColumns}\"`;\r\n }\r\n /**\r\n * Creates the table for the clock display depending on what options are selected.\r\n * @private\r\n */\r\n _grid(iconTag) {\r\n this._gridColumns = '';\r\n const top = [], middle = [], bottom = [], separator = document.createElement('div'), upIcon = iconTag(this.optionsStore.options.display.icons.up), downIcon = iconTag(this.optionsStore.options.display.icons.down);\r\n separator.classList.add(Namespace.css.separator, Namespace.css.noHighlight);\r\n const separatorColon = separator.cloneNode(true);\r\n separatorColon.innerHTML = ':';\r\n const getSeparator = (colon = false) => {\r\n return colon\r\n ? separatorColon.cloneNode(true)\r\n : separator.cloneNode(true);\r\n };\r\n if (this.optionsStore.options.display.components.hours) {\r\n let divElement = document.createElement('div');\r\n divElement.setAttribute('title', this.optionsStore.options.localization.incrementHour);\r\n divElement.setAttribute('data-action', ActionTypes$1.incrementHours);\r\n divElement.appendChild(upIcon.cloneNode(true));\r\n top.push(divElement);\r\n divElement = document.createElement('div');\r\n divElement.setAttribute('title', this.optionsStore.options.localization.pickHour);\r\n divElement.setAttribute('data-action', ActionTypes$1.showHours);\r\n divElement.setAttribute('data-time-component', Unit.hours);\r\n middle.push(divElement);\r\n divElement = document.createElement('div');\r\n divElement.setAttribute('title', this.optionsStore.options.localization.decrementHour);\r\n divElement.setAttribute('data-action', ActionTypes$1.decrementHours);\r\n divElement.appendChild(downIcon.cloneNode(true));\r\n bottom.push(divElement);\r\n this._gridColumns += 'a';\r\n }\r\n if (this.optionsStore.options.display.components.minutes) {\r\n this._gridColumns += ' a';\r\n if (this.optionsStore.options.display.components.hours) {\r\n top.push(getSeparator());\r\n middle.push(getSeparator(true));\r\n bottom.push(getSeparator());\r\n this._gridColumns += ' a';\r\n }\r\n let divElement = document.createElement('div');\r\n divElement.setAttribute('title', this.optionsStore.options.localization.incrementMinute);\r\n divElement.setAttribute('data-action', ActionTypes$1.incrementMinutes);\r\n divElement.appendChild(upIcon.cloneNode(true));\r\n top.push(divElement);\r\n divElement = document.createElement('div');\r\n divElement.setAttribute('title', this.optionsStore.options.localization.pickMinute);\r\n divElement.setAttribute('data-action', ActionTypes$1.showMinutes);\r\n divElement.setAttribute('data-time-component', Unit.minutes);\r\n middle.push(divElement);\r\n divElement = document.createElement('div');\r\n divElement.setAttribute('title', this.optionsStore.options.localization.decrementMinute);\r\n divElement.setAttribute('data-action', ActionTypes$1.decrementMinutes);\r\n divElement.appendChild(downIcon.cloneNode(true));\r\n bottom.push(divElement);\r\n }\r\n if (this.optionsStore.options.display.components.seconds) {\r\n this._gridColumns += ' a';\r\n if (this.optionsStore.options.display.components.minutes) {\r\n top.push(getSeparator());\r\n middle.push(getSeparator(true));\r\n bottom.push(getSeparator());\r\n this._gridColumns += ' a';\r\n }\r\n let divElement = document.createElement('div');\r\n divElement.setAttribute('title', this.optionsStore.options.localization.incrementSecond);\r\n divElement.setAttribute('data-action', ActionTypes$1.incrementSeconds);\r\n divElement.appendChild(upIcon.cloneNode(true));\r\n top.push(divElement);\r\n divElement = document.createElement('div');\r\n divElement.setAttribute('title', this.optionsStore.options.localization.pickSecond);\r\n divElement.setAttribute('data-action', ActionTypes$1.showSeconds);\r\n divElement.setAttribute('data-time-component', Unit.seconds);\r\n middle.push(divElement);\r\n divElement = document.createElement('div');\r\n divElement.setAttribute('title', this.optionsStore.options.localization.decrementSecond);\r\n divElement.setAttribute('data-action', ActionTypes$1.decrementSeconds);\r\n divElement.appendChild(downIcon.cloneNode(true));\r\n bottom.push(divElement);\r\n }\r\n if (!this.optionsStore.options.display.components.useTwentyfourHour) {\r\n this._gridColumns += ' a';\r\n let divElement = getSeparator();\r\n top.push(divElement);\r\n let button = document.createElement('button');\r\n button.setAttribute('title', this.optionsStore.options.localization.toggleMeridiem);\r\n button.setAttribute('data-action', ActionTypes$1.toggleMeridiem);\r\n button.setAttribute('tabindex', '-1');\r\n if (Namespace.css.toggleMeridiem.includes(',')) { //todo move this to paint function?\r\n button.classList.add(...Namespace.css.toggleMeridiem.split(','));\r\n }\r\n else\r\n button.classList.add(Namespace.css.toggleMeridiem);\r\n divElement = document.createElement('div');\r\n divElement.classList.add(Namespace.css.noHighlight);\r\n divElement.appendChild(button);\r\n middle.push(divElement);\r\n divElement = getSeparator();\r\n bottom.push(divElement);\r\n }\r\n this._gridColumns = this._gridColumns.trim();\r\n return [...top, ...middle, ...bottom];\r\n }\r\n }\n\n /**\r\n * Creates and updates the grid for `hours`\r\n */\r\n class HourDisplay {\r\n constructor() {\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n this.validation = serviceLocator.locate(Validation);\r\n }\r\n /**\r\n * Build the container html for the display\r\n * @private\r\n */\r\n getPicker() {\r\n const container = document.createElement('div');\r\n container.classList.add(Namespace.css.hourContainer);\r\n for (let i = 0; i <\r\n (this.optionsStore.options.display.components.useTwentyfourHour ? 24 : 12); i++) {\r\n const div = document.createElement('div');\r\n div.setAttribute('data-action', ActionTypes$1.selectHour);\r\n container.appendChild(div);\r\n }\r\n return container;\r\n }\r\n /**\r\n * Populates the grid and updates enabled states\r\n * @private\r\n */\r\n _update(widget, paint) {\r\n const container = widget.getElementsByClassName(Namespace.css.hourContainer)[0];\r\n let innerDate = this.optionsStore.viewDate.clone.startOf(Unit.date);\r\n container\r\n .querySelectorAll(`[data-action=\"${ActionTypes$1.selectHour}\"]`)\r\n .forEach((containerClone) => {\r\n let classes = [];\r\n classes.push(Namespace.css.hour);\r\n if (!this.validation.isValid(innerDate, Unit.hours)) {\r\n classes.push(Namespace.css.disabled);\r\n }\r\n paint(Unit.hours, innerDate, classes, containerClone);\r\n containerClone.classList.remove(...containerClone.classList);\r\n containerClone.classList.add(...classes);\r\n containerClone.setAttribute('data-value', `${innerDate.hours}`);\r\n containerClone.innerText = this.optionsStore.options.display.components\r\n .useTwentyfourHour\r\n ? innerDate.hoursFormatted\r\n : innerDate.twelveHoursFormatted;\r\n innerDate.manipulate(1, Unit.hours);\r\n });\r\n }\r\n }\n\n /**\r\n * Creates and updates the grid for `minutes`\r\n */\r\n class MinuteDisplay {\r\n constructor() {\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n this.validation = serviceLocator.locate(Validation);\r\n }\r\n /**\r\n * Build the container html for the display\r\n * @private\r\n */\r\n getPicker() {\r\n const container = document.createElement('div');\r\n container.classList.add(Namespace.css.minuteContainer);\r\n let step = this.optionsStore.options.stepping === 1\r\n ? 5\r\n : this.optionsStore.options.stepping;\r\n for (let i = 0; i < 60 / step; i++) {\r\n const div = document.createElement('div');\r\n div.setAttribute('data-action', ActionTypes$1.selectMinute);\r\n container.appendChild(div);\r\n }\r\n return container;\r\n }\r\n /**\r\n * Populates the grid and updates enabled states\r\n * @private\r\n */\r\n _update(widget, paint) {\r\n const container = widget.getElementsByClassName(Namespace.css.minuteContainer)[0];\r\n let innerDate = this.optionsStore.viewDate.clone.startOf(Unit.hours);\r\n let step = this.optionsStore.options.stepping === 1\r\n ? 5\r\n : this.optionsStore.options.stepping;\r\n container\r\n .querySelectorAll(`[data-action=\"${ActionTypes$1.selectMinute}\"]`)\r\n .forEach((containerClone) => {\r\n let classes = [];\r\n classes.push(Namespace.css.minute);\r\n if (!this.validation.isValid(innerDate, Unit.minutes)) {\r\n classes.push(Namespace.css.disabled);\r\n }\r\n paint(Unit.minutes, innerDate, classes, containerClone);\r\n containerClone.classList.remove(...containerClone.classList);\r\n containerClone.classList.add(...classes);\r\n containerClone.setAttribute('data-value', `${innerDate.minutes}`);\r\n containerClone.innerText = innerDate.minutesFormatted;\r\n innerDate.manipulate(step, Unit.minutes);\r\n });\r\n }\r\n }\n\n /**\r\n * Creates and updates the grid for `seconds`\r\n */\r\n class secondDisplay {\r\n constructor() {\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n this.validation = serviceLocator.locate(Validation);\r\n }\r\n /**\r\n * Build the container html for the display\r\n * @private\r\n */\r\n getPicker() {\r\n const container = document.createElement('div');\r\n container.classList.add(Namespace.css.secondContainer);\r\n for (let i = 0; i < 12; i++) {\r\n const div = document.createElement('div');\r\n div.setAttribute('data-action', ActionTypes$1.selectSecond);\r\n container.appendChild(div);\r\n }\r\n return container;\r\n }\r\n /**\r\n * Populates the grid and updates enabled states\r\n * @private\r\n */\r\n _update(widget, paint) {\r\n const container = widget.getElementsByClassName(Namespace.css.secondContainer)[0];\r\n let innerDate = this.optionsStore.viewDate.clone.startOf(Unit.minutes);\r\n container\r\n .querySelectorAll(`[data-action=\"${ActionTypes$1.selectSecond}\"]`)\r\n .forEach((containerClone) => {\r\n let classes = [];\r\n classes.push(Namespace.css.second);\r\n if (!this.validation.isValid(innerDate, Unit.seconds)) {\r\n classes.push(Namespace.css.disabled);\r\n }\r\n paint(Unit.seconds, innerDate, classes, containerClone);\r\n containerClone.classList.remove(...containerClone.classList);\r\n containerClone.classList.add(...classes);\r\n containerClone.setAttribute('data-value', `${innerDate.seconds}`);\r\n containerClone.innerText = innerDate.secondsFormatted;\r\n innerDate.manipulate(5, Unit.seconds);\r\n });\r\n }\r\n }\n\n /**\r\n * Provides a collapse functionality to the view changes\r\n */\r\n class Collapse {\r\n /**\r\n * Flips the show/hide state of `target`\r\n * @param target html element to affect.\r\n */\r\n static toggle(target) {\r\n if (target.classList.contains(Namespace.css.show)) {\r\n this.hide(target);\r\n }\r\n else {\r\n this.show(target);\r\n }\r\n }\r\n /**\r\n * Skips any animation or timeouts and immediately set the element to show.\r\n * @param target\r\n */\r\n static showImmediately(target) {\r\n target.classList.remove(Namespace.css.collapsing);\r\n target.classList.add(Namespace.css.collapse, Namespace.css.show);\r\n target.style.height = '';\r\n }\r\n /**\r\n * If `target` is not already showing, then show after the animation.\r\n * @param target\r\n */\r\n static show(target) {\r\n if (target.classList.contains(Namespace.css.collapsing) ||\r\n target.classList.contains(Namespace.css.show))\r\n return;\r\n const complete = () => {\r\n Collapse.showImmediately(target);\r\n };\r\n target.style.height = '0';\r\n target.classList.remove(Namespace.css.collapse);\r\n target.classList.add(Namespace.css.collapsing);\r\n setTimeout(complete, this.getTransitionDurationFromElement(target));\r\n target.style.height = `${target.scrollHeight}px`;\r\n }\r\n /**\r\n * Skips any animation or timeouts and immediately set the element to hide.\r\n * @param target\r\n */\r\n static hideImmediately(target) {\r\n if (!target)\r\n return;\r\n target.classList.remove(Namespace.css.collapsing, Namespace.css.show);\r\n target.classList.add(Namespace.css.collapse);\r\n }\r\n /**\r\n * If `target` is not already hidden, then hide after the animation.\r\n * @param target HTML Element\r\n */\r\n static hide(target) {\r\n if (target.classList.contains(Namespace.css.collapsing) ||\r\n !target.classList.contains(Namespace.css.show))\r\n return;\r\n const complete = () => {\r\n Collapse.hideImmediately(target);\r\n };\r\n target.style.height = `${target.getBoundingClientRect()['height']}px`;\r\n const reflow = (element) => element.offsetHeight;\r\n reflow(target);\r\n target.classList.remove(Namespace.css.collapse, Namespace.css.show);\r\n target.classList.add(Namespace.css.collapsing);\r\n target.style.height = '';\r\n setTimeout(complete, this.getTransitionDurationFromElement(target));\r\n }\r\n }\r\n /**\r\n * Gets the transition duration from the `element` by getting css properties\r\n * `transition-duration` and `transition-delay`\r\n * @param element HTML Element\r\n */\r\n Collapse.getTransitionDurationFromElement = (element) => {\r\n if (!element) {\r\n return 0;\r\n }\r\n // Get transition-duration of the element\r\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element);\r\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\r\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\r\n // Return 0 if element or transition duration is not found\r\n if (!floatTransitionDuration && !floatTransitionDelay) {\r\n return 0;\r\n }\r\n // If multiple durations are defined, take the first\r\n transitionDuration = transitionDuration.split(',')[0];\r\n transitionDelay = transitionDelay.split(',')[0];\r\n return ((Number.parseFloat(transitionDuration) +\r\n Number.parseFloat(transitionDelay)) *\r\n 1000);\r\n };\n\n /**\r\n * Main class for all things display related.\r\n */\r\n class Display {\r\n constructor() {\r\n this._isVisible = false;\r\n /**\r\n * A document click event to hide the widget if click is outside\r\n * @private\r\n * @param e MouseEvent\r\n */\r\n this._documentClickEvent = (e) => {\r\n var _a;\r\n if (this.optionsStore.options.debug || window.debug)\r\n return;\r\n if (this._isVisible &&\r\n !e.composedPath().includes(this.widget) && // click inside the widget\r\n !((_a = e.composedPath()) === null || _a === void 0 ? void 0 : _a.includes(this.optionsStore.element)) // click on the element\r\n ) {\r\n this.hide();\r\n }\r\n };\r\n /**\r\n * Click event for any action like selecting a date\r\n * @param e MouseEvent\r\n * @private\r\n */\r\n this._actionsClickEvent = (e) => {\r\n this._eventEmitters.action.emit({ e: e });\r\n };\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n this.validation = serviceLocator.locate(Validation);\r\n this.dates = serviceLocator.locate(Dates);\r\n this.dateDisplay = serviceLocator.locate(DateDisplay);\r\n this.monthDisplay = serviceLocator.locate(MonthDisplay);\r\n this.yearDisplay = serviceLocator.locate(YearDisplay);\r\n this.decadeDisplay = serviceLocator.locate(DecadeDisplay);\r\n this.timeDisplay = serviceLocator.locate(TimeDisplay);\r\n this.hourDisplay = serviceLocator.locate(HourDisplay);\r\n this.minuteDisplay = serviceLocator.locate(MinuteDisplay);\r\n this.secondDisplay = serviceLocator.locate(secondDisplay);\r\n this._eventEmitters = serviceLocator.locate(EventEmitters);\r\n this._widget = undefined;\r\n this._eventEmitters.updateDisplay.subscribe((result) => {\r\n this._update(result);\r\n });\r\n }\r\n /**\r\n * Returns the widget body or undefined\r\n * @private\r\n */\r\n get widget() {\r\n return this._widget;\r\n }\r\n /**\r\n * Returns this visible state of the picker (shown)\r\n */\r\n get isVisible() {\r\n return this._isVisible;\r\n }\r\n /**\r\n * Updates the table for a particular unit. Used when an option as changed or\r\n * whenever the class list might need to be refreshed.\r\n * @param unit\r\n * @private\r\n */\r\n _update(unit) {\r\n if (!this.widget)\r\n return;\r\n //todo do I want some kind of error catching or other guards here?\r\n switch (unit) {\r\n case Unit.seconds:\r\n this.secondDisplay._update(this.widget, this.paint);\r\n break;\r\n case Unit.minutes:\r\n this.minuteDisplay._update(this.widget, this.paint);\r\n break;\r\n case Unit.hours:\r\n this.hourDisplay._update(this.widget, this.paint);\r\n break;\r\n case Unit.date:\r\n this.dateDisplay._update(this.widget, this.paint);\r\n break;\r\n case Unit.month:\r\n this.monthDisplay._update(this.widget, this.paint);\r\n break;\r\n case Unit.year:\r\n this.yearDisplay._update(this.widget, this.paint);\r\n break;\r\n case 'clock':\r\n if (!this._hasTime)\r\n break;\r\n this.timeDisplay._update(this.widget);\r\n this._update(Unit.hours);\r\n this._update(Unit.minutes);\r\n this._update(Unit.seconds);\r\n break;\r\n case 'calendar':\r\n this._update(Unit.date);\r\n this._update(Unit.year);\r\n this._update(Unit.month);\r\n this.decadeDisplay._update(this.widget, this.paint);\r\n this._updateCalendarHeader();\r\n break;\r\n case 'all':\r\n if (this._hasTime) {\r\n this._update('clock');\r\n }\r\n if (this._hasDate) {\r\n this._update('calendar');\r\n }\r\n }\r\n }\r\n // noinspection JSUnusedLocalSymbols\r\n /**\r\n * Allows developers to add/remove classes from an element.\r\n * @param _unit\r\n * @param _date\r\n * @param _classes\r\n * @param _element\r\n */\r\n paint(_unit, _date, _classes, _element) {\r\n // implemented in plugin\r\n }\r\n /**\r\n * Shows the picker and creates a Popper instance if needed.\r\n * Add document click event to hide when clicking outside the picker.\r\n * fires Events#show\r\n */\r\n show() {\r\n var _a, _b;\r\n if (this.widget == undefined) {\r\n if (this.dates.picked.length == 0) {\r\n if (this.optionsStore.options.useCurrent &&\r\n !this.optionsStore.options.defaultDate) {\r\n const date = new DateTime().setLocale(this.optionsStore.options.localization.locale);\r\n if (!this.optionsStore.options.keepInvalid) {\r\n let tries = 0;\r\n let direction = 1;\r\n if ((_a = this.optionsStore.options.restrictions.maxDate) === null || _a === void 0 ? void 0 : _a.isBefore(date)) {\r\n direction = -1;\r\n }\r\n while (!this.validation.isValid(date)) {\r\n date.manipulate(direction, Unit.date);\r\n if (tries > 31)\r\n break;\r\n tries++;\r\n }\r\n }\r\n this.dates.setValue(date);\r\n }\r\n if (this.optionsStore.options.defaultDate) {\r\n this.dates.setValue(this.optionsStore.options.defaultDate);\r\n }\r\n }\r\n this._buildWidget();\r\n this._updateTheme();\r\n // If modeView is only clock\r\n const onlyClock = this._hasTime && !this._hasDate;\r\n // reset the view to the clock if there's no date components\r\n if (onlyClock) {\r\n this.optionsStore.currentView = 'clock';\r\n this._eventEmitters.action.emit({\r\n e: null,\r\n action: ActionTypes$1.showClock,\r\n });\r\n }\r\n // otherwise return to the calendar view\r\n if (!this.optionsStore.currentCalendarViewMode) {\r\n this.optionsStore.currentCalendarViewMode =\r\n this.optionsStore.minimumCalendarViewMode;\r\n }\r\n if (!onlyClock &&\r\n this.optionsStore.options.display.viewMode !== 'clock') {\r\n if (this._hasTime) {\r\n if (!this.optionsStore.options.display.sideBySide) {\r\n Collapse.hideImmediately(this.widget.querySelector(`div.${Namespace.css.timeContainer}`));\r\n }\r\n else {\r\n Collapse.show(this.widget.querySelector(`div.${Namespace.css.timeContainer}`));\r\n }\r\n }\r\n Collapse.show(this.widget.querySelector(`div.${Namespace.css.dateContainer}`));\r\n }\r\n if (this._hasDate) {\r\n this._showMode();\r\n }\r\n if (!this.optionsStore.options.display.inline) {\r\n // If needed to change the parent container\r\n const container = ((_b = this.optionsStore.options) === null || _b === void 0 ? void 0 : _b.container) || document.body;\r\n container.appendChild(this.widget);\r\n this._popperInstance = core.createPopper(this.optionsStore.element, this.widget, {\r\n modifiers: [{ name: 'eventListeners', enabled: true }],\r\n //#2400\r\n placement: document.documentElement.dir === 'rtl'\r\n ? 'bottom-end'\r\n : 'bottom-start',\r\n });\r\n }\r\n else {\r\n this.optionsStore.element.appendChild(this.widget);\r\n }\r\n if (this.optionsStore.options.display.viewMode == 'clock') {\r\n this._eventEmitters.action.emit({\r\n e: null,\r\n action: ActionTypes$1.showClock,\r\n });\r\n }\r\n this.widget\r\n .querySelectorAll('[data-action]')\r\n .forEach((element) => element.addEventListener('click', this._actionsClickEvent));\r\n // show the clock when using sideBySide\r\n if (this._hasTime && this.optionsStore.options.display.sideBySide) {\r\n this.timeDisplay._update(this.widget);\r\n this.widget.getElementsByClassName(Namespace.css.clockContainer)[0].style.display = 'grid';\r\n }\r\n }\r\n this.widget.classList.add(Namespace.css.show);\r\n if (!this.optionsStore.options.display.inline) {\r\n this._popperInstance.update();\r\n document.addEventListener('click', this._documentClickEvent);\r\n }\r\n this._eventEmitters.triggerEvent.emit({ type: Namespace.events.show });\r\n this._isVisible = true;\r\n }\r\n /**\r\n * Changes the calendar view mode. E.g. month <-> year\r\n * @param direction -/+ number to move currentViewMode\r\n * @private\r\n */\r\n _showMode(direction) {\r\n if (!this.widget) {\r\n return;\r\n }\r\n if (direction) {\r\n const max = Math.max(this.optionsStore.minimumCalendarViewMode, Math.min(3, this.optionsStore.currentCalendarViewMode + direction));\r\n if (this.optionsStore.currentCalendarViewMode == max)\r\n return;\r\n this.optionsStore.currentCalendarViewMode = max;\r\n }\r\n this.widget\r\n .querySelectorAll(`.${Namespace.css.dateContainer} > div:not(.${Namespace.css.calendarHeader}), .${Namespace.css.timeContainer} > div:not(.${Namespace.css.clockContainer})`)\r\n .forEach((e) => (e.style.display = 'none'));\r\n const datePickerMode = CalendarModes[this.optionsStore.currentCalendarViewMode];\r\n let picker = this.widget.querySelector(`.${datePickerMode.className}`);\r\n switch (datePickerMode.className) {\r\n case Namespace.css.decadesContainer:\r\n this.decadeDisplay._update(this.widget, this.paint);\r\n break;\r\n case Namespace.css.yearsContainer:\r\n this.yearDisplay._update(this.widget, this.paint);\r\n break;\r\n case Namespace.css.monthsContainer:\r\n this.monthDisplay._update(this.widget, this.paint);\r\n break;\r\n case Namespace.css.daysContainer:\r\n this.dateDisplay._update(this.widget, this.paint);\r\n break;\r\n }\r\n picker.style.display = 'grid';\r\n this._updateCalendarHeader();\r\n this._eventEmitters.viewUpdate.emit();\r\n }\r\n /**\r\n * Changes the theme. E.g. light, dark or auto\r\n * @param theme the theme name\r\n * @private\r\n */\r\n _updateTheme(theme) {\r\n if (!this.widget) {\r\n return;\r\n }\r\n if (theme) {\r\n if (this.optionsStore.options.display.theme === theme)\r\n return;\r\n this.optionsStore.options.display.theme = theme;\r\n }\r\n this.widget.classList.remove('light', 'dark');\r\n this.widget.classList.add(this._getThemeClass());\r\n if (this.optionsStore.options.display.theme === 'auto') {\r\n window\r\n .matchMedia(Namespace.css.isDarkPreferredQuery)\r\n .addEventListener('change', () => this._updateTheme());\r\n }\r\n else {\r\n window\r\n .matchMedia(Namespace.css.isDarkPreferredQuery)\r\n .removeEventListener('change', () => this._updateTheme());\r\n }\r\n }\r\n _getThemeClass() {\r\n const currentTheme = this.optionsStore.options.display.theme || 'auto';\r\n const isDarkMode = window.matchMedia &&\r\n window.matchMedia(Namespace.css.isDarkPreferredQuery).matches;\r\n switch (currentTheme) {\r\n case 'light':\r\n return Namespace.css.lightTheme;\r\n case 'dark':\r\n return Namespace.css.darkTheme;\r\n case 'auto':\r\n return isDarkMode ? Namespace.css.darkTheme : Namespace.css.lightTheme;\r\n }\r\n }\r\n _updateCalendarHeader() {\r\n const showing = [\r\n ...this.widget.querySelector(`.${Namespace.css.dateContainer} div[style*=\"display: grid\"]`).classList,\r\n ].find((x) => x.startsWith(Namespace.css.dateContainer));\r\n const [previous, switcher, next] = this.widget\r\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\r\n .getElementsByTagName('div');\r\n switch (showing) {\r\n case Namespace.css.decadesContainer:\r\n previous.setAttribute('title', this.optionsStore.options.localization.previousCentury);\r\n switcher.setAttribute('title', '');\r\n next.setAttribute('title', this.optionsStore.options.localization.nextCentury);\r\n break;\r\n case Namespace.css.yearsContainer:\r\n previous.setAttribute('title', this.optionsStore.options.localization.previousDecade);\r\n switcher.setAttribute('title', this.optionsStore.options.localization.selectDecade);\r\n next.setAttribute('title', this.optionsStore.options.localization.nextDecade);\r\n break;\r\n case Namespace.css.monthsContainer:\r\n previous.setAttribute('title', this.optionsStore.options.localization.previousYear);\r\n switcher.setAttribute('title', this.optionsStore.options.localization.selectYear);\r\n next.setAttribute('title', this.optionsStore.options.localization.nextYear);\r\n break;\r\n case Namespace.css.daysContainer:\r\n previous.setAttribute('title', this.optionsStore.options.localization.previousMonth);\r\n switcher.setAttribute('title', this.optionsStore.options.localization.selectMonth);\r\n next.setAttribute('title', this.optionsStore.options.localization.nextMonth);\r\n switcher.innerText = this.optionsStore.viewDate.format(this.optionsStore.options.localization.dayViewHeaderFormat);\r\n break;\r\n }\r\n switcher.innerText = switcher.getAttribute(showing);\r\n }\r\n /**\r\n * Hides the picker if needed.\r\n * Remove document click event to hide when clicking outside the picker.\r\n * fires Events#hide\r\n */\r\n hide() {\r\n if (!this.widget || !this._isVisible)\r\n return;\r\n this.widget.classList.remove(Namespace.css.show);\r\n if (this._isVisible) {\r\n this._eventEmitters.triggerEvent.emit({\r\n type: Namespace.events.hide,\r\n date: this.optionsStore.unset\r\n ? null\r\n : this.dates.lastPicked\r\n ? this.dates.lastPicked.clone\r\n : void 0,\r\n });\r\n this._isVisible = false;\r\n }\r\n document.removeEventListener('click', this._documentClickEvent);\r\n }\r\n /**\r\n * Toggles the picker's open state. Fires a show/hide event depending.\r\n */\r\n toggle() {\r\n return this._isVisible ? this.hide() : this.show();\r\n }\r\n /**\r\n * Removes document and data-action click listener and reset the widget\r\n * @private\r\n */\r\n _dispose() {\r\n document.removeEventListener('click', this._documentClickEvent);\r\n if (!this.widget)\r\n return;\r\n this.widget\r\n .querySelectorAll('[data-action]')\r\n .forEach((element) => element.removeEventListener('click', this._actionsClickEvent));\r\n this.widget.parentNode.removeChild(this.widget);\r\n this._widget = undefined;\r\n }\r\n /**\r\n * Builds the widgets html template.\r\n * @private\r\n */\r\n _buildWidget() {\r\n const template = document.createElement('div');\r\n template.classList.add(Namespace.css.widget);\r\n const dateView = document.createElement('div');\r\n dateView.classList.add(Namespace.css.dateContainer);\r\n dateView.append(this.getHeadTemplate(), this.decadeDisplay.getPicker(), this.yearDisplay.getPicker(), this.monthDisplay.getPicker(), this.dateDisplay.getPicker());\r\n const timeView = document.createElement('div');\r\n timeView.classList.add(Namespace.css.timeContainer);\r\n timeView.appendChild(this.timeDisplay.getPicker(this._iconTag.bind(this)));\r\n timeView.appendChild(this.hourDisplay.getPicker());\r\n timeView.appendChild(this.minuteDisplay.getPicker());\r\n timeView.appendChild(this.secondDisplay.getPicker());\r\n const toolbar = document.createElement('div');\r\n toolbar.classList.add(Namespace.css.toolbar);\r\n toolbar.append(...this.getToolbarElements());\r\n if (this.optionsStore.options.display.inline) {\r\n template.classList.add(Namespace.css.inline);\r\n }\r\n if (this.optionsStore.options.display.calendarWeeks) {\r\n template.classList.add('calendarWeeks');\r\n }\r\n if (this.optionsStore.options.display.sideBySide &&\r\n this._hasDate &&\r\n this._hasTime) {\r\n template.classList.add(Namespace.css.sideBySide);\r\n if (this.optionsStore.options.display.toolbarPlacement === 'top') {\r\n template.appendChild(toolbar);\r\n }\r\n const row = document.createElement('div');\r\n row.classList.add('td-row');\r\n dateView.classList.add('td-half');\r\n timeView.classList.add('td-half');\r\n row.appendChild(dateView);\r\n row.appendChild(timeView);\r\n template.appendChild(row);\r\n if (this.optionsStore.options.display.toolbarPlacement === 'bottom') {\r\n template.appendChild(toolbar);\r\n }\r\n this._widget = template;\r\n return;\r\n }\r\n if (this.optionsStore.options.display.toolbarPlacement === 'top') {\r\n template.appendChild(toolbar);\r\n }\r\n if (this._hasDate) {\r\n if (this._hasTime) {\r\n dateView.classList.add(Namespace.css.collapse);\r\n if (this.optionsStore.options.display.viewMode !== 'clock')\r\n dateView.classList.add(Namespace.css.show);\r\n }\r\n template.appendChild(dateView);\r\n }\r\n if (this._hasTime) {\r\n if (this._hasDate) {\r\n timeView.classList.add(Namespace.css.collapse);\r\n if (this.optionsStore.options.display.viewMode === 'clock')\r\n timeView.classList.add(Namespace.css.show);\r\n }\r\n template.appendChild(timeView);\r\n }\r\n if (this.optionsStore.options.display.toolbarPlacement === 'bottom') {\r\n template.appendChild(toolbar);\r\n }\r\n const arrow = document.createElement('div');\r\n arrow.classList.add('arrow');\r\n arrow.setAttribute('data-popper-arrow', '');\r\n template.appendChild(arrow);\r\n this._widget = template;\r\n }\r\n /**\r\n * Returns true if the hours, minutes, or seconds component is turned on\r\n */\r\n get _hasTime() {\r\n return (this.optionsStore.options.display.components.clock &&\r\n (this.optionsStore.options.display.components.hours ||\r\n this.optionsStore.options.display.components.minutes ||\r\n this.optionsStore.options.display.components.seconds));\r\n }\r\n /**\r\n * Returns true if the year, month, or date component is turned on\r\n */\r\n get _hasDate() {\r\n return (this.optionsStore.options.display.components.calendar &&\r\n (this.optionsStore.options.display.components.year ||\r\n this.optionsStore.options.display.components.month ||\r\n this.optionsStore.options.display.components.date));\r\n }\r\n /**\r\n * Get the toolbar html based on options like buttons.today\r\n * @private\r\n */\r\n getToolbarElements() {\r\n const toolbar = [];\r\n if (this.optionsStore.options.display.buttons.today) {\r\n const div = document.createElement('div');\r\n div.setAttribute('data-action', ActionTypes$1.today);\r\n div.setAttribute('title', this.optionsStore.options.localization.today);\r\n div.appendChild(this._iconTag(this.optionsStore.options.display.icons.today));\r\n toolbar.push(div);\r\n }\r\n if (!this.optionsStore.options.display.sideBySide &&\r\n this._hasDate &&\r\n this._hasTime) {\r\n let title, icon;\r\n if (this.optionsStore.options.display.viewMode === 'clock') {\r\n title = this.optionsStore.options.localization.selectDate;\r\n icon = this.optionsStore.options.display.icons.date;\r\n }\r\n else {\r\n title = this.optionsStore.options.localization.selectTime;\r\n icon = this.optionsStore.options.display.icons.time;\r\n }\r\n const div = document.createElement('div');\r\n div.setAttribute('data-action', ActionTypes$1.togglePicker);\r\n div.setAttribute('title', title);\r\n div.appendChild(this._iconTag(icon));\r\n toolbar.push(div);\r\n }\r\n if (this.optionsStore.options.display.buttons.clear) {\r\n const div = document.createElement('div');\r\n div.setAttribute('data-action', ActionTypes$1.clear);\r\n div.setAttribute('title', this.optionsStore.options.localization.clear);\r\n div.appendChild(this._iconTag(this.optionsStore.options.display.icons.clear));\r\n toolbar.push(div);\r\n }\r\n if (this.optionsStore.options.display.buttons.close) {\r\n const div = document.createElement('div');\r\n div.setAttribute('data-action', ActionTypes$1.close);\r\n div.setAttribute('title', this.optionsStore.options.localization.close);\r\n div.appendChild(this._iconTag(this.optionsStore.options.display.icons.close));\r\n toolbar.push(div);\r\n }\r\n return toolbar;\r\n }\r\n /***\r\n * Builds the base header template with next and previous icons\r\n * @private\r\n */\r\n getHeadTemplate() {\r\n const calendarHeader = document.createElement('div');\r\n calendarHeader.classList.add(Namespace.css.calendarHeader);\r\n const previous = document.createElement('div');\r\n previous.classList.add(Namespace.css.previous);\r\n previous.setAttribute('data-action', ActionTypes$1.previous);\r\n previous.appendChild(this._iconTag(this.optionsStore.options.display.icons[document.documentElement.dir === 'rtl' ? 'next' : 'previous']) //***\r\n );\r\n const switcher = document.createElement('div');\r\n switcher.classList.add(Namespace.css.switch);\r\n switcher.setAttribute('data-action', ActionTypes$1.changeCalendarView);\r\n const next = document.createElement('div');\r\n next.classList.add(Namespace.css.next);\r\n next.setAttribute('data-action', ActionTypes$1.next);\r\n next.appendChild(this._iconTag(this.optionsStore.options.display.icons[document.documentElement.dir === 'rtl' ? 'previous' : 'next']) //***\r\n );\r\n calendarHeader.append(previous, switcher, next);\r\n return calendarHeader;\r\n }\r\n /**\r\n * Builds an icon tag as either an ``\r\n * or with icons.type is `sprites` then a svg tag instead\r\n * @param iconClass\r\n * @private\r\n */\r\n _iconTag(iconClass) {\r\n if (this.optionsStore.options.display.icons.type === 'sprites') {\r\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n const icon = document.createElementNS('http://www.w3.org/2000/svg', 'use');\r\n icon.setAttribute('xlink:href', iconClass); // Deprecated. Included for backward compatibility\r\n icon.setAttribute('href', iconClass);\r\n svg.appendChild(icon);\r\n return svg;\r\n }\r\n const icon = document.createElement('i');\r\n icon.classList.add(...iconClass.split(' '));\r\n return icon;\r\n }\r\n /**\r\n * Causes the widget to get rebuilt on next show. If the picker is already open\r\n * then hide and reshow it.\r\n * @private\r\n */\r\n _rebuild() {\r\n const wasVisible = this._isVisible;\r\n if (wasVisible)\r\n this.hide();\r\n this._dispose();\r\n if (wasVisible) {\r\n this.show();\r\n }\r\n }\r\n }\n\n /**\r\n *\r\n */\r\n class Actions {\r\n constructor() {\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n this.dates = serviceLocator.locate(Dates);\r\n this.validation = serviceLocator.locate(Validation);\r\n this.display = serviceLocator.locate(Display);\r\n this._eventEmitters = serviceLocator.locate(EventEmitters);\r\n this._eventEmitters.action.subscribe((result) => {\r\n this.do(result.e, result.action);\r\n });\r\n }\r\n /**\r\n * Performs the selected `action`. See ActionTypes\r\n * @param e This is normally a click event\r\n * @param action If not provided, then look for a [data-action]\r\n */\r\n do(e, action) {\r\n var _a, _b;\r\n const currentTarget = e === null || e === void 0 ? void 0 : e.currentTarget;\r\n if ((_a = currentTarget === null || currentTarget === void 0 ? void 0 : currentTarget.classList) === null || _a === void 0 ? void 0 : _a.contains(Namespace.css.disabled))\r\n return false;\r\n action = action || ((_b = currentTarget === null || currentTarget === void 0 ? void 0 : currentTarget.dataset) === null || _b === void 0 ? void 0 : _b.action);\r\n const lastPicked = (this.dates.lastPicked || this.optionsStore.viewDate)\r\n .clone;\r\n switch (action) {\r\n case ActionTypes$1.next:\r\n case ActionTypes$1.previous:\r\n this.handleNextPrevious(action);\r\n break;\r\n case ActionTypes$1.changeCalendarView:\r\n this.display._showMode(1);\r\n this.display._updateCalendarHeader();\r\n break;\r\n case ActionTypes$1.selectMonth:\r\n case ActionTypes$1.selectYear:\r\n case ActionTypes$1.selectDecade:\r\n const value = +currentTarget.dataset.value;\r\n switch (action) {\r\n case ActionTypes$1.selectMonth:\r\n this.optionsStore.viewDate.month = value;\r\n break;\r\n case ActionTypes$1.selectYear:\r\n case ActionTypes$1.selectDecade:\r\n this.optionsStore.viewDate.year = value;\r\n break;\r\n }\r\n if (this.optionsStore.currentCalendarViewMode ===\r\n this.optionsStore.minimumCalendarViewMode) {\r\n this.dates.setValue(this.optionsStore.viewDate, this.dates.lastPickedIndex);\r\n if (!this.optionsStore.options.display.inline) {\r\n this.display.hide();\r\n }\r\n }\r\n else {\r\n this.display._showMode(-1);\r\n }\r\n break;\r\n case ActionTypes$1.selectDay:\r\n const day = this.optionsStore.viewDate.clone;\r\n if (currentTarget.classList.contains(Namespace.css.old)) {\r\n day.manipulate(-1, Unit.month);\r\n }\r\n if (currentTarget.classList.contains(Namespace.css.new)) {\r\n day.manipulate(1, Unit.month);\r\n }\r\n day.date = +currentTarget.dataset.day;\r\n let index = 0;\r\n if (this.optionsStore.options.multipleDates) {\r\n index = this.dates.pickedIndex(day, Unit.date);\r\n if (index !== -1) {\r\n this.dates.setValue(null, index); //deselect multi-date\r\n }\r\n else {\r\n this.dates.setValue(day, this.dates.lastPickedIndex + 1);\r\n }\r\n }\r\n else {\r\n this.dates.setValue(day, this.dates.lastPickedIndex);\r\n }\r\n if (!this.display._hasTime &&\r\n !this.optionsStore.options.display.keepOpen &&\r\n !this.optionsStore.options.display.inline &&\r\n !this.optionsStore.options.multipleDates) {\r\n this.display.hide();\r\n }\r\n break;\r\n case ActionTypes$1.selectHour:\r\n let hour = +currentTarget.dataset.value;\r\n if (lastPicked.hours >= 12 &&\r\n !this.optionsStore.options.display.components.useTwentyfourHour)\r\n hour += 12;\r\n lastPicked.hours = hour;\r\n this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\r\n this.hideOrClock(e);\r\n break;\r\n case ActionTypes$1.selectMinute:\r\n lastPicked.minutes = +currentTarget.dataset.value;\r\n this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\r\n this.hideOrClock(e);\r\n break;\r\n case ActionTypes$1.selectSecond:\r\n lastPicked.seconds = +currentTarget.dataset.value;\r\n this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\r\n this.hideOrClock(e);\r\n break;\r\n case ActionTypes$1.incrementHours:\r\n this.manipulateAndSet(lastPicked, Unit.hours);\r\n break;\r\n case ActionTypes$1.incrementMinutes:\r\n this.manipulateAndSet(lastPicked, Unit.minutes, this.optionsStore.options.stepping);\r\n break;\r\n case ActionTypes$1.incrementSeconds:\r\n this.manipulateAndSet(lastPicked, Unit.seconds);\r\n break;\r\n case ActionTypes$1.decrementHours:\r\n this.manipulateAndSet(lastPicked, Unit.hours, -1);\r\n break;\r\n case ActionTypes$1.decrementMinutes:\r\n this.manipulateAndSet(lastPicked, Unit.minutes, this.optionsStore.options.stepping * -1);\r\n break;\r\n case ActionTypes$1.decrementSeconds:\r\n this.manipulateAndSet(lastPicked, Unit.seconds, -1);\r\n break;\r\n case ActionTypes$1.toggleMeridiem:\r\n this.manipulateAndSet(lastPicked, Unit.hours, this.dates.lastPicked.hours >= 12 ? -12 : 12);\r\n break;\r\n case ActionTypes$1.togglePicker:\r\n if (currentTarget.getAttribute('title') ===\r\n this.optionsStore.options.localization.selectDate) {\r\n currentTarget.setAttribute('title', this.optionsStore.options.localization.selectTime);\r\n currentTarget.innerHTML = this.display._iconTag(this.optionsStore.options.display.icons.time).outerHTML;\r\n this.display._updateCalendarHeader();\r\n this.optionsStore.refreshCurrentView();\r\n }\r\n else {\r\n currentTarget.setAttribute('title', this.optionsStore.options.localization.selectDate);\r\n currentTarget.innerHTML = this.display._iconTag(this.optionsStore.options.display.icons.date).outerHTML;\r\n if (this.display._hasTime) {\r\n this.handleShowClockContainers(ActionTypes$1.showClock);\r\n this.display._update('clock');\r\n }\r\n }\r\n this.display.widget\r\n .querySelectorAll(`.${Namespace.css.dateContainer}, .${Namespace.css.timeContainer}`)\r\n .forEach((htmlElement) => Collapse.toggle(htmlElement));\r\n this._eventEmitters.viewUpdate.emit();\r\n break;\r\n case ActionTypes$1.showClock:\r\n case ActionTypes$1.showHours:\r\n case ActionTypes$1.showMinutes:\r\n case ActionTypes$1.showSeconds:\r\n //make sure the clock is actually displaying\r\n if (!this.optionsStore.options.display.sideBySide && this.optionsStore.currentView !== 'clock') {\r\n //hide calendar\r\n Collapse.hideImmediately(this.display.widget.querySelector(`div.${Namespace.css.dateContainer}`));\r\n //show clock\r\n Collapse.showImmediately(this.display.widget.querySelector(`div.${Namespace.css.timeContainer}`));\r\n }\r\n this.handleShowClockContainers(action);\r\n break;\r\n case ActionTypes$1.clear:\r\n this.dates.setValue(null);\r\n this.display._updateCalendarHeader();\r\n break;\r\n case ActionTypes$1.close:\r\n this.display.hide();\r\n break;\r\n case ActionTypes$1.today:\r\n const today = new DateTime().setLocale(this.optionsStore.options.localization.locale);\r\n this.optionsStore.viewDate = today;\r\n if (this.validation.isValid(today, Unit.date))\r\n this.dates.setValue(today, this.dates.lastPickedIndex);\r\n break;\r\n }\r\n }\r\n handleShowClockContainers(action) {\r\n if (!this.display._hasTime) {\r\n Namespace.errorMessages.throwError('Cannot show clock containers when time is disabled.');\r\n return;\r\n }\r\n this.optionsStore.currentView = 'clock';\r\n this.display.widget\r\n .querySelectorAll(`.${Namespace.css.timeContainer} > div`)\r\n .forEach((htmlElement) => (htmlElement.style.display = 'none'));\r\n let classToUse = '';\r\n switch (action) {\r\n case ActionTypes$1.showClock:\r\n classToUse = Namespace.css.clockContainer;\r\n this.display._update('clock');\r\n break;\r\n case ActionTypes$1.showHours:\r\n classToUse = Namespace.css.hourContainer;\r\n this.display._update(Unit.hours);\r\n break;\r\n case ActionTypes$1.showMinutes:\r\n classToUse = Namespace.css.minuteContainer;\r\n this.display._update(Unit.minutes);\r\n break;\r\n case ActionTypes$1.showSeconds:\r\n classToUse = Namespace.css.secondContainer;\r\n this.display._update(Unit.seconds);\r\n break;\r\n }\r\n (this.display.widget.getElementsByClassName(classToUse)[0]).style.display = 'grid';\r\n }\r\n handleNextPrevious(action) {\r\n const { unit, step } = CalendarModes[this.optionsStore.currentCalendarViewMode];\r\n if (action === ActionTypes$1.next)\r\n this.optionsStore.viewDate.manipulate(step, unit);\r\n else\r\n this.optionsStore.viewDate.manipulate(step * -1, unit);\r\n this._eventEmitters.viewUpdate.emit();\r\n this.display._showMode();\r\n }\r\n /**\r\n * After setting the value it will either show the clock or hide the widget.\r\n * @param e\r\n */\r\n hideOrClock(e) {\r\n if (this.optionsStore.options.display.components.useTwentyfourHour &&\r\n !this.optionsStore.options.display.components.minutes &&\r\n !this.optionsStore.options.display.keepOpen &&\r\n !this.optionsStore.options.display.inline) {\r\n this.display.hide();\r\n }\r\n else {\r\n this.do(e, ActionTypes$1.showClock);\r\n }\r\n }\r\n /**\r\n * Common function to manipulate {@link lastPicked} by `unit`.\r\n * @param lastPicked\r\n * @param unit\r\n * @param value Value to change by\r\n */\r\n manipulateAndSet(lastPicked, unit, value = 1) {\r\n const newDate = lastPicked.manipulate(value, unit);\r\n if (this.validation.isValid(newDate, unit)) {\r\n this.dates.setValue(newDate, this.dates.lastPickedIndex);\r\n }\r\n }\r\n }\n\n /**\r\n * A robust and powerful date/time picker component.\r\n */\r\n class TempusDominus {\r\n constructor(element, options = {}) {\r\n this._subscribers = {};\r\n this._isDisabled = false;\r\n /**\r\n * Event for when the input field changes. This is a class level method so there's\r\n * something for the remove listener function.\r\n * @private\r\n */\r\n this._inputChangeEvent = (event) => {\r\n const internallyTriggered = event === null || event === void 0 ? void 0 : event.detail;\r\n if (internallyTriggered)\r\n return;\r\n const setViewDate = () => {\r\n if (this.dates.lastPicked)\r\n this.optionsStore.viewDate = this.dates.lastPicked.clone;\r\n };\r\n const value = this.optionsStore.input.value;\r\n if (this.optionsStore.options.multipleDates) {\r\n try {\r\n const valueSplit = value.split(this.optionsStore.options.multipleDatesSeparator);\r\n for (let i = 0; i < valueSplit.length; i++) {\r\n this.dates.setFromInput(valueSplit[i], i);\r\n }\r\n setViewDate();\r\n }\r\n catch (_a) {\r\n console.warn('TD: Something went wrong trying to set the multipleDates values from the input field.');\r\n }\r\n }\r\n else {\r\n this.dates.setFromInput(value, 0);\r\n setViewDate();\r\n }\r\n };\r\n /**\r\n * Event for when the toggle is clicked. This is a class level method so there's\r\n * something for the remove listener function.\r\n * @private\r\n */\r\n this._toggleClickEvent = () => {\r\n var _a, _b;\r\n if (((_a = this.optionsStore.element) === null || _a === void 0 ? void 0 : _a.disabled) || ((_b = this.optionsStore.input) === null || _b === void 0 ? void 0 : _b.disabled))\r\n return;\r\n this.toggle();\r\n };\r\n setupServiceLocator();\r\n this._eventEmitters = serviceLocator.locate(EventEmitters);\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n this.display = serviceLocator.locate(Display);\r\n this.dates = serviceLocator.locate(Dates);\r\n this.actions = serviceLocator.locate(Actions);\r\n if (!element) {\r\n Namespace.errorMessages.mustProvideElement();\r\n }\r\n this.optionsStore.element = element;\r\n this._initializeOptions(options, DefaultOptions, true);\r\n this.optionsStore.viewDate.setLocale(this.optionsStore.options.localization.locale);\r\n this.optionsStore.unset = true;\r\n this._initializeInput();\r\n this._initializeToggle();\r\n if (this.optionsStore.options.display.inline)\r\n this.display.show();\r\n this._eventEmitters.triggerEvent.subscribe((e) => {\r\n this._triggerEvent(e);\r\n });\r\n this._eventEmitters.viewUpdate.subscribe(() => {\r\n this._viewUpdate();\r\n });\r\n }\r\n get viewDate() {\r\n return this.optionsStore.viewDate;\r\n }\r\n // noinspection JSUnusedGlobalSymbols\r\n /**\r\n * Update the picker options. If `reset` is provide `options` will be merged with DefaultOptions instead.\r\n * @param options\r\n * @param reset\r\n * @public\r\n */\r\n updateOptions(options, reset = false) {\r\n if (reset)\r\n this._initializeOptions(options, DefaultOptions);\r\n else\r\n this._initializeOptions(options, this.optionsStore.options);\r\n this.display._rebuild();\r\n }\r\n // noinspection JSUnusedGlobalSymbols\r\n /**\r\n * Toggles the picker open or closed. If the picker is disabled, nothing will happen.\r\n * @public\r\n */\r\n toggle() {\r\n if (this._isDisabled)\r\n return;\r\n this.display.toggle();\r\n }\r\n // noinspection JSUnusedGlobalSymbols\r\n /**\r\n * Shows the picker unless the picker is disabled.\r\n * @public\r\n */\r\n show() {\r\n if (this._isDisabled)\r\n return;\r\n this.display.show();\r\n }\r\n // noinspection JSUnusedGlobalSymbols\r\n /**\r\n * Hides the picker unless the picker is disabled.\r\n * @public\r\n */\r\n hide() {\r\n this.display.hide();\r\n }\r\n // noinspection JSUnusedGlobalSymbols\r\n /**\r\n * Disables the picker and the target input field.\r\n * @public\r\n */\r\n disable() {\r\n var _a;\r\n this._isDisabled = true;\r\n // todo this might be undesired. If a dev disables the input field to\r\n // only allow using the picker, this will break that.\r\n (_a = this.optionsStore.input) === null || _a === void 0 ? void 0 : _a.setAttribute('disabled', 'disabled');\r\n this.display.hide();\r\n }\r\n // noinspection JSUnusedGlobalSymbols\r\n /**\r\n * Enables the picker and the target input field.\r\n * @public\r\n */\r\n enable() {\r\n var _a;\r\n this._isDisabled = false;\r\n (_a = this.optionsStore.input) === null || _a === void 0 ? void 0 : _a.removeAttribute('disabled');\r\n }\r\n // noinspection JSUnusedGlobalSymbols\r\n /**\r\n * Clears all the selected dates\r\n * @public\r\n */\r\n clear() {\r\n this.optionsStore.input.value = '';\r\n this.dates.clear();\r\n }\r\n // noinspection JSUnusedGlobalSymbols\r\n /**\r\n * Allows for a direct subscription to picker events, without having to use addEventListener on the element.\r\n * @param eventTypes See Namespace.Events\r\n * @param callbacks Function to call when event is triggered\r\n * @public\r\n */\r\n subscribe(eventTypes, callbacks) {\r\n if (typeof eventTypes === 'string') {\r\n eventTypes = [eventTypes];\r\n }\r\n let callBackArray;\r\n if (!Array.isArray(callbacks)) {\r\n callBackArray = [callbacks];\r\n }\r\n else {\r\n callBackArray = callbacks;\r\n }\r\n if (eventTypes.length !== callBackArray.length) {\r\n Namespace.errorMessages.subscribeMismatch();\r\n }\r\n const returnArray = [];\r\n for (let i = 0; i < eventTypes.length; i++) {\r\n const eventType = eventTypes[i];\r\n if (!Array.isArray(this._subscribers[eventType])) {\r\n this._subscribers[eventType] = [];\r\n }\r\n this._subscribers[eventType].push(callBackArray[i]);\r\n returnArray.push({\r\n unsubscribe: this._unsubscribe.bind(this, eventType, this._subscribers[eventType].length - 1),\r\n });\r\n if (eventTypes.length === 1) {\r\n return returnArray[0];\r\n }\r\n }\r\n return returnArray;\r\n }\r\n // noinspection JSUnusedGlobalSymbols\r\n /**\r\n * Hides the picker and removes event listeners\r\n */\r\n dispose() {\r\n var _a, _b, _c;\r\n this.display.hide();\r\n // this will clear the document click event listener\r\n this.display._dispose();\r\n (_a = this.optionsStore.input) === null || _a === void 0 ? void 0 : _a.removeEventListener('change', this._inputChangeEvent);\r\n if (this.optionsStore.options.allowInputToggle) {\r\n (_b = this.optionsStore.input) === null || _b === void 0 ? void 0 : _b.removeEventListener('click', this._toggleClickEvent);\r\n }\r\n (_c = this._toggle) === null || _c === void 0 ? void 0 : _c.removeEventListener('click', this._toggleClickEvent);\r\n this._subscribers = {};\r\n }\r\n /**\r\n * Updates the options to use the provided language.\r\n * THe language file must be loaded first.\r\n * @param language\r\n */\r\n locale(language) {\r\n let asked = loadedLocales[language];\r\n if (!asked)\r\n return;\r\n this.updateOptions({\r\n localization: asked,\r\n });\r\n }\r\n /**\r\n * Triggers an event like ChangeEvent when the picker has updated the value\r\n * of a selected date.\r\n * @param event Accepts a BaseEvent object.\r\n * @private\r\n */\r\n _triggerEvent(event) {\r\n var _a, _b;\r\n event.viewMode = this.optionsStore.currentView;\r\n const isChangeEvent = event.type === Namespace.events.change;\r\n if (isChangeEvent) {\r\n const { date, oldDate, isClear } = event;\r\n if ((date && oldDate && date.isSame(oldDate)) ||\r\n (!isClear && !date && !oldDate)) {\r\n return;\r\n }\r\n this._handleAfterChangeEvent(event);\r\n (_a = this.optionsStore.input) === null || _a === void 0 ? void 0 : _a.dispatchEvent(new CustomEvent(event.type, { detail: event }));\r\n (_b = this.optionsStore.input) === null || _b === void 0 ? void 0 : _b.dispatchEvent(new CustomEvent('change', { detail: event }));\r\n }\r\n this.optionsStore.element.dispatchEvent(new CustomEvent(event.type, { detail: event }));\r\n if (window.jQuery) {\r\n const $ = window.jQuery;\r\n if (isChangeEvent && this.optionsStore.input) {\r\n $(this.optionsStore.input).trigger(event);\r\n }\r\n else {\r\n $(this.optionsStore.element).trigger(event);\r\n }\r\n }\r\n this._publish(event);\r\n }\r\n _publish(event) {\r\n // return if event is not subscribed\r\n if (!Array.isArray(this._subscribers[event.type])) {\r\n return;\r\n }\r\n // Trigger callback for each subscriber\r\n this._subscribers[event.type].forEach((callback) => {\r\n callback(event);\r\n });\r\n }\r\n /**\r\n * Fires a ViewUpdate event when, for example, the month view is changed.\r\n * @private\r\n */\r\n _viewUpdate() {\r\n this._triggerEvent({\r\n type: Namespace.events.update,\r\n viewDate: this.optionsStore.viewDate.clone,\r\n });\r\n }\r\n _unsubscribe(eventName, index) {\r\n this._subscribers[eventName].splice(index, 1);\r\n }\r\n /**\r\n * Merges two Option objects together and validates options type\r\n * @param config new Options\r\n * @param mergeTo Options to merge into\r\n * @param includeDataset When true, the elements data-td attributes will be included in the\r\n * @private\r\n */\r\n _initializeOptions(config, mergeTo, includeDataset = false) {\r\n var _a, _b;\r\n let newConfig = OptionConverter.deepCopy(config);\r\n newConfig = OptionConverter._mergeOptions(newConfig, mergeTo);\r\n if (includeDataset)\r\n newConfig = OptionConverter._dataToOptions(this.optionsStore.element, newConfig);\r\n OptionConverter._validateConflicts(newConfig);\r\n newConfig.viewDate = newConfig.viewDate.setLocale(newConfig.localization.locale);\r\n if (!this.optionsStore.viewDate.isSame(newConfig.viewDate)) {\r\n this.optionsStore.viewDate = newConfig.viewDate;\r\n }\r\n /**\r\n * Sets the minimum view allowed by the picker. For example the case of only\r\n * allowing year and month to be selected but not date.\r\n */\r\n if (newConfig.display.components.year) {\r\n this.optionsStore.minimumCalendarViewMode = 2;\r\n }\r\n if (newConfig.display.components.month) {\r\n this.optionsStore.minimumCalendarViewMode = 1;\r\n }\r\n if (newConfig.display.components.date) {\r\n this.optionsStore.minimumCalendarViewMode = 0;\r\n }\r\n this.optionsStore.currentCalendarViewMode = Math.max(this.optionsStore.minimumCalendarViewMode, this.optionsStore.currentCalendarViewMode);\r\n // Update view mode if needed\r\n if (CalendarModes[this.optionsStore.currentCalendarViewMode].name !==\r\n newConfig.display.viewMode) {\r\n this.optionsStore.currentCalendarViewMode = Math.max(CalendarModes.findIndex((x) => x.name === newConfig.display.viewMode), this.optionsStore.minimumCalendarViewMode);\r\n }\r\n if ((_a = this.display) === null || _a === void 0 ? void 0 : _a.isVisible) {\r\n this.display._update('all');\r\n }\r\n if (newConfig.display.components.useTwentyfourHour === undefined) {\r\n newConfig.display.components.useTwentyfourHour = !!!((_b = newConfig.viewDate.parts()) === null || _b === void 0 ? void 0 : _b.dayPeriod);\r\n }\r\n this.optionsStore.options = newConfig;\r\n }\r\n /**\r\n * Checks if an input field is being used, attempts to locate one and sets an\r\n * event listener if found.\r\n * @private\r\n */\r\n _initializeInput() {\r\n if (this.optionsStore.element.tagName == 'INPUT') {\r\n this.optionsStore.input = this.optionsStore.element;\r\n }\r\n else {\r\n let query = this.optionsStore.element.dataset.tdTargetInput;\r\n if (query == undefined || query == 'nearest') {\r\n this.optionsStore.input =\r\n this.optionsStore.element.querySelector('input');\r\n }\r\n else {\r\n this.optionsStore.input =\r\n this.optionsStore.element.querySelector(query);\r\n }\r\n }\r\n if (!this.optionsStore.input)\r\n return;\r\n this.optionsStore.input.addEventListener('change', this._inputChangeEvent);\r\n if (this.optionsStore.options.allowInputToggle) {\r\n this.optionsStore.input.addEventListener('click', this._toggleClickEvent);\r\n }\r\n if (this.optionsStore.input.value) {\r\n this._inputChangeEvent();\r\n }\r\n }\r\n /**\r\n * Attempts to locate a toggle for the picker and sets an event listener\r\n * @private\r\n */\r\n _initializeToggle() {\r\n if (this.optionsStore.options.display.inline)\r\n return;\r\n let query = this.optionsStore.element.dataset.tdTargetToggle;\r\n if (query == 'nearest') {\r\n query = '[data-td-toggle=\"datetimepicker\"]';\r\n }\r\n this._toggle =\r\n query == undefined\r\n ? this.optionsStore.element\r\n : this.optionsStore.element.querySelector(query);\r\n this._toggle.addEventListener('click', this._toggleClickEvent);\r\n }\r\n /**\r\n * If the option is enabled this will render the clock view after a date pick.\r\n * @param e change event\r\n * @private\r\n */\r\n _handleAfterChangeEvent(e) {\r\n var _a, _b;\r\n if (\r\n // options is disabled\r\n !this.optionsStore.options.promptTimeOnDateChange ||\r\n this.optionsStore.options.display.inline ||\r\n this.optionsStore.options.display.sideBySide ||\r\n // time is disabled\r\n !this.display._hasTime ||\r\n (\r\n // clock component is already showing\r\n (_a = this.display.widget) === null || _a === void 0 ? void 0 : _a.getElementsByClassName(Namespace.css.show)[0].classList.contains(Namespace.css.timeContainer)))\r\n return;\r\n // First time ever. If useCurrent option is set to true (default), do nothing\r\n // because the first date is selected automatically.\r\n // or date didn't change (time did) or date changed because time did.\r\n if ((!e.oldDate && this.optionsStore.options.useCurrent) ||\r\n (e.oldDate && ((_b = e.date) === null || _b === void 0 ? void 0 : _b.isSame(e.oldDate)))) {\r\n return;\r\n }\r\n clearTimeout(this._currentPromptTimeTimeout);\r\n this._currentPromptTimeTimeout = setTimeout(() => {\r\n if (this.display.widget) {\r\n this._eventEmitters.action.emit({\r\n e: {\r\n currentTarget: this.display.widget.querySelector(`.${Namespace.css.switch} div`),\r\n },\r\n action: ActionTypes$1.togglePicker,\r\n });\r\n }\r\n }, this.optionsStore.options.promptTimeOnDateChangeTransitionDelay);\r\n }\r\n }\r\n /**\r\n * Whenever a locale is loaded via a plugin then store it here based on the\r\n * locale name. E.g. loadedLocales['ru']\r\n */\r\n const loadedLocales = {};\r\n // noinspection JSUnusedGlobalSymbols\r\n /**\r\n * Called from a locale plugin.\r\n * @param l locale object for localization options\r\n */\r\n const loadLocale = (l) => {\r\n if (loadedLocales[l.name])\r\n return;\r\n loadedLocales[l.name] = l.localization;\r\n };\r\n /**\r\n * A sets the global localization options to the provided locale name.\r\n * `loadLocale` MUST be called first.\r\n * @param l\r\n */\r\n const locale = (l) => {\r\n let asked = loadedLocales[l];\r\n if (!asked)\r\n return;\r\n DefaultOptions.localization = asked;\r\n };\r\n // noinspection JSUnusedGlobalSymbols\r\n /**\r\n * Called from a plugin to extend or override picker defaults.\r\n * @param plugin\r\n * @param option\r\n */\r\n const extend = function (plugin, option) {\r\n if (!plugin)\r\n return tempusDominus;\r\n if (!plugin.installed) {\r\n // install plugin only once\r\n plugin(option, { TempusDominus, Dates, Display, DateTime, ErrorMessages }, tempusDominus);\r\n plugin.installed = true;\r\n }\r\n return tempusDominus;\r\n };\r\n const version = '6.0.0';\r\n const tempusDominus = {\r\n TempusDominus,\r\n extend,\r\n loadLocale,\r\n locale,\r\n Namespace,\r\n DefaultOptions,\r\n DateTime,\r\n Unit,\r\n version\r\n };\n\n // this obviously requires the FA 6 libraries to be loaded\r\n // noinspection JSUnusedGlobalSymbols\r\n var fa_five = (option, tdClasses, tdFactory) => {\r\n const faFiveIcons = {\r\n type: 'icons',\r\n time: 'fas fa-clock',\r\n date: 'fas fa-calendar',\r\n up: 'fas fa-arrow-up',\r\n down: 'fas fa-arrow-down',\r\n previous: 'fas fa-chevron-left',\r\n next: 'fas fa-chevron-right',\r\n today: 'fas fa-calendar-check',\r\n clear: 'fas fa-trash',\r\n close: 'fas fa-times',\r\n };\r\n tdFactory.DefaultOptions.display.icons = faFiveIcons;\r\n };\n\n var luxon_parse = (option, tdClasses, tdFactory) => {\r\n tdClasses.Dates.prototype.setFromInput = function (value, index) {\r\n if (this.optionsStore.options.meta.format) {\r\n let options = {\r\n locale: this.optionsStore.options.localization.locale\r\n };\r\n let parsedDate = new tdFactory.DateTime(luxon__namespace.DateTime.fromFormat(value, this.optionsStore.options.meta.format, options).toJSDate());\r\n // Check if the date is valid (An invalid date object returns NaN for getTime() and NaN is the only object not strictly equal to itself.)\r\n if (parsedDate && parsedDate.getTime() === parsedDate.getTime()) {\r\n let date = tdFactory.DateTime.convert(parsedDate, this.optionsStore.options.localization.locale);\r\n this.setValue(date, index);\r\n }\r\n else {\r\n console.error('Luxon failed to parse the input date.');\r\n }\r\n }\r\n else {\r\n console.error('Missing format.');\r\n }\r\n };\r\n tdClasses.Dates.prototype.formatInput = function (date) {\r\n if (this.optionsStore.options.meta.format) {\r\n let options = {\r\n locale: this.optionsStore.options.localization.locale\r\n };\r\n return date ? luxon__namespace.DateTime.fromJSDate(date, options).toFormat(this.optionsStore.options.meta.format) : \"\";\r\n }\r\n else {\r\n console.error('Missing format.');\r\n }\r\n };\r\n };\n\n /*global $ */\n\n //window.tempusDominus.Namespace.Events\n\n tempusDominus.extend(luxon_parse); //***\n tempusDominus.extend(fa_five); //*** for v2022 only\n\n /*!\n * Tempus Dominus v6.0.0 (https://getdatepicker.com/)\n * Copyright 2013-2021 Jonathan Peterson\n * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE)\n */\n tempusDominus.jQueryInterface = function (option, argument) {\n if (this.length === 1) {\n return tempusDominus.jQueryHandleThis(this, option, argument);\n }\n // \"this\" is jquery here\n return this.each(function () {\n tempusDominus.jQueryHandleThis(this, option, argument);\n });\n };\n\n tempusDominus.jQueryHandleThis = function (me, option, argument) {\n let data = $__default[\"default\"](me).data(tempusDominus.Namespace.dataKey);\n if (typeof option === 'object') {\n option = $__default[\"default\"].extend({}, tempusDominus.DefaultOptions, option);\n }\n\n if (!data) {\n data = new tempusDominus.TempusDominus($__default[\"default\"](me)[0], option);\n $__default[\"default\"](me).data(tempusDominus.Namespace.dataKey, data);\n }\n\n if (typeof option === 'string') {\n if (data[option] === undefined) {\n throw new Error(`No method named \"${option}\"`);\n }\n if (argument === undefined) {\n return data[option]();\n } else {\n if (option === 'date') {\n data.isDateUpdateThroughDateOptionFromClientCode = true;\n }\n const ret = data[option](argument);\n data.isDateUpdateThroughDateOptionFromClientCode = false;\n return ret;\n }\n }\n };\n\n tempusDominus.getSelectorFromElement = function ($element) {\n let selector = $element.data('target'),\n $selector;\n\n if (!selector) {\n selector = $element.attr('href') || '';\n selector = /^#[a-z]/i.test(selector) ? selector : null;\n }\n $selector = $__default[\"default\"](selector);\n if ($selector.length === 0) {\n return $element;\n }\n\n if (!$selector.data(tempusDominus.Namespace.dataKey)) {\n $selector.data(tempusDominus.Namespace.dataKey, $__default[\"default\"].extend({}, $selector.data(), $__default[\"default\"](this).data())); //***\n }\n\n return $selector;\n };\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n //*** $(document)\n // .on(\n // `click${tempusDominus.Namespace.events.key}.data-api`,\n // `[data-toggle=\"${tempusDominus.Namespace.dataKey}\"]`,\n // function () {\n // const $originalTarget = $(this),\n // $target = tempusDominus.getSelectorFromElement($originalTarget),\n // config = $target.data(tempusDominus.Namespace.dataKey);\n // if ($target.length === 0) {\n // return;\n // }\n // if (\n // config._options.allowInputToggle &&\n // $originalTarget.is('input[data-toggle=\"datetimepicker\"]')\n // ) {\n // return;\n // }\n // tempusDominus.jQueryInterface.call($target, 'toggle');\n // }\n // )\n // .on(\n // tempusDominus.Namespace.events.change,\n // `.${tempusDominus.Namespace.NAME}-input`,\n // function (event) {\n // const $target = tempusDominus.getSelectorFromElement($(this));\n // if ($target.length === 0 || event.isInit) {\n // return;\n // }\n // tempusDominus.jQueryInterface.call($target, '_change', event);\n // }\n // )\n // .on(\n // tempusDominus.Namespace.events.blur,\n // `.${tempusDominus.Namespace.NAME}-input`,\n // function (event) {\n // const $target = tempusDominus.getSelectorFromElement($(this)),\n // config = $target.data(tempusDominus.Namespace.dataKey);\n // if ($target.length === 0) {\n // return;\n // }\n // if (config._options.debug || window.debug) {\n // return;\n // }\n // tempusDominus.jQueryInterface.call($target, 'hide', event);\n // }\n // )\n // /*.on(tempusDominus.Namespace.Events.keydown, `.${tempusDominus.Namespace.NAME}-input`, function (event) {\n // const $target = tempusDominus.getSelectorFromElement($(this));\n // if ($target.length === 0) {\n // return;\n // }\n // tempusDominus.jQueryInterface.call($target, '_keydown', event);\n // })\n // .on(tempusDominus.Namespace.Events.keyup, `.${tempusDominus.Namespace.NAME}-input`, function (event) {\n // const $target = tempusDominus.getSelectorFromElement($(this));\n // if ($target.length === 0) {\n // return;\n // }\n // tempusDominus.jQueryInterface.call($target, '_keyup', event);\n // })*/\n // .on(\n // tempusDominus.Namespace.events.focus,\n // `.${tempusDominus.Namespace.NAME}-input`,\n // function (event) {\n // const $target = tempusDominus.getSelectorFromElement($(this)),\n // config = $target.data(tempusDominus.Namespace.dataKey);\n // if ($target.length === 0) {\n // return;\n // }\n // if (!config._options.allowInputToggle) {\n // return;\n // }\n // tempusDominus.jQueryInterface.call($target, 'show', event);\n // }\n // );\n const name = 'tempusDominus';\n const JQUERY_NO_CONFLICT = $__default[\"default\"].fn[name];\n $__default[\"default\"].fn[name] = tempusDominus.jQueryInterface;\n $__default[\"default\"].fn[name].Constructor = tempusDominus.TempusDominus;\n $__default[\"default\"].fn[name].noConflict = function () {\n $__default[\"default\"].fn[name] = JQUERY_NO_CONFLICT;\n return tempusDominus.jQueryInterface;\n };\n\n return tempusDominus;\n\n})(jQuery, Popper, luxon);\n//# sourceMappingURL=tempus-dominus.js.map\n"],"mappings":"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"}