{"version":3,"file":"tempus-dominus.js","sources":["../../src/js/datetime.ts","../../src/js/utilities/errors.ts","../../src/js/utilities/namespace.ts","../../src/js/utilities/calendar-modes.ts","../../src/js/utilities/default-options.ts","../../src/js/utilities/options.ts","../../src/js/utilities/service-locator.ts","../../src/js/validation.ts","../../src/js/utilities/event-emitter.ts","../../src/js/dates.ts","../../src/js/utilities/action-types.ts","../../src/js/display/calendar/date-display.ts","../../src/js/display/calendar/month-display.ts","../../src/js/display/calendar/year-display.ts","../../src/js/display/calendar/decade-display.ts","../../src/js/display/time/time-display.ts","../../src/js/display/time/hour-display.ts","../../src/js/display/time/minute-display.ts","../../src/js/display/time/second-display.ts","../../src/js/display/collapse.ts","../../src/js/display/index.ts","../../src/js/actions.ts","../../src/js/tempus-dominus.ts"],"sourcesContent":["export enum Unit {\r\n seconds = 'seconds',\r\n minutes = 'minutes',\r\n hours = 'hours',\r\n date = 'date',\r\n month = 'month',\r\n year = 'year',\r\n}\r\n\r\nexport interface DateTimeFormatOptions extends Intl.DateTimeFormatOptions {\r\n timeStyle?: 'short' | 'medium' | 'long';\r\n dateStyle?: 'short' | 'medium' | 'long' | 'full';\r\n numberingSystem?: string;\r\n}\r\n\r\nexport const getFormatByUnit = (unit: Unit): object => {\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/**\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\nexport class DateTime extends Date {\r\n /**\r\n * Used with Intl.DateTimeFormat\r\n */\r\n locale = 'default';\r\n\r\n /**\r\n * Chainable way to set the {@link locale}\r\n * @param value\r\n */\r\n setLocale(value: string): this {\r\n this.locale = value;\r\n return this;\r\n }\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 */\r\n static convert(date: Date, locale: string = 'default'): DateTime {\r\n if (!date) throw new Error(`A date is required`);\r\n return new DateTime(\r\n date.getFullYear(),\r\n date.getMonth(),\r\n date.getDate(),\r\n date.getHours(),\r\n date.getMinutes(),\r\n date.getSeconds(),\r\n date.getMilliseconds()\r\n ).setLocale(locale);\r\n }\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(\r\n this.year,\r\n this.month,\r\n this.date,\r\n this.hours,\r\n this.minutes,\r\n this.seconds,\r\n this.getMilliseconds()\r\n ).setLocale(this.locale);\r\n }\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: Unit | 'weekDay', startOfTheWeek = 0): this {\r\n if (this[unit] === undefined) 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) break;\r\n let goBack = this.weekDay;\r\n if (startOfTheWeek !== 0 && this.weekDay === 0) 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 /**\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 */\r\n endOf(unit: Unit | 'weekDay', startOfTheWeek = 0): this {\r\n if (this[unit] === undefined) 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 /**\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: number, unit: Unit): this {\r\n if (this[unit] === undefined) throw new Error(`Unit '${unit}' is not valid`);\r\n this[unit] += value;\r\n return this;\r\n }\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: DateTimeFormatOptions, locale = this.locale): string {\r\n return new Intl.DateTimeFormat(locale, template).format(this);\r\n }\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: DateTime, unit?: Unit): boolean {\r\n if (!unit) return this.valueOf() < compare.valueOf();\r\n if (this[unit] === undefined) throw new Error(`Unit '${unit}' is not valid`);\r\n return (\r\n this.clone.startOf(unit).valueOf() < compare.clone.startOf(unit).valueOf()\r\n );\r\n }\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: DateTime, unit?: Unit): boolean {\r\n if (!unit) return this.valueOf() > compare.valueOf();\r\n if (this[unit] === undefined) throw new Error(`Unit '${unit}' is not valid`);\r\n return (\r\n this.clone.startOf(unit).valueOf() > compare.clone.startOf(unit).valueOf()\r\n );\r\n }\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: DateTime, unit?: Unit): boolean {\r\n if (!unit) return this.valueOf() === compare.valueOf();\r\n if (this[unit] === undefined) throw new Error(`Unit '${unit}' is not valid`);\r\n compare = DateTime.convert(compare);\r\n return (\r\n this.clone.startOf(unit).valueOf() === compare.startOf(unit).valueOf()\r\n );\r\n }\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(\r\n left: DateTime,\r\n right: DateTime,\r\n unit?: Unit,\r\n inclusivity: '()' | '[]' | '(]' | '[)' = '()'\r\n ): boolean {\r\n if (unit && this[unit] === undefined) throw new Error(`Unit '${unit}' is not valid`);\r\n const leftInclusivity = inclusivity[0] === '(';\r\n const rightInclusivity = inclusivity[1] === ')';\r\n\r\n return (\r\n ((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\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(\r\n locale = this.locale,\r\n template: any = { dateStyle: 'full', timeStyle: 'long' }\r\n ): any {\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 /**\r\n * Shortcut to Date.getSeconds()\r\n */\r\n get seconds(): number {\r\n return this.getSeconds();\r\n }\r\n\r\n /**\r\n * Shortcut to Date.setSeconds()\r\n */\r\n set seconds(value: number) {\r\n this.setSeconds(value);\r\n }\r\n\r\n /**\r\n * Returns two digit hours\r\n */\r\n get secondsFormatted(): string {\r\n return this.seconds < 10 ? `0${this.seconds}` : `${this.seconds}`;\r\n }\r\n\r\n /**\r\n * Shortcut to Date.getMinutes()\r\n */\r\n get minutes(): number {\r\n return this.getMinutes();\r\n }\r\n\r\n /**\r\n * Shortcut to Date.setMinutes()\r\n */\r\n set minutes(value: number) {\r\n this.setMinutes(value);\r\n }\r\n\r\n /**\r\n * Returns two digit minutes\r\n */\r\n get minutesFormatted(): string {\r\n return this.minutes < 10 ? `0${this.minutes}` : `${this.minutes}`;\r\n }\r\n\r\n /**\r\n * Shortcut to Date.getHours()\r\n */\r\n get hours(): number {\r\n return this.getHours();\r\n }\r\n\r\n /**\r\n * Shortcut to Date.setHours()\r\n */\r\n set hours(value: number) {\r\n this.setHours(value);\r\n }\r\n\r\n /**\r\n * Returns two digit hours\r\n */\r\n get hoursFormatted(): string {\r\n let formatted = this.format({ hour: '2-digit', hour12: false });\r\n if (formatted === '24') formatted = '00';\r\n return formatted;\r\n }\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(): string {\r\n let hour = this.parts().hour;\r\n if (hour.length === 1) hour = `0${hour}`;\r\n return hour;\r\n }\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: string = this.locale): string {\r\n return new Intl.DateTimeFormat(locale, {\r\n hour: 'numeric',\r\n hour12: true\r\n } as any)\r\n .formatToParts(this)\r\n .find((p) => p.type === 'dayPeriod')?.value;\r\n }\r\n\r\n /**\r\n * Shortcut to Date.getDate()\r\n */\r\n get date(): number {\r\n return this.getDate();\r\n }\r\n\r\n /**\r\n * Shortcut to Date.setDate()\r\n */\r\n set date(value: number) {\r\n this.setDate(value);\r\n }\r\n\r\n /**\r\n * Return two digit date\r\n */\r\n get dateFormatted(): string {\r\n return this.date < 10 ? `0${this.date}` : `${this.date}`;\r\n }\r\n\r\n /**\r\n * Shortcut to Date.getDay()\r\n */\r\n get weekDay(): number {\r\n return this.getDay();\r\n }\r\n\r\n /**\r\n * Shortcut to Date.getMonth()\r\n */\r\n get month(): number {\r\n return this.getMonth();\r\n }\r\n\r\n /**\r\n * Shortcut to Date.setMonth()\r\n */\r\n set month(value: number) {\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 /**\r\n * Return two digit, human expected month. E.g. January = 1, December = 12\r\n */\r\n get monthFormatted(): string {\r\n return this.month + 1 < 10 ? `0${this.month}` : `${this.month}`;\r\n }\r\n\r\n /**\r\n * Shortcut to Date.getFullYear()\r\n */\r\n get year(): number {\r\n return this.getFullYear();\r\n }\r\n\r\n /**\r\n * Shortcut to Date.setFullYear()\r\n */\r\n set year(value: number) {\r\n this.setFullYear(value);\r\n }\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(): number {\r\n const ordinal = this.computeOrdinal(),\r\n weekday = this.getUTCDay();\r\n\r\n let weekNumber = Math.floor((ordinal - weekday + 10) / 7);\r\n\r\n if (weekNumber < 1) {\r\n weekNumber = this.weeksInWeekYear(this.year - 1);\r\n } else if (weekNumber > this.weeksInWeekYear(this.year)) {\r\n weekNumber = 1;\r\n }\r\n\r\n return weekNumber;\r\n }\r\n\r\n weeksInWeekYear(weekYear) {\r\n const p1 =\r\n (weekYear +\r\n Math.floor(weekYear / 4) -\r\n Math.floor(weekYear / 100) +\r\n Math.floor(weekYear / 400)) %\r\n 7,\r\n last = weekYear - 1,\r\n p2 =\r\n (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\r\n get isLeapYear() {\r\n return this.year % 4 === 0 && (this.year % 100 !== 0 || this.year % 400 === 0);\r\n }\r\n\r\n private computeOrdinal() {\r\n return this.date + (this.isLeapYear ? this.leapLadder : this.nonLeapLadder)[this.month];\r\n }\r\n\r\n private nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\r\n private leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\r\n}\r\n","import Namespace from './namespace';\r\n\r\nexport class TdError extends Error {\r\n code: number;\r\n}\r\n\r\nexport class ErrorMessages {\r\n private base = 'TD:';\r\n\r\n //#region out to console\r\n\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: string) {\r\n const error = new TdError(\r\n `${this.base} Unexpected option: ${optionName} does not match a known option.`\r\n );\r\n error.code = 1;\r\n throw error;\r\n }\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: string[]) {\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 /**\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(\r\n optionName: string,\r\n badValue: string,\r\n validOptions: string[]\r\n ) {\r\n const error = new TdError(\r\n `${\r\n this.base\r\n } Unexpected option value: ${optionName} does not accept a value of \"${badValue}\". Valid values are: ${validOptions.join(\r\n ', '\r\n )}`\r\n );\r\n error.code = 2;\r\n throw error;\r\n }\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: string, badType: string, expectedType: string) {\r\n const error = new TdError(\r\n `${this.base} Mismatch types: ${optionName} has a type of ${badType} instead of the required ${expectedType}`\r\n );\r\n error.code = 3;\r\n throw error;\r\n }\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: string, lower: number, upper: number) {\r\n const error = new TdError(\r\n `${this.base} ${optionName} expected an array of number between ${lower} and ${upper}.`\r\n );\r\n error.code = 4;\r\n throw error;\r\n }\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 invalide 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: string, date: any, soft = false) {\r\n const error = new TdError(\r\n `${this.base} Could not correctly parse \"${date}\" to a date for ${optionName}.`\r\n );\r\n error.code = 5;\r\n if (!soft) throw error;\r\n console.warn(error);\r\n }\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 /**\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(\r\n `${this.base} The subscribed events does not match the number of callbacks`\r\n );\r\n error.code = 7;\r\n throw error;\r\n }\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?: string) {\r\n const error = new TdError(\r\n `${this.base} A configuration value conflicts with another rule. ${message}`\r\n );\r\n error.code = 8;\r\n throw error;\r\n }\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(\r\n `${this.base} Using a string for date options is not recommended unless you specify an ISO string.`\r\n );\r\n }\r\n\r\n //#endregion\r\n\r\n //#region used with notify.error\r\n\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 failedToSetInvalidDate = 'Failed to set invalid date';\r\n\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 failedToParseInput = 'Failed parse input field';\r\n\r\n //#endregion\r\n}\r\n","import { ErrorMessages } from './errors';\n// this is not the way I want this to stay but nested classes seemed to blown up once its compiled.\nconst NAME = 'tempus-dominus',\n version = '6.0.0-beta4',\n dataKey = 'td';\n\n/**\n * Events\n */\nclass Events {\n key = `.${dataKey}`;\n\n /**\n * Change event. Fired when the user selects a date.\n * See also EventTypes.ChangeEvent\n */\n change = `change${this.key}`;\n\n /**\n * Emit when the view changes for example from month view to the year view.\n * See also EventTypes.ViewUpdateEvent\n */\n update = `update${this.key}`;\n\n /**\n * Emits when a selected date or value from the input field fails to meet the provided validation rules.\n * See also EventTypes.FailEvent\n */\n error = `error${this.key}`;\n\n /**\n * Show event\n * @event Events#show\n */\n show = `show${this.key}`;\n\n /**\n * Hide event\n * @event Events#hide\n */\n hide = `hide${this.key}`;\n\n // blur and focus are used in the jQuery provider but are otherwise unused.\n // keyup/down will be used later for keybinding options\n\n blur = `blur${this.key}`;\n focus = `focus${this.key}`;\n keyup = `keyup${this.key}`;\n keydown = `keydown${this.key}`;\n}\n\nclass Css {\n /**\n * The outer element for the widget.\n */\n widget = `${NAME}-widget`;\n\n /**\n * Hold the previous, next and switcher divs\n */\n calendarHeader = 'calendar-header';\n\n /**\n * The element for the action to change the calendar view. E.g. month -> year.\n */\n switch = 'picker-switch';\n\n /**\n * The elements for all of the toolbar options\n */\n toolbar = 'toolbar';\n\n /**\n * Disables the hover and rounding affect.\n */\n noHighlight = 'no-highlight';\n\n /**\n * Applied to the widget element when the side by side option is in use.\n */\n sideBySide = 'timepicker-sbs';\n\n /**\n * The element for the action to change the calendar view, e.g. August -> July\n */\n previous = 'previous';\n\n /**\n * The element for the action to change the calendar view, e.g. August -> September\n */\n next = 'next';\n\n /**\n * Applied to any action that would violate any restriction options. ALso applied\n * to an input field if the disabled function is called.\n */\n disabled = 'disabled';\n\n /**\n * Applied to any date that is less than requested view,\n * e.g. the last day of the previous month.\n */\n old = 'old';\n\n /**\n * Applied to any date that is greater than of requested view,\n * e.g. the last day of the previous month.\n */\n new = 'new';\n\n /**\n * Applied to any date that is currently selected.\n */\n active = 'active';\n\n //#region date element\n\n /**\n * The outer most element for the calendar view.\n */\n dateContainer = 'date-container';\n\n /**\n * The outer most element for the decades view.\n */\n decadesContainer = `${this.dateContainer}-decades`;\n\n /**\n * Applied to elements within the decades container, e.g. 2020, 2030\n */\n decade = 'decade';\n\n /**\n * The outer most element for the years view.\n */\n yearsContainer = `${this.dateContainer}-years`;\n\n /**\n * Applied to elements within the years container, e.g. 2021, 2021\n */\n year = 'year';\n\n /**\n * The outer most element for the month view.\n */\n monthsContainer = `${this.dateContainer}-months`;\n\n /**\n * Applied to elements within the month container, e.g. January, February\n */\n month = 'month';\n\n /**\n * The outer most element for the calendar view.\n */\n daysContainer = `${this.dateContainer}-days`;\n\n /**\n * Applied to elements within the day container, e.g. 1, 2..31\n */\n day = 'day';\n\n /**\n * If display.calendarWeeks is enabled, a column displaying the week of year\n * is shown. This class is applied to each cell in that column.\n */\n calendarWeeks = 'cw';\n\n /**\n * Applied to the first row of the calendar view, e.g. Sunday, Monday\n */\n dayOfTheWeek = 'dow';\n\n /**\n * Applied to the current date on the calendar view.\n */\n today = 'today';\n\n /**\n * Applied to the locale's weekend dates on the calendar view, e.g. Sunday, Saturday\n */\n weekend = 'weekend';\n\n //#endregion\n\n //#region time element\n\n /**\n * The outer most element for all time related elements.\n */\n timeContainer = 'time-container';\n\n /**\n * Applied the separator columns between time elements, e.g. hour *:* minute *:* second\n */\n separator = 'separator';\n\n /**\n * The outer most element for the clock view.\n */\n clockContainer = `${this.timeContainer}-clock`;\n\n /**\n * The outer most element for the hours selection view.\n */\n hourContainer = `${this.timeContainer}-hour`;\n\n /**\n * The outer most element for the minutes selection view.\n */\n minuteContainer = `${this.timeContainer}-minute`;\n\n /**\n * The outer most element for the seconds selection view.\n */\n secondContainer = `${this.timeContainer}-second`;\n\n /**\n * Applied to each element in the hours selection view.\n */\n hour = 'hour';\n\n /**\n * Applied to each element in the minutes selection view.\n */\n minute = 'minute';\n\n /**\n * Applied to each element in the seconds selection view.\n */\n second = 'second';\n\n /**\n * Applied AM/PM toggle button.\n */\n toggleMeridiem = 'toggleMeridiem';\n\n //#endregion\n\n //#region collapse\n\n /**\n * Applied the element of the current view mode, e.g. calendar or clock.\n */\n show = 'show';\n\n /**\n * Applied to the currently showing view mode during a transition\n * between calendar and clock views\n */\n collapsing = 'td-collapsing';\n\n /**\n * Applied to the currently hidden view mode.\n */\n collapse = 'td-collapse';\n\n //#endregion\n\n /**\n * Applied to the widget when the option display.inline is enabled.\n */\n inline = 'inline';\n}\n\nexport default class Namespace {\n static NAME = NAME;\n // noinspection JSUnusedGlobalSymbols\n static version = version;\n static dataKey = dataKey;\n\n static events = new Events();\n\n static css = new Css();\n\n static errorMessages = new ErrorMessages();\n}\n","import { Unit } from '../datetime';\nimport Namespace from './namespace';\nimport ViewMode from './view-mode';\n\nconst CalendarModes: {\n name: keyof ViewMode;\n className: string;\n unit: Unit;\n step: number;\n}[] = [\n {\n name: 'calendar',\n className: Namespace.css.daysContainer,\n unit: Unit.month,\n step: 1,\n },\n {\n name: 'months',\n className: Namespace.css.monthsContainer,\n unit: Unit.year,\n step: 1,\n },\n {\n name: 'years',\n className: Namespace.css.yearsContainer,\n unit: Unit.year,\n step: 10,\n },\n {\n name: 'decades',\n className: Namespace.css.decadesContainer,\n unit: Unit.year,\n step: 100,\n },\n];\n\nexport default CalendarModes;\n","import Options from './options';\nimport { DateTime } from '../datetime';\n\nconst DefaultOptions: Options = {\n restrictions: {\n minDate: undefined,\n maxDate: undefined,\n disabledDates: [],\n enabledDates: [],\n daysOfWeekDisabled: [],\n disabledTimeIntervals: [],\n disabledHours: [],\n enabledHours: []\n },\n display: {\n icons: {\n type: 'icons',\n time: 'fa-solid fa-clock',\n date: 'fa-solid fa-calendar',\n up: 'fa-solid fa-arrow-up',\n down: 'fa-solid fa-arrow-down',\n previous: 'fa-solid fa-chevron-left',\n next: 'fa-solid fa-chevron-right',\n today: 'fa-solid fa-calendar-check',\n clear: 'fa-solid fa-trash',\n close: 'fa-solid fa-xmark'\n },\n sideBySide: false,\n calendarWeeks: false,\n viewMode: 'calendar',\n toolbarPlacement: 'bottom',\n keepOpen: false,\n buttons: {\n today: false,\n clear: false,\n close: false\n },\n components: {\n calendar: true,\n date: true,\n month: true,\n year: true,\n decades: true,\n clock: true,\n hours: true,\n minutes: true,\n seconds: false,\n useTwentyfourHour: false\n },\n inline: false\n },\n stepping: 1,\n useCurrent: true,\n defaultDate: undefined,\n localization: {\n today: 'Go to today',\n clear: 'Clear selection',\n close: 'Close the picker',\n selectMonth: 'Select Month',\n previousMonth: 'Previous Month',\n nextMonth: 'Next Month',\n selectYear: 'Select Year',\n previousYear: 'Previous Year',\n nextYear: 'Next Year',\n selectDecade: 'Select Decade',\n previousDecade: 'Previous Decade',\n nextDecade: 'Next Decade',\n previousCentury: 'Previous Century',\n nextCentury: 'Next Century',\n pickHour: 'Pick Hour',\n incrementHour: 'Increment Hour',\n decrementHour: 'Decrement Hour',\n pickMinute: 'Pick Minute',\n incrementMinute: 'Increment Minute',\n decrementMinute: 'Decrement Minute',\n pickSecond: 'Pick Second',\n incrementSecond: 'Increment Second',\n decrementSecond: 'Decrement Second',\n toggleMeridiem: 'Toggle Meridiem',\n selectTime: 'Select Time',\n selectDate: 'Select Date',\n dayViewHeaderFormat: { month: 'long', year: '2-digit' },\n locale: 'default',\n startOfTheWeek: 0\n },\n keepInvalid: false,\n debug: false,\n allowInputToggle: false,\n viewDate: new DateTime(),\n multipleDates: false,\n multipleDatesSeparator: '; ',\n promptTimeOnDateChange: false,\n promptTimeOnDateChangeTransitionDelay: 200,\n meta: {},\n container: undefined\n};\n\nexport default DefaultOptions;","import { DateTime, DateTimeFormatOptions } from '../datetime';\nimport Namespace from './namespace';\nimport ViewMode from './view-mode';\nimport CalendarModes from './calendar-modes';\nimport DefaultOptions from './default-options';\n\nexport class OptionsStore {\n options: Options;\n element: HTMLElement;\n viewDate = new DateTime();\n input: HTMLInputElement;\n unset: boolean;\n private _currentCalendarViewMode = 0;\n get currentCalendarViewMode() {\n return this._currentCalendarViewMode;\n }\n\n set currentCalendarViewMode(value) {\n this._currentCalendarViewMode = value;\n this.currentView = CalendarModes[value].name;\n }\n\n /**\n * When switching back to the calendar from the clock,\n * this sets currentView to the correct calendar view.\n */\n refreshCurrentView() {\n this.currentView = CalendarModes[this.currentCalendarViewMode].name;\n }\n\n minimumCalendarViewMode = 0;\n currentView: keyof ViewMode = 'calendar';\n}\n\nexport default interface Options {\n restrictions?: {\n minDate?: DateTime;\n maxDate?: DateTime;\n enabledDates?: DateTime[];\n disabledDates?: DateTime[];\n enabledHours?: number[];\n disabledHours?: number[];\n disabledTimeIntervals?: { from: DateTime; to: DateTime }[];\n daysOfWeekDisabled?: number[];\n };\n display?: {\n toolbarPlacement?: 'top' | 'bottom';\n components?: {\n calendar?: boolean;\n date?: boolean;\n month?: boolean;\n year?: boolean;\n decades?: boolean;\n clock?: boolean;\n hours?: boolean;\n minutes?: boolean;\n seconds?: boolean;\n useTwentyfourHour?: boolean;\n };\n buttons?: { today?: boolean; close?: boolean; clear?: boolean };\n calendarWeeks?: boolean;\n icons?: {\n date?: string;\n next?: string;\n previous?: string;\n today?: string;\n clear?: string;\n time?: string;\n up?: string;\n type?: 'icons' | 'sprites';\n down?: string;\n close?: string;\n };\n viewMode?: keyof ViewMode | undefined;\n sideBySide?: boolean;\n inline?: boolean;\n keepOpen?: boolean;\n };\n stepping?: number;\n useCurrent?: boolean;\n defaultDate?: DateTime;\n localization?: {\n nextMonth?: string;\n pickHour?: string;\n incrementSecond?: string;\n nextDecade?: string;\n selectDecade?: string;\n dayViewHeaderFormat?: DateTimeFormatOptions;\n decrementHour?: string;\n selectDate?: string;\n incrementHour?: string;\n previousCentury?: string;\n decrementSecond?: string;\n today?: string;\n previousMonth?: string;\n selectYear?: string;\n pickSecond?: string;\n nextCentury?: string;\n close?: string;\n incrementMinute?: string;\n selectTime?: string;\n clear?: string;\n toggleMeridiem?: string;\n selectMonth?: string;\n decrementMinute?: string;\n pickMinute?: string;\n nextYear?: string;\n previousYear?: string;\n previousDecade?: string;\n locale?: string;\n startOfTheWeek?: number;\n };\n keepInvalid?: boolean;\n debug?: boolean;\n allowInputToggle?: boolean;\n viewDate?: DateTime;\n multipleDates?: boolean;\n multipleDatesSeparator?: string;\n promptTimeOnDateChange?: boolean;\n promptTimeOnDateChangeTransitionDelay?: number;\n meta?: {};\n container?: HTMLElement;\n}\n\nexport class OptionConverter {\n static _mergeOptions(providedOptions: Options, mergeTo: Options): Options {\n const newOptions = {} as Options;\n let path = '';\n const ignoreProperties = ['meta', 'dayViewHeaderFormat', 'container'];\n\n //see if the options specify a locale\n const locale =\n mergeTo.localization.locale !== 'default'\n ? mergeTo.localization.locale\n : providedOptions?.localization?.locale || 'default';\n\n const processKey = (key, value, providedType, defaultType) => {\n switch (key) {\n case 'defaultDate': {\n const dateTime = this.dateConversion(value, 'defaultDate');\n if (dateTime !== undefined) {\n dateTime.setLocale(locale);\n return dateTime;\n }\n Namespace.errorMessages.typeMismatch(\n 'defaultDate',\n providedType,\n 'DateTime or Date'\n );\n break;\n }\n case 'viewDate': {\n const dateTime = this.dateConversion(value, 'viewDate');\n if (dateTime !== undefined) {\n dateTime.setLocale(locale);\n return dateTime;\n }\n Namespace.errorMessages.typeMismatch(\n 'viewDate',\n providedType,\n 'DateTime or Date'\n );\n break;\n }\n case 'minDate': {\n if (value === undefined) {\n return value;\n }\n const dateTime = this.dateConversion(value, 'restrictions.minDate');\n if (dateTime !== undefined) {\n dateTime.setLocale(locale);\n return dateTime;\n }\n Namespace.errorMessages.typeMismatch(\n 'restrictions.minDate',\n providedType,\n 'DateTime or Date'\n );\n break;\n }\n case 'maxDate': {\n if (value === undefined) {\n return value;\n }\n const dateTime = this.dateConversion(value, 'restrictions.maxDate');\n if (dateTime !== undefined) {\n dateTime.setLocale(locale);\n return dateTime;\n }\n Namespace.errorMessages.typeMismatch(\n 'restrictions.maxDate',\n providedType,\n 'DateTime or Date'\n );\n break;\n }\n case 'disabledHours':\n if (value === undefined) {\n return [];\n }\n this._typeCheckNumberArray(\n 'restrictions.disabledHours',\n value,\n providedType\n );\n if (value.filter((x) => x < 0 || x > 24).length > 0)\n Namespace.errorMessages.numbersOutOfRage(\n 'restrictions.disabledHours',\n 0,\n 23\n );\n return value;\n case 'enabledHours':\n if (value === undefined) {\n return [];\n }\n this._typeCheckNumberArray(\n 'restrictions.enabledHours',\n value,\n providedType\n );\n if (value.filter((x) => x < 0 || x > 24).length > 0)\n Namespace.errorMessages.numbersOutOfRage(\n 'restrictions.enabledHours',\n 0,\n 23\n );\n return value;\n case 'daysOfWeekDisabled':\n if (value === undefined) {\n return [];\n }\n this._typeCheckNumberArray(\n 'restrictions.daysOfWeekDisabled',\n value,\n providedType\n );\n if (value.filter((x) => x < 0 || x > 6).length > 0)\n Namespace.errorMessages.numbersOutOfRage(\n 'restrictions.daysOfWeekDisabled',\n 0,\n 6\n );\n return value;\n case 'enabledDates':\n if (value === undefined) {\n return [];\n }\n this._typeCheckDateArray(\n 'restrictions.enabledDates',\n value,\n providedType,\n locale\n );\n return value;\n case 'disabledDates':\n if (value === undefined) {\n return [];\n }\n this._typeCheckDateArray(\n 'restrictions.disabledDates',\n value,\n providedType,\n locale\n );\n return value;\n case 'disabledTimeIntervals':\n if (value === undefined) {\n return [];\n }\n if (!Array.isArray(value)) {\n Namespace.errorMessages.typeMismatch(\n key,\n providedType,\n 'array of { from: DateTime|Date, to: DateTime|Date }'\n );\n }\n const valueObject = value as { from: any; to: any }[];\n for (let i = 0; i < valueObject.length; i++) {\n Object.keys(valueObject[i]).forEach((vk) => {\n const subOptionName = `${key}[${i}].${vk}`;\n let d = valueObject[i][vk];\n const dateTime = this.dateConversion(d, subOptionName);\n if (!dateTime) {\n Namespace.errorMessages.typeMismatch(\n subOptionName,\n typeof d,\n 'DateTime or Date'\n );\n }\n dateTime.setLocale(locale);\n valueObject[i][vk] = dateTime;\n });\n }\n return valueObject;\n case 'toolbarPlacement':\n case 'type':\n case 'viewMode':\n const optionValues = {\n toolbarPlacement: ['top', 'bottom', 'default'],\n type: ['icons', 'sprites'],\n viewMode: ['clock', 'calendar', 'months', 'years', 'decades'],\n };\n const keyOptions = optionValues[key];\n if (!keyOptions.includes(value))\n Namespace.errorMessages.unexpectedOptionValue(\n path.substring(1),\n value,\n keyOptions\n );\n\n return value;\n case 'meta':\n case 'dayViewHeaderFormat':\n return value;\n case 'container':\n if (\n value &&\n !(\n value instanceof HTMLElement ||\n value instanceof Element ||\n value?.appendChild\n )\n ) {\n Namespace.errorMessages.typeMismatch(\n path.substring(1),\n typeof value,\n 'HTMLElement'\n );\n }\n return value;\n default:\n switch (defaultType) {\n case 'boolean':\n return value === 'true' || value === true;\n case 'number':\n return +value;\n case 'string':\n return value.toString();\n case 'object':\n return {};\n case 'function':\n return value;\n default:\n Namespace.errorMessages.typeMismatch(\n path.substring(1),\n providedType,\n defaultType\n );\n }\n }\n };\n\n /**\n * The spread operator caused sub keys to be missing after merging.\n * This is to fix that issue by using spread on the child objects first.\n * Also handles complex options like disabledDates\n * @param provided An option from new providedOptions\n * @param mergeOption Default option to compare types against\n * @param copyTo Destination object. This was add to prevent reference copies\n */\n const spread = (provided, mergeOption, copyTo) => {\n const unsupportedOptions = Object.keys(provided).filter(\n (x) => !Object.keys(mergeOption).includes(x)\n );\n if (unsupportedOptions.length > 0) {\n const flattenedOptions = OptionConverter.getFlattenDefaultOptions();\n\n const errors = unsupportedOptions.map((x) => {\n let error = `\"${path.substring(1)}.${x}\" in not a known option.`;\n let didYouMean = flattenedOptions.find((y) => y.includes(x));\n if (didYouMean) error += `Did you mean \"${didYouMean}\"?`;\n return error;\n });\n Namespace.errorMessages.unexpectedOptions(errors);\n }\n Object.keys(mergeOption).forEach((key) => {\n const defaultOptionValue = mergeOption[key];\n let providedType = typeof provided[key];\n let defaultType = typeof defaultOptionValue;\n let value = provided[key];\n if (!provided.hasOwnProperty(key)) {\n if (\n defaultType === 'undefined' ||\n (value?.length === 0 && Array.isArray(defaultOptionValue))\n ) {\n copyTo[key] = defaultOptionValue;\n return;\n }\n provided[key] = defaultOptionValue;\n value = provided[key];\n }\n path += `.${key}`;\n copyTo[key] = processKey(key, value, providedType, defaultType);\n\n if (\n typeof defaultOptionValue !== 'object' ||\n ignoreProperties.includes(key)\n ) {\n path = path.substring(0, path.lastIndexOf(`.${key}`));\n return;\n }\n if (!Array.isArray(provided[key])) {\n spread(provided[key], defaultOptionValue, copyTo[key]);\n path = path.substring(0, path.lastIndexOf(`.${key}`));\n }\n path = path.substring(0, path.lastIndexOf(`.${key}`));\n });\n };\n spread(providedOptions, mergeTo, newOptions);\n\n return newOptions;\n }\n\n static _dataToOptions(element, options: Options): Options {\n const eData = JSON.parse(JSON.stringify(element.dataset));\n\n if (eData?.tdTargetInput) delete eData.tdTargetInput;\n if (eData?.tdTargetToggle) delete eData.tdTargetToggle;\n\n if (\n !eData ||\n Object.keys(eData).length === 0 ||\n eData.constructor !== DOMStringMap\n )\n return options;\n let dataOptions = {} as Options;\n\n // because dataset returns camelCase including the 'td' key the option\n // key won't align\n const objectToNormalized = (object) => {\n const lowered = {};\n Object.keys(object).forEach((x) => {\n lowered[x.toLowerCase()] = x;\n });\n\n return lowered;\n };\n\n const rabbitHole = (\n split: string[],\n index: number,\n optionSubgroup: {},\n value: any\n ) => {\n // first round = display { ... }\n const normalizedOptions = objectToNormalized(optionSubgroup);\n\n const keyOption = normalizedOptions[split[index].toLowerCase()];\n const internalObject = {};\n\n if (keyOption === undefined) return internalObject;\n\n // if this is another object, continue down the rabbit hole\n if (optionSubgroup[keyOption].constructor === Object) {\n index++;\n internalObject[keyOption] = rabbitHole(\n split,\n index,\n optionSubgroup[keyOption],\n value\n );\n } else {\n internalObject[keyOption] = value;\n }\n return internalObject;\n };\n const optionsLower = objectToNormalized(options);\n\n Object.keys(eData)\n .filter((x) => x.startsWith(Namespace.dataKey))\n .map((x) => x.substring(2))\n .forEach((key) => {\n let keyOption = optionsLower[key.toLowerCase()];\n\n // dataset merges dashes to camelCase... yay\n // i.e. key = display_components_seconds\n if (key.includes('_')) {\n // [display, components, seconds]\n const split = key.split('_');\n // display\n keyOption = optionsLower[split[0].toLowerCase()];\n if (\n keyOption !== undefined &&\n options[keyOption].constructor === Object\n ) {\n dataOptions[keyOption] = rabbitHole(\n split,\n 1,\n options[keyOption],\n eData[`td${key}`]\n );\n }\n }\n // or key = multipleDate\n else if (keyOption !== undefined) {\n dataOptions[keyOption] = eData[`td${key}`];\n }\n });\n\n return this._mergeOptions(dataOptions, options);\n }\n\n /**\n * Attempts to prove `d` is a DateTime or Date or can be converted into one.\n * @param d If a string will attempt creating a date from it.\n * @private\n */\n static _dateTypeCheck(d: any): DateTime | null {\n if (d.constructor.name === DateTime.name) return d;\n if (d.constructor.name === Date.name) {\n return DateTime.convert(d);\n }\n if (typeof d === typeof '') {\n const dateTime = new DateTime(d);\n if (JSON.stringify(dateTime) === 'null') {\n return null;\n }\n return dateTime;\n }\n return null;\n }\n\n /**\n * Type checks that `value` is an array of Date or DateTime\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n * @param locale\n */\n static _typeCheckDateArray(\n optionName: string,\n value,\n providedType: string,\n locale: string = 'default'\n ) {\n if (!Array.isArray(value)) {\n Namespace.errorMessages.typeMismatch(\n optionName,\n providedType,\n 'array of DateTime or Date'\n );\n }\n for (let i = 0; i < value.length; i++) {\n let d = value[i];\n const dateTime = this.dateConversion(d, optionName);\n if (!dateTime) {\n Namespace.errorMessages.typeMismatch(\n optionName,\n typeof d,\n 'DateTime or Date'\n );\n }\n dateTime.setLocale(locale);\n value[i] = dateTime;\n }\n }\n\n /**\n * Type checks that `value` is an array of numbers\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n */\n static _typeCheckNumberArray(\n optionName: string,\n value,\n providedType: string\n ) {\n if (!Array.isArray(value) || value.find((x) => typeof x !== typeof 0)) {\n Namespace.errorMessages.typeMismatch(\n optionName,\n providedType,\n 'array of numbers'\n );\n }\n return;\n }\n\n /**\n * Attempts to convert `d` to a DateTime object\n * @param d value to convert\n * @param optionName Provides text to error messages e.g. disabledDates\n */\n static dateConversion(d: any, optionName: string): DateTime {\n if (typeof d === typeof '' && optionName !== 'input') {\n Namespace.errorMessages.dateString();\n }\n\n const converted = this._dateTypeCheck(d);\n\n if (!converted) {\n Namespace.errorMessages.failedToParseDate(\n optionName,\n d,\n optionName === 'input'\n );\n }\n return converted;\n }\n\n private static _flatback: string[];\n\n private static getFlattenDefaultOptions(): string[] {\n if (this._flatback) return this._flatback;\n const deepKeys = (t, pre = []) =>\n Array.isArray(t)\n ? []\n : Object(t) === t\n ? Object.entries(t).flatMap(([k, v]) => deepKeys(v, [...pre, k]))\n : pre.join('.');\n\n this._flatback = deepKeys(DefaultOptions);\n\n return this._flatback;\n }\n\n /**\n * Some options conflict like min/max date. Verify that these kinds of options\n * are set correctly.\n * @param config\n */\n static _validateConflcits(config: Options) {\n if (\n config.display.sideBySide &&\n (!config.display.components.clock ||\n !(\n config.display.components.hours ||\n config.display.components.minutes ||\n config.display.components.seconds\n ))\n ) {\n Namespace.errorMessages.conflictingConfiguration(\n 'Cannot use side by side mode without the clock components'\n );\n }\n\n if (config.restrictions.minDate && config.restrictions.maxDate) {\n if (config.restrictions.minDate.isAfter(config.restrictions.maxDate)) {\n Namespace.errorMessages.conflictingConfiguration(\n 'minDate is after maxDate'\n );\n }\n\n if (config.restrictions.maxDate.isBefore(config.restrictions.minDate)) {\n Namespace.errorMessages.conflictingConfiguration(\n 'maxDate is before minDate'\n );\n }\n }\n }\n}\n","export declare type Constructable = new (...args: any[]) => T;\r\n\r\nclass ServiceLocator {\r\n private cache: Map, unknown | Symbol> = new Map();\r\n\r\n locate(identifier: Constructable): T {\r\n const service = this.cache.get(identifier);\r\n if (service) return service as T;\r\n const value = new identifier();\r\n this.cache.set(identifier, value);\r\n return value;\r\n }\r\n}\r\nexport const setupServiceLocator = () => {\r\n serviceLocator = new ServiceLocator();\r\n}\r\n\r\nexport let serviceLocator: ServiceLocator;","import { DateTime, getFormatByUnit, Unit } from './datetime';\r\nimport { OptionsStore } from './utilities/options';\r\nimport { serviceLocator } from './utilities/service-locator';\r\n\r\n/**\r\n * Main class for date validation rules based on the options provided.\r\n */\r\nexport default class Validation {\r\n private optionsStore: OptionsStore;\r\n\r\n constructor() {\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n }\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 provide to chek portions of the date instead of the whole.\r\n * @param targetDate\r\n * @param granularity\r\n */\r\n isValid(targetDate: DateTime, granularity?: Unit): boolean {\r\n if (\r\n this.optionsStore.options.restrictions.disabledDates.length > 0 &&\r\n this._isInDisabledDates(targetDate)\r\n ) {\r\n return false;\r\n }\r\n if (\r\n this.optionsStore.options.restrictions.enabledDates.length > 0 &&\r\n !this._isInEnabledDates(targetDate)\r\n ) {\r\n return false;\r\n }\r\n if (\r\n granularity !== Unit.month &&\r\n granularity !== Unit.year &&\r\n this.optionsStore.options.restrictions.daysOfWeekDisabled?.length > 0 &&\r\n this.optionsStore.options.restrictions.daysOfWeekDisabled.indexOf(\r\n targetDate.weekDay\r\n ) !== -1\r\n ) {\r\n return false;\r\n }\r\n\r\n if (\r\n this.optionsStore.options.restrictions.minDate &&\r\n targetDate.isBefore(\r\n this.optionsStore.options.restrictions.minDate,\r\n granularity\r\n )\r\n ) {\r\n return false;\r\n }\r\n if (\r\n this.optionsStore.options.restrictions.maxDate &&\r\n targetDate.isAfter(\r\n this.optionsStore.options.restrictions.maxDate,\r\n granularity\r\n )\r\n ) {\r\n return false;\r\n }\r\n\r\n if (\r\n granularity === Unit.hours ||\r\n granularity === Unit.minutes ||\r\n granularity === Unit.seconds\r\n ) {\r\n if (\r\n this.optionsStore.options.restrictions.disabledHours.length > 0 &&\r\n this._isInDisabledHours(targetDate)\r\n ) {\r\n return false;\r\n }\r\n if (\r\n this.optionsStore.options.restrictions.enabledHours.length > 0 &&\r\n !this._isInEnabledHours(targetDate)\r\n ) {\r\n return false;\r\n }\r\n if (\r\n this.optionsStore.options.restrictions.disabledTimeIntervals.length > 0\r\n ) {\r\n for (let disabledTimeIntervals of this.optionsStore.options.restrictions.disabledTimeIntervals) {\r\n if (\r\n targetDate.isBetween(\r\n disabledTimeIntervals.from,\r\n disabledTimeIntervals.to\r\n )\r\n )\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\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 private _isInDisabledDates(testDate: DateTime) {\r\n if (\r\n !this.optionsStore.options.restrictions.disabledDates ||\r\n this.optionsStore.options.restrictions.disabledDates.length === 0\r\n )\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 /**\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 private _isInEnabledDates(testDate: DateTime) {\r\n if (\r\n !this.optionsStore.options.restrictions.enabledDates ||\r\n this.optionsStore.options.restrictions.enabledDates.length === 0\r\n )\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 /**\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 private _isInDisabledHours(testDate: DateTime) {\r\n if (\r\n !this.optionsStore.options.restrictions.disabledHours ||\r\n this.optionsStore.options.restrictions.disabledHours.length === 0\r\n )\r\n return false;\r\n const formattedDate = testDate.hours;\r\n return this.optionsStore.options.restrictions.disabledHours.find(\r\n (x) => x === formattedDate\r\n );\r\n }\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 private _isInEnabledHours(testDate: DateTime) {\r\n if (\r\n !this.optionsStore.options.restrictions.enabledHours ||\r\n this.optionsStore.options.restrictions.enabledHours.length === 0\r\n )\r\n return true;\r\n const formattedDate = testDate.hours;\r\n return this.optionsStore.options.restrictions.enabledHours.find(\r\n (x) => x === formattedDate\r\n );\r\n }\r\n}\r\n","import { Unit } from '../datetime';\nimport ActionTypes from './action-types';\nimport { BaseEvent } from './event-types';\n\nexport type ViewUpdateValues = Unit | 'clock' | 'calendar' | 'all';\n\nexport class EventEmitter {\n private subscribers: ((value?: T) => void)[] = [];\n\n subscribe(callback: (value: T) => void) {\n this.subscribers.push(callback);\n return this.unsubscribe.bind(this, this.subscribers.length - 1);\n }\n\n unsubscribe(index: number) {\n this.subscribers.splice(index, 1);\n }\n\n emit(value?: T) {\n this.subscribers.forEach((callback) => {\n callback(value);\n });\n }\n\n destory() {\n this.subscribers = null;\n this.subscribers = [];\n }\n}\n\nexport class EventEmitters {\n triggerEvent = new EventEmitter();\n viewUpdate = new EventEmitter();\n updateDisplay = new EventEmitter();\n action = new EventEmitter<{ e: any; action?: ActionTypes }>();\n\n destory() {\n this.triggerEvent.destory();\n this.viewUpdate.destory();\n this.updateDisplay.destory();\n this.action.destory();\n }\n}\n","import { DateTime, getFormatByUnit, Unit } from './datetime';\nimport Namespace from './utilities/namespace';\nimport { ChangeEvent, FailEvent } from './utilities/event-types';\nimport { OptionConverter, OptionsStore } from './utilities/options';\nimport Validation from './validation';\nimport { serviceLocator } from './utilities/service-locator';\nimport { EventEmitters } from './utilities/event-emitter';\n\nexport default class Dates {\n private _dates: DateTime[] = [];\n private optionsStore: OptionsStore;\n private validation: Validation;\n private _eventEmitters: EventEmitters;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n this._eventEmitters = serviceLocator.locate(EventEmitters);\n }\n\n /**\n * Returns the array of selected dates\n */\n get picked(): DateTime[] {\n return this._dates;\n }\n\n /**\n * Returns the last picked value.\n */\n get lastPicked(): DateTime {\n return this._dates[this.lastPickedIndex];\n }\n\n /**\n * Returns the length of picked dates -1 or 0 if none are selected.\n */\n get lastPickedIndex(): number {\n if (this._dates.length === 0) return 0;\n return this._dates.length - 1;\n }\n\n /**\n * Formats a DateTime object to a string. Used when setting the input value.\n * @param date\n */\n formatInput(date: DateTime): string {\n const components = this.optionsStore.options.display.components;\n if (!date) return '';\n return date.format({\n year: components.calendar && components.year ? 'numeric' : undefined,\n month: components.calendar && components.month ? '2-digit' : undefined,\n day: components.calendar && components.date ? '2-digit' : undefined,\n hour:\n components.clock && components.hours\n ? components.useTwentyfourHour\n ? '2-digit'\n : 'numeric'\n : undefined,\n minute: components.clock && components.minutes ? '2-digit' : undefined,\n second: components.clock && components.seconds ? '2-digit' : undefined,\n hour12: !components.useTwentyfourHour,\n });\n }\n\n /**\n * Tries to convert the provided value to a DateTime object.\n * If value is null|undefined then clear the value of the provided index (or 0).\n * @param value Value to convert or null|undefined\n * @param index When using multidates this is the index in the array\n */\n setFromInput(value: any, index?: number) {\n if (!value) {\n this.setValue(undefined, index);\n return;\n }\n const converted = OptionConverter.dateConversion(value, 'input');\n if (converted) {\n converted.setLocale(this.optionsStore.options.localization.locale);\n this.setValue(converted, index);\n }\n }\n\n /**\n * Adds a new DateTime to selected dates array\n * @param date\n */\n add(date: DateTime): void {\n this._dates.push(date);\n }\n\n /**\n * Returns true if the `targetDate` is part of the selected dates array.\n * If `unit` is provided then a granularity to that unit will be used.\n * @param targetDate\n * @param unit\n */\n isPicked(targetDate: DateTime, unit?: Unit): boolean {\n if (!unit) return this._dates.find((x) => x === targetDate) !== undefined;\n\n const format = getFormatByUnit(unit);\n\n let innerDateFormatted = targetDate.format(format);\n\n return (\n this._dates\n .map((x) => x.format(format))\n .find((x) => x === innerDateFormatted) !== undefined\n );\n }\n\n /**\n * Returns the index at which `targetDate` is in the array.\n * This is used for updating or removing a date when multi-date is used\n * If `unit` is provided then a granularity to that unit will be used.\n * @param targetDate\n * @param unit\n */\n pickedIndex(targetDate: DateTime, unit?: Unit): number {\n if (!unit) return this._dates.indexOf(targetDate);\n\n const format = getFormatByUnit(unit);\n\n let innerDateFormatted = targetDate.format(format);\n\n return this._dates.map((x) => x.format(format)).indexOf(innerDateFormatted);\n }\n\n /**\n * Clears all selected dates.\n */\n clear() {\n this.optionsStore.unset = true;\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.change,\n date: undefined,\n oldDate: this.lastPicked,\n isClear: true,\n isValid: true,\n } as ChangeEvent);\n this._dates = [];\n }\n\n /**\n * Find the \"book end\" years given a `year` and a `factor`\n * @param factor e.g. 100 for decades\n * @param year e.g. 2021\n */\n static getStartEndYear(\n factor: number,\n year: number\n ): [number, number, number] {\n const step = factor / 10,\n startYear = Math.floor(year / factor) * factor,\n endYear = startYear + step * 9,\n focusValue = Math.floor(year / step) * step;\n return [startYear, endYear, focusValue];\n }\n\n /**\n * Attempts to either clear or set the `target` date at `index`.\n * If the `target` is null then the date will be cleared.\n * If multi-date is being used then it will be removed from the array.\n * If `target` is valid and multi-date is used then if `index` is\n * provided the date at that index will be replaced, otherwise it is appended.\n * @param target\n * @param index\n */\n setValue(target?: DateTime, index?: number): void {\n const noIndex = typeof index === 'undefined',\n isClear = !target && noIndex;\n let oldDate = this.optionsStore.unset ? null : this._dates[index];\n if (!oldDate && !this.optionsStore.unset && noIndex && isClear) {\n oldDate = this.lastPicked;\n }\n\n const updateInput = () => {\n if (!this.optionsStore.input) return;\n\n let newValue = this.formatInput(target);\n if (this.optionsStore.options.multipleDates) {\n newValue = this._dates\n .map((d) => this.formatInput(d))\n .join(this.optionsStore.options.multipleDatesSeparator);\n }\n if (this.optionsStore.input.value != newValue)\n this.optionsStore.input.value = newValue;\n };\n\n if (target && oldDate?.isSame(target)) {\n updateInput();\n return;\n }\n\n // case of calling setValue(null)\n if (!target) {\n if (\n !this.optionsStore.options.multipleDates ||\n this._dates.length === 1 ||\n isClear\n ) {\n this.optionsStore.unset = true;\n this._dates = [];\n } else {\n this._dates.splice(index, 1);\n }\n\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.change,\n date: undefined,\n oldDate,\n isClear,\n isValid: true,\n } as ChangeEvent);\n\n updateInput();\n this._eventEmitters.updateDisplay.emit('all');\n return;\n }\n\n index = index || 0;\n target = target.clone;\n\n // minute stepping is being used, force the minute to the closest value\n if (this.optionsStore.options.stepping !== 1) {\n target.minutes =\n Math.round(target.minutes / this.optionsStore.options.stepping) *\n this.optionsStore.options.stepping;\n target.seconds = 0;\n }\n\n if (this.validation.isValid(target)) {\n this._dates[index] = target;\n this.optionsStore.viewDate = target.clone;\n\n updateInput();\n\n this.optionsStore.unset = false;\n this._eventEmitters.updateDisplay.emit('all');\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.change,\n date: target,\n oldDate,\n isClear,\n isValid: true,\n } as ChangeEvent);\n return;\n }\n\n if (this.optionsStore.options.keepInvalid) {\n this._dates[index] = target;\n this.optionsStore.viewDate = target.clone;\n\n updateInput();\n\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.change,\n date: target,\n oldDate,\n isClear,\n isValid: false,\n } as ChangeEvent);\n }\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.error,\n reason: Namespace.errorMessages.failedToSetInvalidDate,\n date: target,\n oldDate,\n } as FailEvent);\n }\n}\n","enum ActionTypes {\n next = 'next',\n previous = 'previous',\n changeCalendarView = 'changeCalendarView',\n selectMonth = 'selectMonth',\n selectYear = 'selectYear',\n selectDecade = 'selectDecade',\n selectDay = 'selectDay',\n selectHour = 'selectHour',\n selectMinute = 'selectMinute',\n selectSecond = 'selectSecond',\n incrementHours = 'incrementHours',\n incrementMinutes = 'incrementMinutes',\n incrementSeconds = 'incrementSeconds',\n decrementHours = 'decrementHours',\n decrementMinutes = 'decrementMinutes',\n decrementSeconds = 'decrementSeconds',\n toggleMeridiem = 'toggleMeridiem',\n togglePicker = 'togglePicker',\n showClock = 'showClock',\n showHours = 'showHours',\n showMinutes = 'showMinutes',\n showSeconds = 'showSeconds',\n clear = 'clear',\n close = 'close',\n today = 'today',\n}\n\nexport default ActionTypes;\n","import { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport { OptionsStore } from '../../utilities/options';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\n\n/**\n * Creates and updates the grid for `date`\n */\nexport default class DateDisplay {\n private optionsStore: OptionsStore;\n private dates: Dates;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.daysContainer);\n\n container.append(...this._daysOfTheWeek());\n\n if (this.optionsStore.options.display.calendarWeeks) {\n const div = document.createElement('div');\n div.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight);\n container.appendChild(div);\n }\n\n for (let i = 0; i < 42; i++) {\n if (i !== 0 && i % 7 === 0) {\n if (this.optionsStore.options.display.calendarWeeks) {\n const div = document.createElement('div');\n div.classList.add(\n Namespace.css.calendarWeeks,\n Namespace.css.noHighlight\n );\n container.appendChild(div);\n }\n }\n\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectDay);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.daysContainer\n )[0];\n const [previous, switcher, next] = container.parentElement\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n\n switcher.setAttribute(\n Namespace.css.daysContainer,\n this.optionsStore.viewDate.format(\n this.optionsStore.options.localization.dayViewHeaderFormat\n )\n );\n\n this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.month),\n Unit.month\n )\n ? previous.classList.remove(Namespace.css.disabled)\n : previous.classList.add(Namespace.css.disabled);\n\n this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.month),\n Unit.month\n )\n ? next.classList.remove(Namespace.css.disabled)\n : next.classList.add(Namespace.css.disabled);\n\n let innerDate = this.optionsStore.viewDate.clone\n .startOf(Unit.month)\n .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek)\n .manipulate(12, Unit.hours);\n\n container\n .querySelectorAll(\n `[data-action=\"${ActionTypes.selectDay}\"], .${Namespace.css.calendarWeeks}`\n )\n .forEach((containerClone: HTMLElement) => {\n if (\n this.optionsStore.options.display.calendarWeeks &&\n containerClone.classList.contains(Namespace.css.calendarWeeks)\n ) {\n if (containerClone.innerText === '#') return;\n containerClone.innerText = `${innerDate.week}`;\n return;\n }\n\n let classes: string[] = [];\n classes.push(Namespace.css.day);\n\n if (innerDate.isBefore(this.optionsStore.viewDate, Unit.month)) {\n classes.push(Namespace.css.old);\n }\n if (innerDate.isAfter(this.optionsStore.viewDate, Unit.month)) {\n classes.push(Namespace.css.new);\n }\n\n if (\n !this.optionsStore.unset &&\n this.dates.isPicked(innerDate, Unit.date)\n ) {\n classes.push(Namespace.css.active);\n }\n if (!this.validation.isValid(innerDate, Unit.date)) {\n classes.push(Namespace.css.disabled);\n }\n if (innerDate.isSame(new DateTime(), Unit.date)) {\n classes.push(Namespace.css.today);\n }\n if (innerDate.weekDay === 0 || innerDate.weekDay === 6) {\n classes.push(Namespace.css.weekend);\n }\n\n paint(Unit.date, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute(\n 'data-value',\n `${innerDate.year}-${innerDate.monthFormatted}-${innerDate.dateFormatted}`\n );\n containerClone.setAttribute('data-day', `${innerDate.date}`);\n containerClone.innerText = innerDate.format({ day: 'numeric' });\n innerDate.manipulate(1, Unit.date);\n });\n }\n\n /***\n * Generates an html row that contains the days of the week.\n * @private\n */\n private _daysOfTheWeek(): HTMLElement[] {\n let innerDate = this.optionsStore.viewDate.clone\n .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek)\n .startOf(Unit.date);\n const row = [];\n document.createElement('div');\n\n if (this.optionsStore.options.display.calendarWeeks) {\n const htmlDivElement = document.createElement('div');\n htmlDivElement.classList.add(\n Namespace.css.calendarWeeks,\n Namespace.css.noHighlight\n );\n htmlDivElement.innerText = '#';\n row.push(htmlDivElement);\n }\n\n for (let i = 0; i < 7; i++) {\n const htmlDivElement = document.createElement('div');\n htmlDivElement.classList.add(\n Namespace.css.dayOfTheWeek,\n Namespace.css.noHighlight\n );\n htmlDivElement.innerText = innerDate.format({ weekday: 'short' });\n innerDate.manipulate(1, Unit.date);\n row.push(htmlDivElement);\n }\n\n return row;\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport { OptionsStore } from '../../utilities/options';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\n\n/**\n * Creates and updates the grid for `month`\n */\nexport default class MonthDisplay {\n private optionsStore: OptionsStore;\n private dates: Dates;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.monthsContainer);\n\n for (let i = 0; i < 12; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectMonth);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.monthsContainer\n )[0];\n const [previous, switcher, next] = container.parentElement\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n\n switcher.setAttribute(\n Namespace.css.monthsContainer,\n this.optionsStore.viewDate.format({ year: 'numeric' })\n );\n\n this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.year),\n Unit.year\n )\n ? previous.classList.remove(Namespace.css.disabled)\n : previous.classList.add(Namespace.css.disabled);\n\n this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.year),\n Unit.year\n )\n ? next.classList.remove(Namespace.css.disabled)\n : next.classList.add(Namespace.css.disabled);\n\n let innerDate = this.optionsStore.viewDate.clone.startOf(Unit.year);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectMonth}\"]`)\n .forEach((containerClone: HTMLElement, index) => {\n let classes = [];\n classes.push(Namespace.css.month);\n\n if (\n !this.optionsStore.unset &&\n this.dates.isPicked(innerDate, Unit.month)\n ) {\n classes.push(Namespace.css.active);\n }\n if (!this.validation.isValid(innerDate, Unit.month)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.month, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${index}`);\n containerClone.innerText = `${innerDate.format({ month: 'short' })}`;\n innerDate.manipulate(1, Unit.month);\n });\n }\n}\n","import { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Dates from '../../dates';\nimport { OptionsStore } from '../../utilities/options';\nimport Validation from '../../validation';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\n\n/**\n * Creates and updates the grid for `year`\n */\nexport default class YearDisplay {\n private _startYear: DateTime;\n private _endYear: DateTime;\n private optionsStore: OptionsStore;\n private dates: Dates;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.yearsContainer);\n\n for (let i = 0; i < 12; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectYear);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint) {\n this._startYear = this.optionsStore.viewDate.clone.manipulate(-1, Unit.year);\n this._endYear = this.optionsStore.viewDate.clone.manipulate(10, Unit.year);\n\n const container = widget.getElementsByClassName(\n Namespace.css.yearsContainer\n )[0];\n const [previous, switcher, next] = container.parentElement\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n\n switcher.setAttribute(\n Namespace.css.yearsContainer,\n `${this._startYear.format({ year: 'numeric' })}-${this._endYear.format({ year: 'numeric' })}`\n );\n\n this.validation.isValid(this._startYear, Unit.year)\n ? previous.classList.remove(Namespace.css.disabled)\n : previous.classList.add(Namespace.css.disabled);\n this.validation.isValid(this._endYear, Unit.year)\n ? next.classList.remove(Namespace.css.disabled)\n : next.classList.add(Namespace.css.disabled);\n\n let innerDate = this.optionsStore.viewDate.clone\n .startOf(Unit.year)\n .manipulate(-1, Unit.year);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectYear}\"]`)\n .forEach((containerClone: HTMLElement) => {\n let classes = [];\n classes.push(Namespace.css.year);\n\n if (\n !this.optionsStore.unset &&\n this.dates.isPicked(innerDate, Unit.year)\n ) {\n classes.push(Namespace.css.active);\n }\n if (!this.validation.isValid(innerDate, Unit.year)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.year, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${innerDate.year}`);\n containerClone.innerText = innerDate.format({ year: \"numeric\" });\n\n innerDate.manipulate(1, Unit.year);\n });\n }\n}\n","import Dates from '../../dates';\nimport { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport { OptionsStore } from '../../utilities/options';\nimport Validation from '../../validation';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\n\n/**\n * Creates and updates the grid for `seconds`\n */\nexport default class DecadeDisplay {\n private _startDecade: DateTime;\n private _endDecade: DateTime;\n private optionsStore: OptionsStore;\n private dates: Dates;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n\n /**\n * Build the container html for the display\n * @private\n */\n getPicker() {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.decadesContainer);\n\n for (let i = 0; i < 12; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectDecade);\n container.appendChild(div);\n }\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint) {\n const [start, end] = Dates.getStartEndYear(\n 100,\n this.optionsStore.viewDate.year\n );\n this._startDecade = this.optionsStore.viewDate.clone.startOf(Unit.year);\n this._startDecade.year = start;\n this._endDecade = this.optionsStore.viewDate.clone.startOf(Unit.year);\n this._endDecade.year = end;\n\n const container = widget.getElementsByClassName(\n Namespace.css.decadesContainer\n )[0];\n const [previous, switcher, next] = container.parentElement\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n\n switcher.setAttribute(\n Namespace.css.decadesContainer,\n `${this._startDecade.format({ year: 'numeric' })}-${this._endDecade.format({ year: 'numeric' })}`\n );\n\n this.validation.isValid(this._startDecade, Unit.year)\n ? previous.classList.remove(Namespace.css.disabled)\n : previous.classList.add(Namespace.css.disabled);\n this.validation.isValid(this._endDecade, Unit.year)\n ? next.classList.remove(Namespace.css.disabled)\n : next.classList.add(Namespace.css.disabled);\n\n const pickedYears = this.dates.picked.map((x) => x.year);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectDecade}\"]`)\n .forEach((containerClone: HTMLElement, index) => {\n if (index === 0) {\n containerClone.classList.add(Namespace.css.old);\n if (this._startDecade.year - 10 < 0) {\n containerClone.textContent = ' ';\n previous.classList.add(Namespace.css.disabled);\n containerClone.classList.add(Namespace.css.disabled);\n containerClone.setAttribute('data-value', ``);\n return;\n } else {\n containerClone.innerText = this._startDecade.clone.manipulate(-10, Unit.year).format({ year: 'numeric' });\n containerClone.setAttribute(\n 'data-value',\n `${this._startDecade.year}`\n );\n return;\n }\n }\n\n let classes = [];\n classes.push(Namespace.css.decade);\n const startDecadeYear = this._startDecade.year;\n const endDecadeYear = this._startDecade.year + 9;\n\n if (\n !this.optionsStore.unset &&\n pickedYears.filter((x) => x >= startDecadeYear && x <= endDecadeYear)\n .length > 0\n ) {\n classes.push(Namespace.css.active);\n }\n\n paint('decade', this._startDecade, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute(\n 'data-value',\n `${this._startDecade.year}`\n );\n containerClone.innerText = `${this._startDecade.format({ year: 'numeric' })}`;\n\n this._startDecade.manipulate(10, Unit.year);\n });\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport { OptionsStore } from '../../utilities/options';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\n\n/**\n * Creates the clock display\n */\nexport default class TimeDisplay {\n private _gridColumns = '';\n private optionsStore: OptionsStore;\n private validation: Validation;\n private dates: Dates;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n\n /**\n * Build the container html for the clock display\n * @private\n */\n getPicker(iconTag: (iconClass: string) => HTMLElement): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.clockContainer);\n\n container.append(...this._grid(iconTag));\n\n return container;\n }\n\n /**\n * Populates the various elements with in the clock display\n * like the current hour and if the manipulation icons are enabled.\n * @private\n */\n _update(widget: HTMLElement): void {\n const timesDiv = (\n widget.getElementsByClassName(\n Namespace.css.clockContainer\n )[0]\n );\n const lastPicked = (\n this.dates.lastPicked || this.optionsStore.viewDate\n ).clone;\n\n timesDiv\n .querySelectorAll('.disabled')\n .forEach((element) => element.classList.remove(Namespace.css.disabled));\n\n if (this.optionsStore.options.display.components.hours) {\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.hours),\n Unit.hours\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.incrementHours}]`)\n .classList.add(Namespace.css.disabled);\n }\n\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.hours),\n Unit.hours\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.decrementHours}]`)\n .classList.add(Namespace.css.disabled);\n }\n timesDiv.querySelector(\n `[data-time-component=${Unit.hours}]`\n ).innerText = this.optionsStore.options.display.components.useTwentyfourHour\n ? lastPicked.hoursFormatted\n : lastPicked.twelveHoursFormatted;\n }\n\n if (this.optionsStore.options.display.components.minutes) {\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.minutes),\n Unit.minutes\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.incrementMinutes}]`)\n .classList.add(Namespace.css.disabled);\n }\n\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.minutes),\n Unit.minutes\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.decrementMinutes}]`)\n .classList.add(Namespace.css.disabled);\n }\n timesDiv.querySelector(\n `[data-time-component=${Unit.minutes}]`\n ).innerText = lastPicked.minutesFormatted;\n }\n\n if (this.optionsStore.options.display.components.seconds) {\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.seconds),\n Unit.seconds\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.incrementSeconds}]`)\n .classList.add(Namespace.css.disabled);\n }\n\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.seconds),\n Unit.seconds\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.decrementSeconds}]`)\n .classList.add(Namespace.css.disabled);\n }\n timesDiv.querySelector(\n `[data-time-component=${Unit.seconds}]`\n ).innerText = lastPicked.secondsFormatted;\n }\n\n if (!this.optionsStore.options.display.components.useTwentyfourHour) {\n const toggle = timesDiv.querySelector(\n `[data-action=${ActionTypes.toggleMeridiem}]`\n );\n\n toggle.innerText = lastPicked.meridiem();\n\n if (\n !this.validation.isValid(\n lastPicked.clone.manipulate(\n lastPicked.hours >= 12 ? -12 : 12,\n Unit.hours\n )\n )\n ) {\n toggle.classList.add(Namespace.css.disabled);\n } else {\n toggle.classList.remove(Namespace.css.disabled);\n }\n }\n\n timesDiv.style.gridTemplateAreas = `\"${this._gridColumns}\"`;\n }\n\n /**\n * Creates the table for the clock display depending on what options are selected.\n * @private\n */\n private _grid(iconTag: (iconClass: string) => HTMLElement): HTMLElement[] {\n this._gridColumns = '';\n const top = [],\n middle = [],\n bottom = [],\n separator = document.createElement('div'),\n upIcon = iconTag(\n this.optionsStore.options.display.icons.up\n ),\n downIcon = iconTag(\n this.optionsStore.options.display.icons.down\n );\n\n separator.classList.add(Namespace.css.separator, Namespace.css.noHighlight);\n const separatorColon = separator.cloneNode(true);\n separatorColon.innerHTML = ':';\n\n const getSeparator = (colon = false): HTMLElement => {\n return colon\n ? separatorColon.cloneNode(true)\n : separator.cloneNode(true);\n };\n\n if (this.optionsStore.options.display.components.hours) {\n let divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.incrementHour\n );\n divElement.setAttribute('data-action', ActionTypes.incrementHours);\n divElement.appendChild(upIcon.cloneNode(true));\n top.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.pickHour\n );\n divElement.setAttribute('data-action', ActionTypes.showHours);\n divElement.setAttribute('data-time-component', Unit.hours);\n middle.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.decrementHour\n );\n divElement.setAttribute('data-action', ActionTypes.decrementHours);\n divElement.appendChild(downIcon.cloneNode(true));\n bottom.push(divElement);\n this._gridColumns += 'a';\n }\n\n if (this.optionsStore.options.display.components.minutes) {\n this._gridColumns += ' a';\n if (this.optionsStore.options.display.components.hours) {\n top.push(getSeparator());\n middle.push(getSeparator(true));\n bottom.push(getSeparator());\n this._gridColumns += ' a';\n }\n let divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.incrementMinute\n );\n divElement.setAttribute('data-action', ActionTypes.incrementMinutes);\n divElement.appendChild(upIcon.cloneNode(true));\n top.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.pickMinute\n );\n divElement.setAttribute('data-action', ActionTypes.showMinutes);\n divElement.setAttribute('data-time-component', Unit.minutes);\n middle.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.decrementMinute\n );\n divElement.setAttribute('data-action', ActionTypes.decrementMinutes);\n divElement.appendChild(downIcon.cloneNode(true));\n bottom.push(divElement);\n }\n\n if (this.optionsStore.options.display.components.seconds) {\n this._gridColumns += ' a';\n if (this.optionsStore.options.display.components.minutes) {\n top.push(getSeparator());\n middle.push(getSeparator(true));\n bottom.push(getSeparator());\n this._gridColumns += ' a';\n }\n let divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.incrementSecond\n );\n divElement.setAttribute('data-action', ActionTypes.incrementSeconds);\n divElement.appendChild(upIcon.cloneNode(true));\n top.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.pickSecond\n );\n divElement.setAttribute('data-action', ActionTypes.showSeconds);\n divElement.setAttribute('data-time-component', Unit.seconds);\n middle.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.decrementSecond\n );\n divElement.setAttribute('data-action', ActionTypes.decrementSeconds);\n divElement.appendChild(downIcon.cloneNode(true));\n bottom.push(divElement);\n }\n\n if (!this.optionsStore.options.display.components.useTwentyfourHour) {\n this._gridColumns += ' a';\n let divElement = getSeparator();\n top.push(divElement);\n\n let button = document.createElement('button');\n button.setAttribute(\n 'title',\n this.optionsStore.options.localization.toggleMeridiem\n );\n button.setAttribute('data-action', ActionTypes.toggleMeridiem);\n button.setAttribute('tabindex', '-1');\n if (Namespace.css.toggleMeridiem.includes(',')) { //todo move this to paint function?\n button.classList.add(...Namespace.css.toggleMeridiem.split(','));\n }\n else button.classList.add(Namespace.css.toggleMeridiem);\n\n divElement = document.createElement('div');\n divElement.classList.add(Namespace.css.noHighlight);\n divElement.appendChild(button);\n middle.push(divElement);\n\n divElement = getSeparator();\n bottom.push(divElement);\n }\n\n this._gridColumns = this._gridColumns.trim();\n\n return [...top, ...middle, ...bottom];\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport { OptionsStore } from '../../utilities/options';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\n\n/**\n * Creates and updates the grid for `hours`\n */\nexport default class HourDisplay {\n private optionsStore: OptionsStore;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n }\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.hourContainer);\n\n for (\n let i = 0;\n i <\n (this.optionsStore.options.display.components.useTwentyfourHour ? 24 : 12);\n i++\n ) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectHour);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.hourContainer\n )[0];\n let innerDate = this.optionsStore.viewDate.clone.startOf(Unit.date);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectHour}\"]`)\n .forEach((containerClone: HTMLElement) => {\n let classes = [];\n classes.push(Namespace.css.hour);\n\n if (!this.validation.isValid(innerDate, Unit.hours)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.hours, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${innerDate.hours}`);\n containerClone.innerText = this.optionsStore.options.display.components\n .useTwentyfourHour\n ? innerDate.hoursFormatted\n : innerDate.twelveHoursFormatted;\n innerDate.manipulate(1, Unit.hours);\n });\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport { OptionsStore } from '../../utilities/options';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\n\n/**\n * Creates and updates the grid for `minutes`\n */\nexport default class MinuteDisplay {\n private optionsStore: OptionsStore;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n }\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.minuteContainer);\n\n let step =\n this.optionsStore.options.stepping === 1\n ? 5\n : this.optionsStore.options.stepping;\n for (let i = 0; i < 60 / step; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectMinute);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.minuteContainer\n )[0];\n let innerDate = this.optionsStore.viewDate.clone.startOf(Unit.hours);\n let step =\n this.optionsStore.options.stepping === 1\n ? 5\n : this.optionsStore.options.stepping;\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectMinute}\"]`)\n .forEach((containerClone: HTMLElement) => {\n let classes = [];\n classes.push(Namespace.css.minute);\n\n if (!this.validation.isValid(innerDate, Unit.minutes)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.minutes, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute(\n 'data-value',\n `${innerDate.minutesFormatted}`\n );\n containerClone.innerText = innerDate.minutesFormatted;\n innerDate.manipulate(step, Unit.minutes);\n });\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport { OptionsStore } from '../../utilities/options';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\n\n/**\n * Creates and updates the grid for `seconds`\n */\nexport default class secondDisplay {\n private optionsStore: OptionsStore;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n }\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.secondContainer);\n\n for (let i = 0; i < 12; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectSecond);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.secondContainer\n )[0];\n let innerDate = this.optionsStore.viewDate.clone.startOf(Unit.minutes);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectSecond}\"]`)\n .forEach((containerClone: HTMLElement) => {\n let classes = [];\n classes.push(Namespace.css.second);\n\n if (!this.validation.isValid(innerDate, Unit.seconds)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.seconds, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${innerDate.seconds}`);\n containerClone.innerText = innerDate.secondsFormatted;\n innerDate.manipulate(5, Unit.seconds);\n });\n }\n}\n","import Namespace from '../utilities/namespace';\r\n\r\n/**\r\n * Provides a collapse functionality to the view changes\r\n */\r\nexport default 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: HTMLElement) {\r\n if (target.classList.contains(Namespace.css.show)) {\r\n this.hide(target);\r\n } else {\r\n this.show(target);\r\n }\r\n }\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: HTMLElement) {\r\n if (\r\n target.classList.contains(Namespace.css.collapsing) ||\r\n target.classList.contains(Namespace.css.show)\r\n )\r\n return;\r\n\r\n let timeOut = null;\r\n const complete = () => {\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 timeOut = null;\r\n };\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\r\n timeOut = setTimeout(\r\n complete,\r\n this.getTransitionDurationFromElement(target)\r\n );\r\n target.style.height = `${target.scrollHeight}px`;\r\n }\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: HTMLElement) {\r\n if (\r\n target.classList.contains(Namespace.css.collapsing) ||\r\n !target.classList.contains(Namespace.css.show)\r\n )\r\n return;\r\n\r\n let timeOut = null;\r\n const complete = () => {\r\n target.classList.remove(Namespace.css.collapsing);\r\n target.classList.add(Namespace.css.collapse);\r\n timeOut = null;\r\n };\r\n\r\n target.style.height = `${target.getBoundingClientRect()['height']}px`;\r\n\r\n const reflow = (element) => element.offsetHeight;\r\n\r\n reflow(target);\r\n\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\r\n timeOut = setTimeout(\r\n complete,\r\n this.getTransitionDurationFromElement(target)\r\n );\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 private static getTransitionDurationFromElement = (element: HTMLElement) => {\r\n if (!element) {\r\n return 0;\r\n }\r\n\r\n // Get transition-duration of the element\r\n let { transitionDuration, transitionDelay } =\r\n window.getComputedStyle(element);\r\n\r\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\r\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\r\n\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\r\n // If multiple durations are defined, take the first\r\n transitionDuration = transitionDuration.split(',')[0];\r\n transitionDelay = transitionDelay.split(',')[0];\r\n\r\n return (\r\n (Number.parseFloat(transitionDuration) +\r\n Number.parseFloat(transitionDelay)) *\r\n 1000\r\n );\r\n };\r\n}\r\n","import DateDisplay from './calendar/date-display';\r\nimport MonthDisplay from './calendar/month-display';\r\nimport YearDisplay from './calendar/year-display';\r\nimport DecadeDisplay from './calendar/decade-display';\r\nimport TimeDisplay from './time/time-display';\r\nimport HourDisplay from './time/hour-display';\r\nimport MinuteDisplay from './time/minute-display';\r\nimport SecondDisplay from './time/second-display';\r\nimport { DateTime, Unit } from '../datetime';\r\nimport { createPopper } from '@popperjs/core';\r\nimport Namespace from '../utilities/namespace';\r\nimport { HideEvent } from '../utilities/event-types';\r\nimport Collapse from './collapse';\r\nimport { OptionsStore } from '../utilities/options';\r\nimport Validation from '../validation';\r\nimport Dates from '../dates';\r\nimport { EventEmitters, ViewUpdateValues } from '../utilities/event-emitter';\r\nimport { serviceLocator } from '../utilities/service-locator';\r\nimport ActionTypes from '../utilities/action-types';\r\nimport CalendarModes from '../utilities/calendar-modes';\r\n\r\n/**\r\n * Main class for all things display related.\r\n */\r\nexport default class Display {\r\n private _widget: HTMLElement;\r\n private _popperInstance: any;\r\n private _isVisible = false;\r\n private optionsStore: OptionsStore;\r\n private validation: Validation;\r\n private dates: Dates;\r\n\r\n dateDisplay: DateDisplay;\r\n monthDisplay: MonthDisplay;\r\n yearDisplay: YearDisplay;\r\n decadeDisplay: DecadeDisplay;\r\n timeDisplay: TimeDisplay;\r\n hourDisplay: HourDisplay;\r\n minuteDisplay: MinuteDisplay;\r\n secondDisplay: SecondDisplay;\r\n private _eventEmitters: EventEmitters;\r\n\r\n constructor() {\r\n this.optionsStore = serviceLocator.locate(OptionsStore);\r\n this.validation = serviceLocator.locate(Validation);\r\n this.dates = serviceLocator.locate(Dates);\r\n\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\r\n this._eventEmitters.updateDisplay.subscribe((result: ViewUpdateValues) => {\r\n this._update(result);\r\n });\r\n }\r\n\r\n /**\r\n * Returns the widget body or undefined\r\n * @private\r\n */\r\n get widget(): HTMLElement | undefined {\r\n return this._widget;\r\n }\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 /**\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: ViewUpdateValues): void {\r\n if (!this.widget) 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) 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\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: Unit | 'decade', _date: DateTime, _classes: string[], _element: HTMLElement) {\r\n // implemented in plugin\r\n }\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(): void {\r\n if (this.widget == undefined) {\r\n if (this.dates.picked.length == 0) {\r\n if (\r\n this.optionsStore.options.useCurrent &&\r\n !this.optionsStore.options.defaultDate\r\n ) {\r\n const date = new DateTime().setLocale(\r\n this.optionsStore.options.localization.locale\r\n );\r\n if (!this.optionsStore.options.keepInvalid) {\r\n let tries = 0;\r\n let direction = 1;\r\n if (this.optionsStore.options.restrictions.maxDate?.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) break;\r\n tries++;\r\n }\r\n }\r\n this.dates.setValue(date);\r\n }\r\n \r\n if (this.optionsStore.options.defaultDate) {\r\n this.dates.setValue(this.optionsStore.options.defaultDate);\r\n }\r\n }\r\n\r\n this._buildWidget();\r\n\r\n // If modeView is only clock\r\n const onlyClock = this._hasTime && !this._hasDate;\r\n\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.showClock,\r\n });\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\r\n if (!onlyClock) {\r\n if (this._hasTime) {\r\n Collapse.hide(\r\n this.widget.querySelector(`div.${Namespace.css.timeContainer}`)\r\n );\r\n }\r\n Collapse.show(\r\n this.widget.querySelector(`div.${Namespace.css.dateContainer}`)\r\n );\r\n }\r\n\r\n if (this._hasDate) {\r\n this._showMode();\r\n }\r\n\r\n if (!this.optionsStore.options.display.inline) {\r\n // If needed to change the parent container\r\n const container = this.optionsStore.options?.container || document.body;\r\n container.appendChild(this.widget);\r\n\r\n this._popperInstance = createPopper(\r\n this.optionsStore.element,\r\n this.widget,\r\n {\r\n modifiers: [{ name: 'eventListeners', enabled: true }],\r\n //#2400\r\n placement:\r\n 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\r\n if (this.optionsStore.options.display.viewMode == 'clock') {\r\n this._eventEmitters.action.emit({\r\n e: null,\r\n action: ActionTypes.showClock,\r\n });\r\n }\r\n\r\n this.widget\r\n .querySelectorAll('[data-action]')\r\n .forEach((element) =>\r\n element.addEventListener('click', this._actionsClickEvent)\r\n );\r\n\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 (\r\n this.widget.getElementsByClassName(\r\n Namespace.css.clockContainer\r\n )[0] as HTMLElement\r\n ).style.display = 'grid';\r\n }\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 /**\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?: number): void {\r\n if (!this.widget) {\r\n return;\r\n }\r\n if (direction) {\r\n const max = Math.max(\r\n this.optionsStore.minimumCalendarViewMode,\r\n Math.min(3, this.optionsStore.currentCalendarViewMode + direction)\r\n );\r\n if (this.optionsStore.currentCalendarViewMode == max) return;\r\n this.optionsStore.currentCalendarViewMode = max;\r\n }\r\n\r\n this.widget\r\n .querySelectorAll(\r\n `.${Namespace.css.dateContainer} > div:not(.${Namespace.css.calendarHeader}), .${Namespace.css.timeContainer} > div:not(.${Namespace.css.clockContainer})`\r\n )\r\n .forEach((e: HTMLElement) => (e.style.display = 'none'));\r\n\r\n const datePickerMode =\r\n CalendarModes[this.optionsStore.currentCalendarViewMode];\r\n let picker: HTMLElement = this.widget.querySelector(\r\n `.${datePickerMode.className}`\r\n );\r\n\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\r\n picker.style.display = 'grid';\r\n this._updateCalendarHeader();\r\n this._eventEmitters.viewUpdate.emit();\r\n }\r\n\r\n _updateCalendarHeader() {\r\n const showing = [\r\n ...this.widget.querySelector(\r\n `.${Namespace.css.dateContainer} div[style*=\"display: grid\"]`\r\n ).classList,\r\n ].find((x) => x.startsWith(Namespace.css.dateContainer));\r\n\r\n const [previous, switcher, next] = this.widget\r\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\r\n .getElementsByTagName('div');\r\n\r\n switch (showing) {\r\n case Namespace.css.decadesContainer:\r\n previous.setAttribute(\r\n 'title',\r\n this.optionsStore.options.localization.previousCentury\r\n );\r\n switcher.setAttribute('title', '');\r\n next.setAttribute(\r\n 'title',\r\n this.optionsStore.options.localization.nextCentury\r\n );\r\n break;\r\n case Namespace.css.yearsContainer:\r\n previous.setAttribute(\r\n 'title',\r\n this.optionsStore.options.localization.previousDecade\r\n );\r\n switcher.setAttribute(\r\n 'title',\r\n this.optionsStore.options.localization.selectDecade\r\n );\r\n next.setAttribute(\r\n 'title',\r\n this.optionsStore.options.localization.nextDecade\r\n );\r\n break;\r\n case Namespace.css.monthsContainer:\r\n previous.setAttribute(\r\n 'title',\r\n this.optionsStore.options.localization.previousYear\r\n );\r\n switcher.setAttribute(\r\n 'title',\r\n this.optionsStore.options.localization.selectYear\r\n );\r\n next.setAttribute(\r\n 'title',\r\n this.optionsStore.options.localization.nextYear\r\n );\r\n break;\r\n case Namespace.css.daysContainer:\r\n previous.setAttribute(\r\n 'title',\r\n this.optionsStore.options.localization.previousMonth\r\n );\r\n switcher.setAttribute(\r\n 'title',\r\n this.optionsStore.options.localization.selectMonth\r\n );\r\n next.setAttribute(\r\n 'title',\r\n this.optionsStore.options.localization.nextMonth\r\n );\r\n switcher.innerText = this.optionsStore.viewDate.format(\r\n this.optionsStore.options.localization.dayViewHeaderFormat\r\n );\r\n break;\r\n }\r\n switcher.innerText = switcher.getAttribute(showing);\r\n }\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(): void {\r\n if (!this.widget || !this._isVisible) return;\r\n\r\n this.widget.classList.remove(Namespace.css.show);\r\n\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 } as HideEvent);\r\n this._isVisible = false;\r\n }\r\n\r\n document.removeEventListener('click', this._documentClickEvent);\r\n }\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 /**\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) return;\r\n this.widget\r\n .querySelectorAll('[data-action]')\r\n .forEach((element) =>\r\n element.removeEventListener('click', this._actionsClickEvent)\r\n );\r\n this.widget.parentNode.removeChild(this.widget);\r\n this._widget = undefined;\r\n }\r\n\r\n /**\r\n * Builds the widgets html template.\r\n * @private\r\n */\r\n private _buildWidget(): HTMLElement {\r\n const template = document.createElement('div');\r\n template.classList.add(Namespace.css.widget);\r\n\r\n const dateView = document.createElement('div');\r\n dateView.classList.add(Namespace.css.dateContainer);\r\n dateView.append(\r\n this.getHeadTemplate(),\r\n this.decadeDisplay.getPicker(),\r\n this.yearDisplay.getPicker(),\r\n this.monthDisplay.getPicker(),\r\n this.dateDisplay.getPicker()\r\n );\r\n\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\r\n const toolbar = document.createElement('div');\r\n toolbar.classList.add(Namespace.css.toolbar);\r\n toolbar.append(...this.getToolbarElements());\r\n\r\n if (this.optionsStore.options.display.inline) {\r\n template.classList.add(Namespace.css.inline);\r\n }\r\n\r\n if (this.optionsStore.options.display.calendarWeeks) {\r\n template.classList.add('calendarWeeks');\r\n }\r\n\r\n if (\r\n this.optionsStore.options.display.sideBySide &&\r\n this._hasDate &&\r\n this._hasTime\r\n ) {\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\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\r\n if (this.optionsStore.options.display.toolbarPlacement === 'top') {\r\n template.appendChild(toolbar);\r\n }\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\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\r\n if (this.optionsStore.options.display.toolbarPlacement === 'bottom') {\r\n template.appendChild(toolbar);\r\n }\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\r\n this._widget = template;\r\n }\r\n\r\n /**\r\n * Returns true if the hours, minutes, or seconds component is turned on\r\n */\r\n get _hasTime(): boolean {\r\n return (\r\n 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\r\n /**\r\n * Returns true if the year, month, or date component is turned on\r\n */\r\n get _hasDate(): boolean {\r\n return (\r\n 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\r\n /**\r\n * Get the toolbar html based on options like buttons.today\r\n * @private\r\n */\r\n getToolbarElements(): HTMLElement[] {\r\n const toolbar = [];\r\n\r\n if (this.optionsStore.options.display.buttons.today) {\r\n const div = document.createElement('div');\r\n div.setAttribute('data-action', ActionTypes.today);\r\n div.setAttribute('title', this.optionsStore.options.localization.today);\r\n\r\n div.appendChild(\r\n this._iconTag(this.optionsStore.options.display.icons.today)\r\n );\r\n toolbar.push(div);\r\n }\r\n if (\r\n !this.optionsStore.options.display.sideBySide &&\r\n this._hasDate &&\r\n this._hasTime\r\n ) {\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 } else {\r\n title = this.optionsStore.options.localization.selectTime;\r\n icon = this.optionsStore.options.display.icons.time;\r\n }\r\n\r\n const div = document.createElement('div');\r\n div.setAttribute('data-action', ActionTypes.togglePicker);\r\n div.setAttribute('title', title);\r\n\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.clear);\r\n div.setAttribute('title', this.optionsStore.options.localization.clear);\r\n\r\n div.appendChild(\r\n this._iconTag(this.optionsStore.options.display.icons.clear)\r\n );\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.close);\r\n div.setAttribute('title', this.optionsStore.options.localization.close);\r\n\r\n div.appendChild(\r\n this._iconTag(this.optionsStore.options.display.icons.close)\r\n );\r\n toolbar.push(div);\r\n }\r\n\r\n return toolbar;\r\n }\r\n\r\n /***\r\n * Builds the base header template with next and previous icons\r\n * @private\r\n */\r\n getHeadTemplate(): HTMLElement {\r\n const calendarHeader = document.createElement('div');\r\n calendarHeader.classList.add(Namespace.css.calendarHeader);\r\n\r\n const previous = document.createElement('div');\r\n previous.classList.add(Namespace.css.previous);\r\n previous.setAttribute('data-action', ActionTypes.previous);\r\n previous.appendChild(\r\n this._iconTag(this.optionsStore.options.display.icons.previous)\r\n );\r\n\r\n const switcher = document.createElement('div');\r\n switcher.classList.add(Namespace.css.switch);\r\n switcher.setAttribute('data-action', ActionTypes.changeCalendarView);\r\n\r\n const next = document.createElement('div');\r\n next.classList.add(Namespace.css.next);\r\n next.setAttribute('data-action', ActionTypes.next);\r\n next.appendChild(\r\n this._iconTag(this.optionsStore.options.display.icons.next)\r\n );\r\n\r\n calendarHeader.append(previous, switcher, next);\r\n return calendarHeader;\r\n }\r\n\r\n /**\r\n * Builds an icon tag as either an ``\r\n * or with icons.type is `sprites` then an svg tag instead\r\n * @param iconClass\r\n * @private\r\n */\r\n _iconTag(iconClass: string): HTMLElement {\r\n if (this.optionsStore.options.display.icons.type === 'sprites') {\r\n const svg = document.createElement('svg');\r\n svg.innerHTML = ``;\r\n return svg;\r\n }\r\n const icon = document.createElement('i');\r\n DOMTokenList.prototype.add.apply(icon.classList, iconClass.split(' '));\r\n return icon;\r\n }\r\n\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 private _documentClickEvent = (e: MouseEvent) => {\r\n if (this.optionsStore.options.debug || (window as any).debug) return;\r\n\r\n if (\r\n this._isVisible &&\r\n !e.composedPath().includes(this.widget) && // click inside the widget\r\n !e.composedPath()?.includes(this.optionsStore.element) // click on the element\r\n ) {\r\n this.hide();\r\n }\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 private _actionsClickEvent = (e: MouseEvent) => {\r\n this._eventEmitters.action.emit({ e: e });\r\n };\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) this.hide();\r\n this._dispose();\r\n if (wasVisible) {\r\n this.show();\r\n }\r\n }\r\n}\r\n\r\nexport type Paint = (\r\n unit: Unit | 'decade',\r\n innerDate: DateTime,\r\n classes: string[],\r\n element: HTMLElement\r\n) => void;\r\n","import { DateTime, Unit } from './datetime';\nimport Collapse from './display/collapse';\nimport Namespace from './utilities/namespace';\nimport { OptionsStore } from './utilities/options';\nimport Dates from './dates';\nimport Validation from './validation';\nimport Display from './display';\nimport { EventEmitters } from './utilities/event-emitter';\nimport { serviceLocator } from './utilities/service-locator.js';\nimport ActionTypes from './utilities/action-types';\nimport CalendarModes from './utilities/calendar-modes';\n\n/**\n *\n */\nexport default class Actions {\n private optionsStore: OptionsStore;\n private validation: Validation;\n private dates: Dates;\n private display: Display;\n private _eventEmitters: EventEmitters;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n this.display = serviceLocator.locate(Display);\n this._eventEmitters = serviceLocator.locate(EventEmitters);\n\n this._eventEmitters.action.subscribe((result) => {\n this.do(result.e, result.action);\n });\n }\n\n /**\n * Performs the selected `action`. See ActionTypes\n * @param e This is normally a click event\n * @param action If not provided, then look for a [data-action]\n */\n do(e: any, action?: ActionTypes) {\n const currentTarget = e?.currentTarget;\n if (currentTarget?.classList?.contains(Namespace.css.disabled))\n return false;\n action = action || currentTarget?.dataset?.action;\n const lastPicked = (this.dates.lastPicked || this.optionsStore.viewDate)\n .clone;\n\n switch (action) {\n case ActionTypes.next:\n case ActionTypes.previous:\n this.handleNextPrevious(action);\n break;\n case ActionTypes.changeCalendarView:\n this.display._showMode(1);\n this.display._updateCalendarHeader();\n break;\n case ActionTypes.selectMonth:\n case ActionTypes.selectYear:\n case ActionTypes.selectDecade:\n const value = +currentTarget.dataset.value;\n switch (action) {\n case ActionTypes.selectMonth:\n this.optionsStore.viewDate.month = value;\n break;\n case ActionTypes.selectYear:\n case ActionTypes.selectDecade:\n this.optionsStore.viewDate.year = value;\n break;\n }\n\n if (\n this.optionsStore.currentCalendarViewMode ===\n this.optionsStore.minimumCalendarViewMode\n ) {\n this.dates.setValue(\n this.optionsStore.viewDate,\n this.dates.lastPickedIndex\n );\n if (!this.optionsStore.options.display.inline) {\n this.display.hide();\n }\n } else {\n this.display._showMode(-1);\n }\n break;\n case ActionTypes.selectDay:\n const day = this.optionsStore.viewDate.clone;\n if (currentTarget.classList.contains(Namespace.css.old)) {\n day.manipulate(-1, Unit.month);\n }\n if (currentTarget.classList.contains(Namespace.css.new)) {\n day.manipulate(1, Unit.month);\n }\n\n day.date = +currentTarget.dataset.day;\n let index = 0;\n if (this.optionsStore.options.multipleDates) {\n index = this.dates.pickedIndex(day, Unit.date);\n if (index !== -1) {\n this.dates.setValue(null, index); //deselect multi-date\n } else {\n this.dates.setValue(day, this.dates.lastPickedIndex + 1);\n }\n } else {\n this.dates.setValue(day, this.dates.lastPickedIndex);\n }\n\n if (\n !this.display._hasTime &&\n !this.optionsStore.options.display.keepOpen &&\n !this.optionsStore.options.display.inline &&\n !this.optionsStore.options.multipleDates\n ) {\n this.display.hide();\n }\n break;\n case ActionTypes.selectHour:\n let hour = +currentTarget.dataset.value;\n if (\n lastPicked.hours >= 12 &&\n !this.optionsStore.options.display.components.useTwentyfourHour\n )\n hour += 12;\n lastPicked.hours = hour;\n this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n this.hideOrClock(e);\n break;\n case ActionTypes.selectMinute:\n lastPicked.minutes = +currentTarget.dataset.value;\n this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n this.hideOrClock(e);\n break;\n case ActionTypes.selectSecond:\n lastPicked.seconds = +currentTarget.dataset.value;\n this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n this.hideOrClock(e);\n break;\n case ActionTypes.incrementHours:\n this.manipulateAndSet(lastPicked, Unit.hours);\n break;\n case ActionTypes.incrementMinutes:\n this.manipulateAndSet(\n lastPicked,\n Unit.minutes,\n this.optionsStore.options.stepping\n );\n break;\n case ActionTypes.incrementSeconds:\n this.manipulateAndSet(lastPicked, Unit.seconds);\n break;\n case ActionTypes.decrementHours:\n this.manipulateAndSet(lastPicked, Unit.hours, -1);\n break;\n case ActionTypes.decrementMinutes:\n this.manipulateAndSet(\n lastPicked,\n Unit.minutes,\n this.optionsStore.options.stepping * -1\n );\n break;\n case ActionTypes.decrementSeconds:\n this.manipulateAndSet(lastPicked, Unit.seconds, -1);\n break;\n case ActionTypes.toggleMeridiem:\n this.manipulateAndSet(\n lastPicked,\n Unit.hours,\n this.dates.lastPicked.hours >= 12 ? -12 : 12\n );\n break;\n case ActionTypes.togglePicker:\n if (\n currentTarget.getAttribute('title') ===\n this.optionsStore.options.localization.selectDate\n ) {\n currentTarget.setAttribute(\n 'title',\n this.optionsStore.options.localization.selectTime\n );\n currentTarget.innerHTML = this.display._iconTag(\n this.optionsStore.options.display.icons.time\n ).outerHTML;\n\n this.display._updateCalendarHeader();\n this.optionsStore.refreshCurrentView();\n } \n else {\n currentTarget.setAttribute(\n 'title',\n this.optionsStore.options.localization.selectDate\n );\n currentTarget.innerHTML = this.display._iconTag(\n this.optionsStore.options.display.icons.date\n ).outerHTML;\n if (this.display._hasTime) {\n this.do(e, ActionTypes.showClock);\n this.display._update('clock');\n }\n }\n this.display.widget\n .querySelectorAll(\n `.${Namespace.css.dateContainer}, .${Namespace.css.timeContainer}`\n )\n .forEach((htmlElement: HTMLElement) => Collapse.toggle(htmlElement));\n this._eventEmitters.viewUpdate.emit();\n break;\n case ActionTypes.showClock:\n case ActionTypes.showHours:\n case ActionTypes.showMinutes:\n case ActionTypes.showSeconds:\n this.optionsStore.currentView = 'clock';\n this.display.widget\n .querySelectorAll(`.${Namespace.css.timeContainer} > div`)\n .forEach(\n (htmlElement: HTMLElement) => (htmlElement.style.display = 'none')\n );\n\n let classToUse = '';\n switch (action) {\n case ActionTypes.showClock:\n classToUse = Namespace.css.clockContainer;\n this.display._update('clock');\n break;\n case ActionTypes.showHours:\n classToUse = Namespace.css.hourContainer;\n this.display._update(Unit.hours);\n break;\n case ActionTypes.showMinutes:\n classToUse = Namespace.css.minuteContainer;\n this.display._update(Unit.minutes);\n break;\n case ActionTypes.showSeconds:\n classToUse = Namespace.css.secondContainer;\n this.display._update(Unit.seconds);\n break;\n }\n\n ((\n this.display.widget.getElementsByClassName(classToUse)[0]\n )).style.display = 'grid';\n break;\n case ActionTypes.clear:\n this.dates.setValue(null);\n this.display._updateCalendarHeader();\n break;\n case ActionTypes.close:\n this.display.hide();\n break;\n case ActionTypes.today:\n const today = new DateTime().setLocale(\n this.optionsStore.options.localization.locale\n );\n this.optionsStore.viewDate = today;\n if (this.validation.isValid(today, Unit.date))\n this.dates.setValue(today, this.dates.lastPickedIndex);\n break;\n }\n }\n\n private handleNextPrevious(action: ActionTypes) {\n const { unit, step } =\n CalendarModes[this.optionsStore.currentCalendarViewMode];\n if (action === ActionTypes.next)\n this.optionsStore.viewDate.manipulate(step, unit);\n else this.optionsStore.viewDate.manipulate(step * -1, unit);\n this._eventEmitters.viewUpdate.emit();\n\n this.display._showMode();\n }\n\n /**\n * After setting the value it will either show the clock or hide the widget.\n * @param e\n */\n private hideOrClock(e) {\n if (\n this.optionsStore.options.display.components.useTwentyfourHour &&\n !this.optionsStore.options.display.components.minutes &&\n !this.optionsStore.options.display.keepOpen &&\n !this.optionsStore.options.display.inline\n ) {\n this.display.hide();\n } else {\n this.do(e, ActionTypes.showClock);\n }\n }\n\n /**\n * Common function to manipulate {@link lastPicked} by `unit`.\n * @param lastPicked\n * @param unit\n * @param value Value to change by\n */\n private manipulateAndSet(lastPicked: DateTime, unit: Unit, value = 1) {\n const newDate = lastPicked.manipulate(value, unit);\n if (this.validation.isValid(newDate, unit)) {\n this.dates.setValue(newDate, this.dates.lastPickedIndex);\n }\n }\n}\n","import Display from './display/index';\r\nimport Validation from './validation';\r\nimport Dates from './dates';\r\nimport Actions from './actions';\r\nimport { DateTime, DateTimeFormatOptions, Unit } from './datetime';\r\nimport Namespace from './utilities/namespace';\r\nimport Options, { OptionConverter, OptionsStore } from './utilities/options';\r\nimport {\r\n BaseEvent,\r\n ChangeEvent,\r\n ViewUpdateEvent,\r\n FailEvent,\r\n} from './utilities/event-types';\r\nimport { EventEmitters } from './utilities/event-emitter';\r\nimport {\r\n serviceLocator,\r\n setupServiceLocator,\r\n} from './utilities/service-locator';\r\nimport CalendarModes from './utilities/calendar-modes';\r\nimport DefaultOptions from './utilities/default-options';\r\nimport ActionTypes from './utilities/action-types';\r\n\r\n/**\r\n * A robust and powerful date/time picker component.\r\n */\r\nclass TempusDominus {\r\n _subscribers: { [key: string]: ((event: any) => {})[] } = {};\r\n private _isDisabled = false;\r\n private _toggle: HTMLElement;\r\n private _currentPromptTimeTimeout: any;\r\n private actions: Actions;\r\n private optionsStore: OptionsStore;\r\n private _eventEmitters: EventEmitters;\r\n display: Display;\r\n dates: Dates;\r\n\r\n constructor(element: HTMLElement, options: Options = {} as Options) {\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\r\n if (!element) {\r\n Namespace.errorMessages.mustProvideElement();\r\n }\r\n\r\n this.optionsStore.element = element;\r\n this._initializeOptions(options, DefaultOptions, true);\r\n this.optionsStore.viewDate.setLocale(\r\n this.optionsStore.options.localization.locale\r\n );\r\n this.optionsStore.unset = true;\r\n\r\n this._initializeInput();\r\n this._initializeToggle();\r\n\r\n if (this.optionsStore.options.display.inline) this.display.show();\r\n\r\n this._eventEmitters.triggerEvent.subscribe((e) => {\r\n this._triggerEvent(e);\r\n });\r\n\r\n this._eventEmitters.viewUpdate.subscribe(() => {\r\n this._viewUpdate();\r\n });\r\n }\r\n\r\n get viewDate() {\r\n return this.optionsStore.viewDate;\r\n }\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): void {\r\n if (reset) this._initializeOptions(options, DefaultOptions);\r\n else this._initializeOptions(options, this.optionsStore.options);\r\n this.display._rebuild();\r\n }\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(): void {\r\n if (this._isDisabled) return;\r\n this.display.toggle();\r\n }\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(): void {\r\n if (this._isDisabled) return;\r\n this.display.show();\r\n }\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(): void {\r\n this.display.hide();\r\n }\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(): void {\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 this.optionsStore.input?.setAttribute('disabled', 'disabled');\r\n this.display.hide();\r\n }\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(): void {\r\n this._isDisabled = false;\r\n this.optionsStore.input?.removeAttribute('disabled');\r\n }\r\n\r\n // noinspection JSUnusedGlobalSymbols\r\n /**\r\n * Clears all the selected dates\r\n * @public\r\n */\r\n clear(): void {\r\n this.dates.clear();\r\n }\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(\r\n eventTypes: string | string[],\r\n callbacks: (event: any) => void | ((event: any) => void)[]\r\n ): { unsubscribe: () => void } | { unsubscribe: () => void }[] {\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 } else {\r\n callBackArray = callbacks;\r\n }\r\n\r\n if (eventTypes.length !== callBackArray.length) {\r\n Namespace.errorMessages.subscribeMismatch();\r\n }\r\n\r\n const returnArray = [];\r\n\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\r\n this._subscribers[eventType].push(callBackArray[i]);\r\n\r\n returnArray.push({\r\n unsubscribe: this._unsubscribe.bind(\r\n this,\r\n eventType,\r\n this._subscribers[eventType].length - 1\r\n ),\r\n });\r\n\r\n if (eventTypes.length === 1) {\r\n return returnArray[0];\r\n }\r\n }\r\n\r\n return returnArray;\r\n }\r\n\r\n // noinspection JSUnusedGlobalSymbols\r\n /**\r\n * Hides the picker and removes event listeners\r\n */\r\n dispose() {\r\n this.display.hide();\r\n // this will clear the document click event listener\r\n this.display._dispose();\r\n this.optionsStore.input?.removeEventListener(\r\n 'change',\r\n this._inputChangeEvent\r\n );\r\n if (this.optionsStore.options.allowInputToggle) {\r\n this.optionsStore.input?.removeEventListener(\r\n 'click',\r\n this._toggleClickEvent\r\n );\r\n }\r\n this._toggle?.removeEventListener('click', this._toggleClickEvent);\r\n this._subscribers = {};\r\n }\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: string) {\r\n let asked = loadedLocales[language];\r\n if (!asked) return;\r\n this.updateOptions({\r\n localization: asked,\r\n });\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 private _triggerEvent(event: BaseEvent) {\r\n event.viewMode = this.optionsStore.currentView;\r\n\r\n const isChangeEvent = event.type === Namespace.events.change;\r\n if (isChangeEvent) {\r\n const { date, oldDate, isClear } = event as ChangeEvent;\r\n if (\r\n (date && oldDate && date.isSame(oldDate)) ||\r\n (!isClear && !date && !oldDate)\r\n ) {\r\n return;\r\n }\r\n this._handleAfterChangeEvent(event as ChangeEvent);\r\n\r\n this.optionsStore.input?.dispatchEvent(\r\n new CustomEvent(event.type, { detail: event as any })\r\n );\r\n }\r\n\r\n this.optionsStore.element.dispatchEvent(\r\n new CustomEvent(event.type, { detail: event as any })\r\n );\r\n\r\n if ((window as any).jQuery) {\r\n const $ = (window as any).jQuery;\r\n\r\n if (isChangeEvent && this.optionsStore.input) {\r\n $(this.optionsStore.input).trigger(event);\r\n } else {\r\n $(this.optionsStore.element).trigger(event);\r\n }\r\n }\r\n\r\n this._publish(event);\r\n }\r\n\r\n private _publish(event: BaseEvent) {\r\n // return if event is not subscribed\r\n if (!Array.isArray(this._subscribers[event.type])) {\r\n return;\r\n }\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 /**\r\n * Fires a ViewUpdate event when, for example, the month view is changed.\r\n * @param {Unit} unit\r\n * @private\r\n */\r\n private _viewUpdate() {\r\n this._triggerEvent({\r\n type: Namespace.events.update,\r\n viewDate: this.optionsStore.viewDate.clone,\r\n } as ViewUpdateEvent);\r\n }\r\n\r\n private _unsubscribe(eventName, index) {\r\n this._subscribers[eventName].splice(index, 1);\r\n }\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 private _initializeOptions(\r\n config: Options,\r\n mergeTo: Options,\r\n includeDataset = false\r\n ): void {\r\n config = OptionConverter._mergeOptions(config, mergeTo);\r\n if (includeDataset)\r\n config = OptionConverter._dataToOptions(\r\n this.optionsStore.element,\r\n config\r\n );\r\n\r\n OptionConverter._validateConflcits(config);\r\n\r\n config.viewDate = config.viewDate.setLocale(config.localization.locale);\r\n\r\n if (!this.optionsStore.viewDate.isSame(config.viewDate)) {\r\n this.optionsStore.viewDate = config.viewDate;\r\n }\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 (config.display.components.year) {\r\n this.optionsStore.minimumCalendarViewMode = 2;\r\n }\r\n if (config.display.components.month) {\r\n this.optionsStore.minimumCalendarViewMode = 1;\r\n }\r\n if (config.display.components.date) {\r\n this.optionsStore.minimumCalendarViewMode = 0;\r\n }\r\n\r\n this.optionsStore.currentCalendarViewMode = Math.max(\r\n this.optionsStore.minimumCalendarViewMode,\r\n this.optionsStore.currentCalendarViewMode\r\n );\r\n\r\n // Update view mode if needed\r\n if (\r\n CalendarModes[this.optionsStore.currentCalendarViewMode].name !==\r\n config.display.viewMode\r\n ) {\r\n this.optionsStore.currentCalendarViewMode = Math.max(\r\n CalendarModes.findIndex((x) => x.name === config.display.viewMode),\r\n this.optionsStore.minimumCalendarViewMode\r\n );\r\n }\r\n\r\n if (this.display?.isVisible) {\r\n this.display._update('all');\r\n }\r\n\r\n this.optionsStore.options = config;\r\n }\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 private _initializeInput() {\r\n if (this.optionsStore.element.tagName == 'INPUT') {\r\n this.optionsStore.input = this.optionsStore.element as HTMLInputElement;\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 } else {\r\n this.optionsStore.input =\r\n this.optionsStore.element.querySelector(query);\r\n }\r\n }\r\n\r\n if (!this.optionsStore.input) return;\r\n\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\r\n if (this.optionsStore.input.value) {\r\n this._inputChangeEvent();\r\n }\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 private _initializeToggle() {\r\n if (this.optionsStore.options.display.inline) 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 /**\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 private _handleAfterChangeEvent(e: ChangeEvent) {\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 // clock component is already showing\r\n this.display.widget\r\n ?.getElementsByClassName(Namespace.css.show)[0]\r\n .classList.contains(Namespace.css.timeContainer)\r\n )\r\n return;\r\n\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 (\r\n (!e.oldDate && this.optionsStore.options.useCurrent) ||\r\n (e.oldDate && e.date?.isSame(e.oldDate))\r\n ) {\r\n return;\r\n }\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(\r\n `.${Namespace.css.switch} div`\r\n ),\r\n },\r\n action: ActionTypes.togglePicker,\r\n });\r\n }\r\n }, this.optionsStore.options.promptTimeOnDateChangeTransitionDelay);\r\n }\r\n\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 private _inputChangeEvent = () => {\r\n const setViewDate = () => {\r\n if (this.dates.lastPicked)\r\n this.optionsStore.viewDate = this.dates.lastPicked;\r\n };\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(\r\n this.optionsStore.options.multipleDatesSeparator\r\n );\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 } catch {\r\n console.warn(\r\n 'TD: Something went wrong trying to set the multidate 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 /**\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 private _toggleClickEvent = () => {\r\n this.toggle();\r\n };\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\nconst loadedLocales = {};\r\n\r\n/**\r\n * Called from a locale plugin.\r\n * @param locale locale object for localization options\r\n * @param name name of the language e.g 'ru', 'en-gb'\r\n */\r\nconst loadLocale = (locale) => {\r\n if (loadedLocales[locale.name]) return;\r\n loadedLocales[locale.name] = locale.localization;\r\n};\r\n\r\n/**\r\n * A sets the global localization options to the provided locale name.\r\n * `locadLocale` MUST be called first.\r\n * @param locale\r\n */\r\nconst locale = (locale: string) => {\r\n let asked = loadedLocales[locale];\r\n if (!asked) return;\r\n DefaultOptions.localization = asked;\r\n};\r\n\r\nconst extend = function (plugin, option) {\r\n if (!plugin.$i) {\r\n // install plugin only once\r\n plugin.load(option, { TempusDominus, Dates, Display }, this);\r\n plugin.$i = true;\r\n }\r\n return this;\r\n};\r\n\r\nexport {\r\n TempusDominus,\r\n extend,\r\n loadLocale,\r\n locale,\r\n Namespace,\r\n DefaultOptions,\r\n DateTime,\r\n Options,\r\n Unit,\r\n DateTimeFormatOptions,\r\n};\r\n"],"names":["Unit","ActionTypes","SecondDisplay","createPopper"],"mappings":"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"}