{"version":3,"file":"static/js/544.5cb7fa6e.chunk.js","sources":["../node_modules/dayjs/plugin/isBetween.js","../node_modules/fecha/src/fecha.ts","../node_modules/hotel-datepicker/dist/js/hotel-datepicker.esm.js"],"sourceRoot":"","sourcesContent":["!function(e,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isBetween=i()}(this,(function(){\"use strict\";return function(e,i,t){i.prototype.isBetween=function(e,i,s,f){var n=t(e),o=t(i),r=\"(\"===(f=f||\"()\")[0],u=\")\"===f[1];return(r?this.isAfter(n,s):!this.isBefore(n,s))&&(u?this.isBefore(o,s):!this.isAfter(o,s))||(r?this.isBefore(n,s):!this.isAfter(n,s))&&(u?this.isAfter(o,s):!this.isBefore(o,s))}}}));","const token = /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|Z|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\nconst twoDigitsOptional = \"\\\\d\\\\d?\";\nconst twoDigits = \"\\\\d\\\\d\";\nconst threeDigits = \"\\\\d{3}\";\nconst fourDigits = \"\\\\d{4}\";\nconst word = \"[^\\\\s]+\";\nconst literal = /\\[([^]*?)\\]/gm;\n\ntype DateInfo = {\n year: number;\n month: number;\n day: number;\n hour: number;\n minute: number;\n second: number;\n millisecond: number;\n isPm: number | null;\n timezoneOffset: number | null;\n};\n\nexport type I18nSettings = {\n amPm: [string, string];\n dayNames: Days;\n dayNamesShort: Days;\n monthNames: Months;\n monthNamesShort: Months;\n DoFn(dayOfMonth: number): string;\n};\n\nexport type I18nSettingsOptional = Partial;\n\nexport type Days = [string, string, string, string, string, string, string];\nexport type Months = [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string\n];\n\nfunction shorten(arr: T, sLen: number): string[] {\n const newArr: string[] = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n newArr.push(arr[i].substr(0, sLen));\n }\n return newArr;\n}\n\nconst monthUpdate = (\n arrName: \"monthNames\" | \"monthNamesShort\" | \"dayNames\" | \"dayNamesShort\"\n) => (v: string, i18n: I18nSettings): number | null => {\n const lowerCaseArr = i18n[arrName].map(v => v.toLowerCase());\n const index = lowerCaseArr.indexOf(v.toLowerCase());\n if (index > -1) {\n return index;\n }\n return null;\n};\n\nexport function assign(a: A): A;\nexport function assign(a: A, b: B): A & B;\nexport function assign(a: A, b: B, c: C): A & B & C;\nexport function assign(a: A, b: B, c: C, d: D): A & B & C & D;\nexport function assign(origObj: any, ...args: any[]): any {\n for (const obj of args) {\n for (const key in obj) {\n // @ts-ignore ex\n origObj[key] = obj[key];\n }\n }\n return origObj;\n}\n\nconst dayNames: Days = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\"\n];\nconst monthNames: Months = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n];\n\nconst monthNamesShort: Months = shorten(monthNames, 3) as Months;\nconst dayNamesShort: Days = shorten(dayNames, 3) as Days;\n\nconst defaultI18n: I18nSettings = {\n dayNamesShort,\n dayNames,\n monthNamesShort,\n monthNames,\n amPm: [\"am\", \"pm\"],\n DoFn(dayOfMonth: number) {\n return (\n dayOfMonth +\n [\"th\", \"st\", \"nd\", \"rd\"][\n dayOfMonth % 10 > 3\n ? 0\n : ((dayOfMonth - (dayOfMonth % 10) !== 10 ? 1 : 0) * dayOfMonth) % 10\n ]\n );\n }\n};\nlet globalI18n = assign({}, defaultI18n);\nconst setGlobalDateI18n = (i18n: I18nSettingsOptional): I18nSettings =>\n (globalI18n = assign(globalI18n, i18n));\n\nconst regexEscape = (str: string): string =>\n str.replace(/[|\\\\{()[^$+*?.-]/g, \"\\\\$&\");\n\nconst pad = (val: string | number, len = 2): string => {\n val = String(val);\n while (val.length < len) {\n val = \"0\" + val;\n }\n return val;\n};\n\nconst formatFlags: Record<\n string,\n (dateObj: Date, i18n: I18nSettings) => string\n> = {\n D: (dateObj: Date): string => String(dateObj.getDate()),\n DD: (dateObj: Date): string => pad(dateObj.getDate()),\n Do: (dateObj: Date, i18n: I18nSettings): string =>\n i18n.DoFn(dateObj.getDate()),\n d: (dateObj: Date): string => String(dateObj.getDay()),\n dd: (dateObj: Date): string => pad(dateObj.getDay()),\n ddd: (dateObj: Date, i18n: I18nSettings): string =>\n i18n.dayNamesShort[dateObj.getDay()],\n dddd: (dateObj: Date, i18n: I18nSettings): string =>\n i18n.dayNames[dateObj.getDay()],\n M: (dateObj: Date): string => String(dateObj.getMonth() + 1),\n MM: (dateObj: Date): string => pad(dateObj.getMonth() + 1),\n MMM: (dateObj: Date, i18n: I18nSettings): string =>\n i18n.monthNamesShort[dateObj.getMonth()],\n MMMM: (dateObj: Date, i18n: I18nSettings): string =>\n i18n.monthNames[dateObj.getMonth()],\n YY: (dateObj: Date): string =>\n pad(String(dateObj.getFullYear()), 4).substr(2),\n YYYY: (dateObj: Date): string => pad(dateObj.getFullYear(), 4),\n h: (dateObj: Date): string => String(dateObj.getHours() % 12 || 12),\n hh: (dateObj: Date): string => pad(dateObj.getHours() % 12 || 12),\n H: (dateObj: Date): string => String(dateObj.getHours()),\n HH: (dateObj: Date): string => pad(dateObj.getHours()),\n m: (dateObj: Date): string => String(dateObj.getMinutes()),\n mm: (dateObj: Date): string => pad(dateObj.getMinutes()),\n s: (dateObj: Date): string => String(dateObj.getSeconds()),\n ss: (dateObj: Date): string => pad(dateObj.getSeconds()),\n S: (dateObj: Date): string =>\n String(Math.round(dateObj.getMilliseconds() / 100)),\n SS: (dateObj: Date): string =>\n pad(Math.round(dateObj.getMilliseconds() / 10), 2),\n SSS: (dateObj: Date): string => pad(dateObj.getMilliseconds(), 3),\n a: (dateObj: Date, i18n: I18nSettings): string =>\n dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1],\n A: (dateObj: Date, i18n: I18nSettings): string =>\n dateObj.getHours() < 12\n ? i18n.amPm[0].toUpperCase()\n : i18n.amPm[1].toUpperCase(),\n ZZ(dateObj: Date): string {\n const offset = dateObj.getTimezoneOffset();\n return (\n (offset > 0 ? \"-\" : \"+\") +\n pad(Math.floor(Math.abs(offset) / 60) * 100 + (Math.abs(offset) % 60), 4)\n );\n },\n Z(dateObj: Date): string {\n const offset = dateObj.getTimezoneOffset();\n return (\n (offset > 0 ? \"-\" : \"+\") +\n pad(Math.floor(Math.abs(offset) / 60), 2) +\n \":\" +\n pad(Math.abs(offset) % 60, 2)\n );\n }\n};\n\ntype ParseInfo = [\n keyof DateInfo,\n string,\n ((v: string, i18n: I18nSettings) => number | null)?,\n string?\n];\nconst monthParse = (v: string): number => +v - 1;\nconst emptyDigits: ParseInfo = [null, twoDigitsOptional];\nconst emptyWord: ParseInfo = [null, word];\nconst amPm: ParseInfo = [\n \"isPm\",\n word,\n (v: string, i18n: I18nSettings): number | null => {\n const val = v.toLowerCase();\n if (val === i18n.amPm[0]) {\n return 0;\n } else if (val === i18n.amPm[1]) {\n return 1;\n }\n return null;\n }\n];\nconst timezoneOffset: ParseInfo = [\n \"timezoneOffset\",\n \"[^\\\\s]*?[\\\\+\\\\-]\\\\d\\\\d:?\\\\d\\\\d|[^\\\\s]*?Z?\",\n (v: string): number | null => {\n const parts = (v + \"\").match(/([+-]|\\d\\d)/gi);\n\n if (parts) {\n const minutes = +parts[1] * 60 + parseInt(parts[2], 10);\n return parts[0] === \"+\" ? minutes : -minutes;\n }\n\n return 0;\n }\n];\nconst parseFlags: Record = {\n D: [\"day\", twoDigitsOptional],\n DD: [\"day\", twoDigits],\n Do: [\"day\", twoDigitsOptional + word, (v: string): number => parseInt(v, 10)],\n M: [\"month\", twoDigitsOptional, monthParse],\n MM: [\"month\", twoDigits, monthParse],\n YY: [\n \"year\",\n twoDigits,\n (v: string): number => {\n const now = new Date();\n const cent = +(\"\" + now.getFullYear()).substr(0, 2);\n return +(\"\" + (+v > 68 ? cent - 1 : cent) + v);\n }\n ],\n h: [\"hour\", twoDigitsOptional, undefined, \"isPm\"],\n hh: [\"hour\", twoDigits, undefined, \"isPm\"],\n H: [\"hour\", twoDigitsOptional],\n HH: [\"hour\", twoDigits],\n m: [\"minute\", twoDigitsOptional],\n mm: [\"minute\", twoDigits],\n s: [\"second\", twoDigitsOptional],\n ss: [\"second\", twoDigits],\n YYYY: [\"year\", fourDigits],\n S: [\"millisecond\", \"\\\\d\", (v: string): number => +v * 100],\n SS: [\"millisecond\", twoDigits, (v: string): number => +v * 10],\n SSS: [\"millisecond\", threeDigits],\n d: emptyDigits,\n dd: emptyDigits,\n ddd: emptyWord,\n dddd: emptyWord,\n MMM: [\"month\", word, monthUpdate(\"monthNamesShort\")],\n MMMM: [\"month\", word, monthUpdate(\"monthNames\")],\n a: amPm,\n A: amPm,\n ZZ: timezoneOffset,\n Z: timezoneOffset\n};\n\n// Some common format strings\nconst globalMasks: { [key: string]: string } = {\n default: \"ddd MMM DD YYYY HH:mm:ss\",\n shortDate: \"M/D/YY\",\n mediumDate: \"MMM D, YYYY\",\n longDate: \"MMMM D, YYYY\",\n fullDate: \"dddd, MMMM D, YYYY\",\n isoDate: \"YYYY-MM-DD\",\n isoDateTime: \"YYYY-MM-DDTHH:mm:ssZ\",\n shortTime: \"HH:mm\",\n mediumTime: \"HH:mm:ss\",\n longTime: \"HH:mm:ss.SSS\"\n};\nconst setGlobalDateMasks = (masks: {\n [key: string]: string;\n}): { [key: string]: string } => assign(globalMasks, masks);\n\n/***\n * Format a date\n * @method format\n * @param {Date|number} dateObj\n * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'\n * @returns {string} Formatted date string\n */\nconst format = (\n dateObj: Date,\n mask: string = globalMasks[\"default\"],\n i18n: I18nSettingsOptional = {}\n): string => {\n if (typeof dateObj === \"number\") {\n dateObj = new Date(dateObj);\n }\n\n if (\n Object.prototype.toString.call(dateObj) !== \"[object Date]\" ||\n isNaN(dateObj.getTime())\n ) {\n throw new Error(\"Invalid Date pass to format\");\n }\n\n mask = globalMasks[mask] || mask;\n\n const literals: string[] = [];\n\n // Make literals inactive by replacing them with @@@\n mask = mask.replace(literal, function($0, $1) {\n literals.push($1);\n return \"@@@\";\n });\n\n const combinedI18nSettings: I18nSettings = assign(\n assign({}, globalI18n),\n i18n\n );\n // Apply formatting rules\n mask = mask.replace(token, $0 =>\n formatFlags[$0](dateObj, combinedI18nSettings)\n );\n // Inline literal values back into the formatted value\n return mask.replace(/@@@/g, () => literals.shift());\n};\n\n/**\n * Parse a date string into a Javascript Date object /\n * @method parse\n * @param {string} dateStr Date string\n * @param {string} format Date parse format\n * @param {i18n} I18nSettingsOptional Full or subset of I18N settings\n * @returns {Date|null} Returns Date object. Returns null what date string is invalid or doesn't match format\n */\nfunction parse(\n dateStr: string,\n format: string,\n i18n: I18nSettingsOptional = {}\n): Date | null {\n if (typeof format !== \"string\") {\n throw new Error(\"Invalid format in fecha parse\");\n }\n\n // Check to see if the format is actually a mask\n format = globalMasks[format] || format;\n\n // Avoid regular expression denial of service, fail early for really long strings\n // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\n if (dateStr.length > 1000) {\n return null;\n }\n\n // Default to the beginning of the year.\n const today = new Date();\n const dateInfo: DateInfo = {\n year: today.getFullYear(),\n month: 0,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n isPm: null,\n timezoneOffset: null\n };\n const parseInfo: ParseInfo[] = [];\n const literals: string[] = [];\n\n // Replace all the literals with @@@. Hopefully a string that won't exist in the format\n let newFormat = format.replace(literal, ($0, $1) => {\n literals.push(regexEscape($1));\n return \"@@@\";\n });\n const specifiedFields: { [field: string]: boolean } = {};\n const requiredFields: { [field: string]: boolean } = {};\n\n // Change every token that we find into the correct regex\n newFormat = regexEscape(newFormat).replace(token, $0 => {\n const info = parseFlags[$0];\n const [field, regex, , requiredField] = info;\n\n // Check if the person has specified the same field twice. This will lead to confusing results.\n if (specifiedFields[field]) {\n throw new Error(`Invalid format. ${field} specified twice in format`);\n }\n\n specifiedFields[field] = true;\n\n // Check if there are any required fields. For instance, 12 hour time requires AM/PM specified\n if (requiredField) {\n requiredFields[requiredField] = true;\n }\n\n parseInfo.push(info);\n return \"(\" + regex + \")\";\n });\n\n // Check all the required fields are present\n Object.keys(requiredFields).forEach(field => {\n if (!specifiedFields[field]) {\n throw new Error(\n `Invalid format. ${field} is required in specified format`\n );\n }\n });\n\n // Add back all the literals after\n newFormat = newFormat.replace(/@@@/g, () => literals.shift());\n\n // Check if the date string matches the format. If it doesn't return null\n const matches = dateStr.match(new RegExp(newFormat, \"i\"));\n if (!matches) {\n return null;\n }\n\n const combinedI18nSettings: I18nSettings = assign(\n assign({}, globalI18n),\n i18n\n );\n\n // For each match, call the parser function for that date part\n for (let i = 1; i < matches.length; i++) {\n const [field, , parser] = parseInfo[i - 1];\n const value = parser\n ? parser(matches[i], combinedI18nSettings)\n : +matches[i];\n\n // If the parser can't make sense of the value, return null\n if (value == null) {\n return null;\n }\n\n dateInfo[field] = value;\n }\n\n if (dateInfo.isPm === 1 && dateInfo.hour != null && +dateInfo.hour !== 12) {\n dateInfo.hour = +dateInfo.hour + 12;\n } else if (dateInfo.isPm === 0 && +dateInfo.hour === 12) {\n dateInfo.hour = 0;\n }\n\n let dateTZ: Date;\n if (dateInfo.timezoneOffset == null) {\n dateTZ = new Date(\n dateInfo.year,\n dateInfo.month,\n dateInfo.day,\n dateInfo.hour,\n dateInfo.minute,\n dateInfo.second,\n dateInfo.millisecond\n );\n const validateFields: [\n \"month\" | \"day\" | \"hour\" | \"minute\" | \"second\",\n \"getMonth\" | \"getDate\" | \"getHours\" | \"getMinutes\" | \"getSeconds\"\n ][] = [\n [\"month\", \"getMonth\"],\n [\"day\", \"getDate\"],\n [\"hour\", \"getHours\"],\n [\"minute\", \"getMinutes\"],\n [\"second\", \"getSeconds\"]\n ];\n for (let i = 0, len = validateFields.length; i < len; i++) {\n // Check to make sure the date field is within the allowed range. Javascript dates allows values\n // outside the allowed range. If the values don't match the value was invalid\n if (\n specifiedFields[validateFields[i][0]] &&\n dateInfo[validateFields[i][0]] !== dateTZ[validateFields[i][1]]()\n ) {\n return null;\n }\n }\n } else {\n dateTZ = new Date(\n Date.UTC(\n dateInfo.year,\n dateInfo.month,\n dateInfo.day,\n dateInfo.hour,\n dateInfo.minute - dateInfo.timezoneOffset,\n dateInfo.second,\n dateInfo.millisecond\n )\n );\n\n // We can't validate dates in another timezone unfortunately. Do a basic check instead\n if (\n dateInfo.month > 11 ||\n dateInfo.month < 0 ||\n dateInfo.day > 31 ||\n dateInfo.day < 1 ||\n dateInfo.hour > 23 ||\n dateInfo.hour < 0 ||\n dateInfo.minute > 59 ||\n dateInfo.minute < 0 ||\n dateInfo.second > 59 ||\n dateInfo.second < 0\n ) {\n return null;\n }\n }\n\n // Don't allow invalid dates\n\n return dateTZ;\n}\nexport default {\n format,\n parse,\n defaultI18n,\n setGlobalDateI18n,\n setGlobalDateMasks\n};\nexport { format, parse, defaultI18n, setGlobalDateI18n, setGlobalDateMasks };\n","/*! hotel-datepicker 4.11.2 - Copyright 2024 Benito Lopez (http://lopezb.com) - https://github.com/benitolopez/hotel-datepicker - MIT */\nimport * as fecha from 'fecha';\n\nlet idCounter = 0;\nclass HotelDatepicker {\n constructor(input, options) {\n this._boundedEventHandlers = {};\n this.id = HotelDatepicker.getNewId();\n\n // Set default values\n const opts = options || {};\n this.className = opts.className || \"datepicker\";\n this.format = opts.format || \"YYYY-MM-DD\";\n this.infoFormat = opts.infoFormat || this.format;\n this.ariaDayFormat = opts.ariaDayFormat || \"dddd, MMMM DD, YYYY\";\n this.separator = opts.separator || \" - \";\n this.startOfWeek = opts.startOfWeek || \"sunday\"; // Or monday\n this.startDate = opts.startDate || new Date();\n this.endDate = opts.endDate || false;\n this.minNights = opts.minNights || 1;\n this.minNightsMultiple = opts.minNightsMultiple || false;\n this.maxNights = opts.maxNights || 0;\n this.selectForward = opts.selectForward || false;\n this.disabledDates = opts.disabledDates || [];\n this.noCheckInDates = opts.noCheckInDates || [];\n this.noCheckOutDates = opts.noCheckOutDates || [];\n this.disabledDaysOfWeek = opts.disabledDaysOfWeek || [];\n this.noCheckInDaysOfWeek = opts.noCheckInDaysOfWeek || [];\n this.noCheckOutDaysOfWeek = opts.noCheckOutDaysOfWeek || [];\n this.daysWithExtraText = [];\n this.enableCheckout = opts.enableCheckout || false;\n this.preventContainerClose = opts.preventContainerClose || false;\n this.container = opts.container || \"\";\n this.animationSpeed = opts.animationSpeed || \".5s\";\n this.hoveringTooltip = opts.hoveringTooltip || true; // Or a function\n this.autoClose = opts.autoClose === undefined ? true : opts.autoClose;\n this.showTopbar = opts.showTopbar === undefined ? true : opts.showTopbar;\n this.topbarPosition = opts.topbarPosition === \"bottom\" ? \"bottom\" : \"top\";\n this.moveBothMonths = opts.moveBothMonths || false;\n this.inline = opts.inline || false;\n this.clearButton = opts.clearButton || false;\n this.submitButton = Boolean(this.inline && opts.submitButton);\n this.submitButtonName = this.submitButton && opts.submitButtonName ? opts.submitButtonName : \"\";\n this.closeOnScroll = opts.closeOnScroll || false;\n this.i18n = opts.i18n || {\n selected: \"Your stay:\",\n night: \"Night\",\n nights: \"Nights\",\n button: \"Close\",\n clearButton: \"Clear\",\n submitButton: \"Submit\",\n \"checkin-disabled\": \"Check-in disabled\",\n \"checkout-disabled\": \"Check-out disabled\",\n \"day-names-short\": [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n \"day-names\": [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n \"month-names-short\": [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n \"month-names\": [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n \"error-more\": \"Date range should not be more than 1 night\",\n \"error-more-plural\": \"Date range should not be more than %d nights\",\n \"error-less\": \"Date range should not be less than 1 night\",\n \"error-less-plural\": \"Date range should not be less than %d nights\",\n \"info-more\": \"Please select a date range of at least 1 night\",\n \"info-more-plural\": \"Please select a date range of at least %d nights\",\n \"info-range\": \"Please select a date range between %d and %d nights\",\n \"info-range-equal\": \"Please select a date range of %d nights\",\n \"info-default\": \"Please select a date range\",\n \"aria-application\": \"Calendar\",\n \"aria-selected-checkin\": \"Selected as check-in date, %s\",\n \"aria-selected-checkout\": \"Selected as check-out date, %s\",\n \"aria-selected\": \"Selected, %s\",\n \"aria-disabled\": \"Not available, %s\",\n \"aria-choose-checkin\": \"Choose %s as your check-in date\",\n \"aria-choose-checkout\": \"Choose %s as your check-out date\",\n \"aria-prev-month\": \"Move backward to switch to the previous month\",\n \"aria-next-month\": \"Move forward to switch to the next month\",\n \"aria-close-button\": \"Close the datepicker\",\n \"aria-clear-button\": \"Clear the selected dates\",\n \"aria-submit-button\": \"Submit the form\"\n };\n this.getValue = opts.getValue || function () {\n return input.value;\n };\n this.setValue = opts.setValue || function (s) {\n input.value = s;\n };\n this.onDayClick = opts.onDayClick === undefined ? false : opts.onDayClick;\n this.onOpenDatepicker = opts.onOpenDatepicker === undefined ? false : opts.onOpenDatepicker;\n this.onSelectRange = opts.onSelectRange === undefined ? false : opts.onSelectRange;\n this.extraDayText = opts.extraDayText === undefined ? false : opts.extraDayText;\n\n // DOM input\n this.input = input;\n\n // Initialize the datepicker\n this.init();\n }\n addBoundedListener(node, event, handler, capture) {\n if (!(node in this._boundedEventHandlers)) {\n // _boundedEventHandlers stores references to nodes\n this._boundedEventHandlers[node] = {};\n }\n if (!(event in this._boundedEventHandlers[node])) {\n // Each entry contains another entry for each event type\n this._boundedEventHandlers[node][event] = [];\n }\n // Capture reference\n const boundedHandler = handler.bind(this);\n this._boundedEventHandlers[node][event].push([boundedHandler, capture]);\n node.addEventListener(event, boundedHandler, capture);\n }\n removeAllBoundedListeners(node, event) {\n if (node in this._boundedEventHandlers) {\n const handlers = this._boundedEventHandlers[node];\n if (event in handlers) {\n const eventHandlers = handlers[event];\n for (let i = eventHandlers.length; i--;) {\n const handler = eventHandlers[i];\n node.removeEventListener(event, handler[0], handler[1]);\n }\n }\n }\n }\n static getNewId() {\n return ++idCounter;\n }\n setFechaI18n() {\n fecha.setGlobalDateI18n({\n dayNamesShort: this.i18n[\"day-names-short\"],\n dayNames: this.i18n[\"day-names\"],\n monthNamesShort: this.i18n[\"month-names-short\"],\n monthNames: this.i18n[\"month-names\"]\n });\n }\n getWeekDayNames() {\n let week = \"\";\n\n // Start from monday if we passed that option\n if (this.startOfWeek === \"monday\") {\n for (let i = 0; i < 7; i++) {\n week += '' + this.lang(\"day-names-short\")[(1 + i) % 7] + \"\";\n }\n return week;\n }\n\n // Otherwise start from sunday (default)\n for (let i = 0; i < 7; i++) {\n week += '' + this.lang(\"day-names-short\")[i] + \"\";\n }\n return week;\n }\n getMonthDom(month) {\n // Get month DOM element\n return document.getElementById(this.getMonthTableId(month));\n }\n getMonthName(m) {\n // Get month name\n return this.lang(\"month-names\")[m];\n }\n getDatepickerId() {\n // Get datepicker ID\n return this.className + \"-\" + this.generateId();\n }\n getMonthTableId(month) {\n // Get month table ID\n return \"month-\" + month + \"-\" + this.generateId();\n }\n getCloseButtonId() {\n // Get close button ID\n return \"close-\" + this.generateId();\n }\n getClearButtonId() {\n // Get close button ID\n return \"clear-\" + this.generateId();\n }\n getSubmitButtonId() {\n // Get close button ID\n return \"submit-\" + this.generateId();\n }\n getTooltipId() {\n // Get close button ID\n return \"tooltip-\" + this.generateId();\n }\n getNextMonth(month) {\n // Get next month date\n const _m = new Date(month.valueOf());\n return new Date(_m.setMonth(_m.getMonth() + 1, 1));\n }\n getPrevMonth(month) {\n // Get previous month date\n const _m = new Date(month.valueOf());\n return new Date(_m.setMonth(_m.getMonth() - 1, 1));\n }\n getDateString(date) {\n let format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.format;\n // Format date\n this.setFechaI18n();\n return fecha.format(date, format);\n }\n parseDate(date) {\n let format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.format;\n // Parse a date object\n this.setFechaI18n();\n return fecha.parse(date, format);\n }\n init() {\n // DOM container\n this.parent = this.container ? this.container : this.input.parentElement;\n\n // Start date of the selected range\n this.start = false;\n\n // End date of the selected range\n this.end = false;\n\n // Set the minimum of days required by the daterange\n this.minDays = this.minNights > 1 ? this.minNights + 1 : 2;\n\n // Set the maximum of days required by the daterange\n this.maxDays = this.maxNights > 0 ? this.maxNights + 1 : 0;\n\n // Set startDate if we passed that option\n if (this.startDate && typeof this.startDate === \"string\") {\n this.startDate = this.parseDate(this.startDate);\n }\n\n // Set endDate if we passed that option\n if (this.endDate && typeof this.endDate === \"string\") {\n this.endDate = this.parseDate(this.endDate);\n }\n\n // Hide tooltip on touch devices\n if (this.isTouchDevice()) {\n this.hoveringTooltip = false;\n }\n\n // Flag that checks if the datepicker is open\n this.isOpen = false;\n\n // Flag that checks if the second date of the range is set\n this.changed = false;\n\n // Flag that checks if we exit from the datepicker with the ESC key\n this.justEsc = false;\n\n // Flag that checks if we datepicker is on focus\n this.isOnFocus = false;\n\n // Create the DOM elements\n this.createDom();\n\n // Set default time\n let defaultTime = new Date();\n if (this.startDate && this.compareMonth(defaultTime, this.startDate) < 0) {\n defaultTime = new Date(this.startDate.getTime());\n }\n if (this.endDate && this.compareMonth(this.getNextMonth(defaultTime), this.endDate) > 0) {\n defaultTime = new Date(this.getPrevMonth(this.endDate.getTime()));\n }\n\n // Parse disabled dates\n if (this.disabledDates.length > 0) {\n this.parseDisabledDates();\n }\n\n // Parse disabled days\n if (this.disabledDaysOfWeek.length > 0) {\n this.getDisabledDays();\n }\n\n // Show months\n this.showMonth(defaultTime, 1);\n this.showMonth(this.getNextMonth(defaultTime), 2);\n this.setDayIndexes();\n\n // Print default info in top bar\n this.topBarDefaultText();\n\n // Open datepicker in inline mode\n if (this.inline) {\n this.openDatepicker();\n if (this.submitButton) {\n const submitButton = document.getElementById(this.getSubmitButtonId());\n submitButton.disabled = true;\n submitButton.setAttribute(\"aria-disabled\", \"true\");\n }\n }\n if (this.clearButton) {\n if (this.inline || !this.start && !this.end) {\n const clearButton = document.getElementById(this.getClearButtonId());\n clearButton.disabled = true;\n clearButton.setAttribute(\"aria-disabled\", \"true\");\n }\n }\n\n // Attach listeners\n this.addListeners();\n\n // Flag for first disabled date\n this.isFirstDisabledDate = 0;\n\n // Holds last disabled date\n this.lastDisabledDate = false;\n\n // Add aria attributes\n this.setDayAriaAttributes();\n }\n addListeners() {\n // Next month button\n const nextButtons = this.datepicker.getElementsByClassName(this.className + \"__month-button--next\");\n for (let i = 0; i < nextButtons.length; i++) {\n nextButtons[i].addEventListener(\"click\", evt => this.goToNextMonth(evt));\n }\n\n // Previous month button\n const prevButtons = this.datepicker.getElementsByClassName(this.className + \"__month-button--prev\");\n for (let i = 0; i < prevButtons.length; i++) {\n prevButtons[i].addEventListener(\"click\", evt => this.goToPreviousMonth(evt));\n }\n\n // Open the datepicker on the input click\n this.addBoundedListener(this.input, \"click\", evt => this.openDatepicker(evt));\n if (this.showTopbar && !this.inline) {\n // Close the datepicker on the button click\n document.getElementById(this.getCloseButtonId()).addEventListener(\"click\", evt => this.closeDatepicker(evt));\n }\n if (this.showTopbar && this.clearButton) {\n // Clear the datepicker on the button click\n document.getElementById(this.getClearButtonId()).addEventListener(\"click\", evt => this.clearDatepicker(evt));\n }\n\n // Close the datepicker on resize?\n // The problem is that mobile keyboards trigger the resize event closing\n // the datepicker. There are some workarounds (http://stackoverflow.com/q/14902321)\n // but for now I will disable this option. I'm open to new ideas.\n // window.addEventListener('resize', evt => this.closeDatepicker(evt));\n\n // Re-check datepicker, buttons, etc after resize\n window.addEventListener(\"resize\", evt => this.onResizeDatepicker(evt));\n\n // Add a mouseover event listener to the document. This will help us to:\n // 1 - Handle the hover on calendar days\n this.datepicker.addEventListener(\"mouseover\", evt => this.datepickerHover(evt));\n\n // Add a mouseout event listener to the document. This will help us to:\n // 1 - Hide the tooltip on the mouseout event on days\n this.datepicker.addEventListener(\"mouseout\", evt => this.datepickerMouseOut(evt));\n\n // Update the selected values when the input changes manually\n this.addBoundedListener(this.input, \"change\", () => this.checkAndSetDefaultValue());\n\n // Open datepicker on focus\n if (!this.inline) {\n if (!this.justEsc) {\n this.addBoundedListener(this.input, \"focus\", evt => this.openDatepicker(evt));\n }\n this.justEsc = false;\n }\n\n // Listen for keystrokes\n window.addEventListener(\"keydown\", evt => this.doKeyDown(evt));\n\n // Listen for focus\n document.addEventListener(\"focus\", evt => this.checkOnFocus(evt), true);\n\n // Close datepicker on scroll\n if (this.closeOnScroll) {\n window.addEventListener(\"scroll\", evt => this.closeDatepicker(evt));\n }\n }\n generateId() {\n // Generate an unique ID for each datepicker\n // Use input ID if set\n if (this.input.id) {\n return this.input.id;\n // Otherwise get the instance id\n }\n\n return this.id;\n }\n createDom() {\n const domString = this.createDatepickerDomString();\n\n // Insert the datepicker in the document\n this.parent.insertAdjacentHTML(\"beforeend\", domString);\n\n // Store our datepicker in a property\n this.datepicker = document.getElementById(this.getDatepickerId());\n }\n createDatepickerDomString() {\n // Generate our datepicker\n let wrapperClass = this.inline ? \" \" + this.className + \"--inline\" : \"\";\n if (this.showTopbar) {\n if (this.topbarPosition === \"bottom\") {\n wrapperClass += \" \" + this.className + \"--topbar-bottom\";\n } else {\n wrapperClass += \" \" + this.className + \"--topbar-top\";\n }\n }\n if (!this.inline) {\n wrapperClass += \" \" + this.className + this.className + \"--topbar-has-close-button\";\n }\n if (this.clearButton) {\n wrapperClass += \" \" + this.className + \"--topbar-has-clear-button\";\n }\n if (this.submitButton) {\n wrapperClass += \" \" + this.className + \"--topbar-has-submit-button\";\n }\n const wrapperStyle = this.inline ? \"\" : ' style=\"display:none\"';\n let html = '
';\n html += '
';\n let topBarHtml = \"\";\n if (this.showTopbar) {\n // Top bar section\n topBarHtml += '
' + '
' + this.lang(\"selected\") + ' ...' + ' ' + this.separator + ' ... ()' + \"
\" + '
';\n let buttonsHtml = \"\";\n if (this.clearButton) {\n buttonsHtml += '\";\n }\n if (!this.inline) {\n buttonsHtml += '\";\n }\n\n // if (this.clearButton || this.submitButton) {\n // topBarHtml += '
';\n // }\n\n if (this.submitButton) {\n buttonsHtml += '';\n }\n if (buttonsHtml) {\n topBarHtml += '
' + buttonsHtml + \"
\";\n }\n topBarHtml += \"
\";\n }\n if (this.showTopbar && this.topbarPosition === \"top\") {\n html += topBarHtml;\n }\n\n // Months section\n html += '
';\n\n // Print single months\n for (let i = 1; i <= 2; i++) {\n html += '' + this.getWeekDayNames(i) + \"
<>
\";\n }\n html += \"
\";\n if (this.showTopbar && this.topbarPosition === \"bottom\") {\n html += topBarHtml;\n }\n\n // Tooltip\n html += '
';\n html += \"
\";\n html += \"
\";\n return html;\n }\n showMonth(date, month) {\n date.setHours(0, 0, 0, 0);\n\n // Show month table and create the necessary HTML code\n const name = this.getMonthName(date.getMonth());\n const monthDom = this.getMonthDom(month);\n const monthName = monthDom.getElementsByClassName(this.className + \"__month-name\")[0];\n const monthBody = monthDom.getElementsByTagName(\"tbody\")[0];\n\n // Month caption\n monthName.textContent = name + \" \" + date.getFullYear();\n\n // Remove child elements before to insert the new month\n this.emptyElement(monthBody);\n\n // Append the month\n monthBody.insertAdjacentHTML(\"beforeend\", this.createMonthDomString(date));\n\n // Check day dates\n this.updateSelectableRange();\n\n // Store current month dates\n this[\"month\" + month] = date;\n }\n createMonthDomString(_date) {\n const days = [];\n let html = \"\";\n let valid;\n _date.setDate(1);\n let dayOfWeek = _date.getDay();\n const currentMonth = _date.getMonth();\n if (dayOfWeek === 0 && this.startOfWeek === \"monday\") {\n // Add one week\n dayOfWeek = 7;\n }\n\n // If the first day is in the middle of the week, push also\n // the first days of the week (the days before our first day).\n // We need a complete week row.\n // Obviously, these days are part of the previous month.\n if (dayOfWeek > 0) {\n for (let i = dayOfWeek; i > 0; i--) {\n const _day = new Date(_date.getTime() - 86400000 * i);\n\n // Check if the day is valid. And pass this property to the days object\n valid = this.isValidDate(_day.getTime());\n if (this.startDate && this.compareDay(_day, this.startDate) < 0 || this.endDate && this.compareDay(_day, this.endDate) > 0) {\n valid = false;\n }\n\n // We pass the type property to know if the day is part of the\n // previous month. We already know that it is true.\n days.push({\n date: _day,\n type: \"lastMonth\",\n day: _day.getDate(),\n time: _day.getTime(),\n valid\n });\n }\n }\n\n // Push 40 days. Each month table needs the days of the month plus\n // the remaining days (of the week row) before the first day of the month\n // and after the last day of the month. (PS. They will be hidden)\n // 40 days are enough to cover all the possibilities.\n for (let i = 0; i < 40; i++) {\n const _day = this.addDays(_date, i);\n\n // Check if the day is valid. And pass this property to the days object\n valid = this.isValidDate(_day.getTime());\n if (this.startDate && this.compareDay(_day, this.startDate) < 0 || this.endDate && this.compareDay(_day, this.endDate) > 0) {\n valid = false;\n }\n\n // We pass the type property to know if the day is part of the\n // current month or part of the next month\n days.push({\n date: _day,\n type: _day.getMonth() === currentMonth ? \"visibleMonth\" : \"nextMonth\",\n day: _day.getDate(),\n time: _day.getTime(),\n valid\n });\n }\n\n // Create the week rows.\n for (let week = 0; week < 6; week++) {\n // Iterate the days object week by week.\n // If the last day is part of the next month, stop the loop.\n if (days[week * 7].type === \"nextMonth\") {\n break;\n }\n html += '';\n\n // Create the days of a week, one by one\n for (let i = 0; i < 7; i++) {\n let _day = this.startOfWeek === \"monday\" ? i + 1 : i;\n _day = days[week * 7 + _day];\n const classes = this.getDayClasses(_day);\n\n // Add a title for those days where the checkin or checkout is disabled\n let title = \"\";\n if (this.hasClass(_day, this.className + \"__month-day--no-checkin\")) {\n title = this.i18n[\"checkin-disabled\"];\n }\n if (this.hasClass(_day, +this.className + \"__month-day--no-checkout\")) {\n if (title) {\n title += \". \";\n }\n title += this.i18n[\"checkout-disabled\"];\n }\n\n // Each day has the \"time\" attribute (timestamp) and an appropriate class\n const dayAttributes = {\n daytype: _day.type,\n time: _day.time,\n class: classes.join(\" \"),\n d: i + 1\n };\n\n // Add title attribute if available\n if (title) {\n dayAttributes.title = title;\n }\n\n // Add role\n dayAttributes.role = \"button\";\n\n // Add tabindex to today date\n if (this.getDateString(_day.time) === this.getDateString(new Date())) {\n dayAttributes.tabindex = \"0\";\n }\n let extraText = \"\";\n\n // Optionally print some text in day cells\n if (this.extraDayText) {\n extraText = this.extraDayText(this.getDateString(_day.time), dayAttributes);\n }\n extraText = extraText ? extraText : \"\";\n if (extraText) {\n dayAttributes.class = dayAttributes.class + \" \" + this.className + \"__month-day--with-extra\";\n this.daysWithExtraText.push(this.getDateString(_day.time));\n }\n\n // Create the day HTML\n html += '\" + _day.day + extraText + \"\";\n }\n html += \"\";\n }\n return html;\n }\n openDatepicker() {\n // Open the datepicker\n if (!this.isOpen) {\n // Add/remove helper classes\n this.removeClass(this.datepicker, this.className + \"--closed\");\n this.addClass(this.datepicker, this.className + \"--open\");\n\n // Set (and check) the range value based on the current input value\n this.checkAndSetDefaultValue();\n\n // Slide down the datepicker\n if (!this.inline) {\n this.slideDown(this.datepicker, this.animationSpeed);\n }\n\n // Set flag\n this.isOpen = true;\n\n // Show selected days in the calendar\n this.showSelectedDays();\n\n // Disable (if needed) the prev/next buttons\n this.disableNextPrevButtons();\n\n // Add a click event listener to the document. This will help us to:\n // 1 - Check if the click it's outside the datepicker\n // 2 - Handle the click on calendar days\n this.addBoundedListener(document, \"click\", evt => this.documentClick(evt));\n\n // Optionally run a function when the datepicker is open\n if (this.onOpenDatepicker) {\n this.onOpenDatepicker();\n }\n }\n }\n closeDatepicker() {\n // Close the datepicker\n if (!this.isOpen || this.inline) {\n return;\n }\n\n // Add/remove helper classes\n this.removeClass(this.datepicker, this.className + \"--open\");\n this.addClass(this.datepicker, this.className + \"--closed\");\n\n // Slide up the datepicker\n this.slideUp(this.datepicker, this.animationSpeed);\n this.isOpen = false;\n\n // Create event on close\n const evt = document.createEvent(\"Event\");\n evt.initEvent(\"afterClose\", true, true);\n this.input.dispatchEvent(evt);\n this.removeAllBoundedListeners(document, \"click\");\n }\n autoclose() {\n // Autoclose the datepicker when the second date is set\n if (this.autoClose && this.changed && this.isOpen && this.start && this.end && !this.inline) {\n this.closeDatepicker();\n }\n }\n documentClick(evt) {\n // Check if the click was outside the datepicker and close it\n if (!this.parent.contains(evt.target) && evt.target !== this.input) {\n if (!this.preventContainerClose) {\n this.closeDatepicker();\n }\n } else if (evt.target.tagName.toLowerCase() === \"td\") {\n // Check if the click was on a calendar day\n this.dayClicked(evt.target);\n }\n }\n datepickerHover(evt) {\n // Check if the hover is on a calendar day\n if (evt.target.tagName && evt.target.tagName.toLowerCase() === \"td\") {\n this.dayHovering(evt.target);\n }\n }\n datepickerMouseOut(evt) {\n // Check if the mouseout is on a calendar day\n if (evt.target.tagName && evt.target.tagName.toLowerCase() === \"td\") {\n // Hide the tooltip\n const tooltipContainer = document.getElementById(this.getTooltipId());\n tooltipContainer.style.display = \"none\";\n }\n }\n onResizeDatepicker() {\n // Reset month views\n this.checkAndSetDefaultValue(true);\n }\n getDayClasses(_day) {\n const isToday = this.getDateString(_day.time) === this.getDateString(new Date());\n const isStartDate = this.getDateString(_day.time) === this.getDateString(this.startDate);\n const isDayWithExtraText = this.daysWithExtraText.indexOf(this.getDateString(_day.time)) > -1;\n let isDisabled = false;\n let isNoCheckIn = false;\n let isNoCheckOut = false;\n let isDayOfWeekDisabled = false;\n let isFirstEnabledDate = false;\n\n // Day between disabled dates and the last day\n // before the disabled date\n let isDayBeforeDisabledDate = false;\n\n // Check if the day is one of the days passed in the\n // (optional) disabledDates option. And set valid to\n // false in this case.\n //\n // Also, check if the checkin or checkout is disabled\n if (_day.valid || _day.type === \"visibleMonth\") {\n const dateString = this.getDateString(_day.time, \"YYYY-MM-DD\");\n if (this.disabledDates.length > 0) {\n // Check if this day is between two disabled dates\n // and disable it if there are not enough days\n // available to select a valid range\n const limit = this.getClosestDisabledDates(_day.date);\n\n // Consider also the day before startDate\n // as disabled date\n if (limit[0] === false) {\n limit[0] = this.substractDays(this.startDate, 1);\n }\n if (limit[0] && limit[1]) {\n if (this.compareDay(_day.date, limit[0]) && this.countDays(limit[0], limit[1]) - 2 > 0) {\n const daysBeforeNextDisabledDate = this.countDays(limit[1], _day.date) - 1;\n const daysAfterPrevDisabledDate = this.countDays(_day.date, limit[0]) - 1;\n if (this.selectForward && daysBeforeNextDisabledDate < this.minDays) {\n _day.valid = false;\n } else if (!this.selectForward && daysBeforeNextDisabledDate < this.minDays && daysAfterPrevDisabledDate < this.minDays) {\n _day.valid = false;\n }\n if (!_day.valid && this.enableCheckout && daysBeforeNextDisabledDate === 2) {\n isDayBeforeDisabledDate = true;\n }\n }\n }\n if (this.disabledDates.indexOf(dateString) > -1) {\n _day.valid = false;\n isDisabled = true;\n this.isFirstDisabledDate++;\n\n // Store last disabled date for later\n this.lastDisabledDate = _day.date;\n } else {\n this.isFirstDisabledDate = 0;\n }\n\n // First day after a disabled day\n if (_day.valid && this.lastDisabledDate && this.compareDay(_day.date, this.lastDisabledDate) > 0 && this.countDays(_day.date, this.lastDisabledDate) === 2) {\n isFirstEnabledDate = true;\n }\n }\n if (this.disabledDaysOfWeek.length > 0) {\n if (this.disabledDaysOfWeek.indexOf(fecha.format(_day.time, \"dddd\")) > -1) {\n _day.valid = false;\n isDayOfWeekDisabled = true;\n }\n }\n if (this.noCheckInDates.length > 0) {\n if (this.noCheckInDates.indexOf(dateString) > -1) {\n isNoCheckIn = true;\n isFirstEnabledDate = false;\n }\n }\n if (this.noCheckOutDates.length > 0) {\n if (this.noCheckOutDates.indexOf(dateString) > -1) {\n isNoCheckOut = true;\n }\n }\n if (this.noCheckInDaysOfWeek.length > 0) {\n if (this.noCheckInDaysOfWeek.indexOf(fecha.format(_day.time, \"dddd\")) > -1) {\n isNoCheckIn = true;\n isFirstEnabledDate = false;\n }\n }\n if (this.noCheckOutDaysOfWeek.length > 0) {\n if (this.noCheckOutDaysOfWeek.indexOf(fecha.format(_day.time, \"dddd\")) > -1) {\n isNoCheckOut = true;\n }\n }\n }\n const classes = [this.className + \"__month-day\", this.className + \"__month-day--\" + _day.type, this.className + \"__month-day--\" + (_day.valid ? \"valid\" : \"invalid\"), isToday ? this.className + \"__month-day--today\" : \"\", isDisabled ? this.className + \"__month-day--disabled\" : \"\", isDisabled && this.enableCheckout && this.isFirstDisabledDate === 1 ? this.className + \"__month-day--checkout-enabled\" : \"\", isDayBeforeDisabledDate ? this.className + \"__month-day--before-disabled-date\" : \"\", isStartDate || isFirstEnabledDate ? this.className + \"__month-day--checkin-only\" : \"\", isNoCheckIn ? this.className + \"__month-day--no-checkin\" : \"\", isNoCheckOut ? this.className + \"__month-day--no-checkout\" : \"\", isDayOfWeekDisabled ? this.className + \"__month-day--day-of-week-disabled\" : \"\", isDayWithExtraText ? this.className + \"__month-day--with-extra\" : \"\"];\n return classes;\n }\n checkAndSetDayClasses() {\n // Get every td in the months table: our days\n const days = this.datepicker.getElementsByTagName(\"td\");\n\n // Iterate each day and re-check HTML classes\n for (let i = 0; i < days.length; i++) {\n const time = parseInt(days[i].getAttribute(\"time\"), 10);\n const day = new Date(time);\n const daytype = days[i].getAttribute(\"daytype\");\n let valid;\n\n // Check if the day is valid. And pass this property to the days object\n valid = this.isValidDate(day.getTime());\n if (this.startDate && this.compareDay(day, this.startDate) < 0 || this.endDate && this.compareDay(day, this.endDate) > 0) {\n valid = false;\n }\n const _day = {\n date: day,\n type: daytype,\n day: day.getDate(),\n time,\n valid\n };\n const classes = this.getDayClasses(_day);\n days[i].className = classes.join(\" \");\n }\n }\n checkAndSetDefaultValue() {\n let onresize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n // Set range based on the input value\n\n // Get dates from input value\n const value = this.getValue();\n const dates = value ? value.split(this.separator) : \"\";\n\n // If we have our two dates, set the date range\n if (dates && dates.length >= 2) {\n // Format the values correctly\n const _format = this.format;\n\n // Set the date range\n this.changed = false;\n this.setDateRange(this.parseDate(dates[0], _format), this.parseDate(dates[1], _format), onresize);\n this.changed = true;\n } else if (this.showTopbar) {\n const selectedInfo = this.datepicker.getElementsByClassName(this.className + \"__info--selected\")[0];\n selectedInfo.style.display = \"none\";\n if (onresize) {\n // Set default time\n let defaultTime = new Date();\n if (this.startDate && this.compareMonth(defaultTime, this.startDate) < 0) {\n defaultTime = new Date(this.startDate.getTime());\n }\n if (this.endDate && this.compareMonth(this.getNextMonth(defaultTime), this.endDate) > 0) {\n defaultTime = new Date(this.getPrevMonth(this.endDate.getTime()));\n }\n if (this.start && !this.end) {\n this.clearSelection();\n }\n\n // Show months\n this.showMonth(defaultTime, 1);\n this.showMonth(this.getNextMonth(defaultTime), 2);\n this.setDayIndexes();\n }\n }\n }\n setDateRange(date1, date2) {\n let onresize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n // Swap dates if needed\n if (date1.getTime() > date2.getTime()) {\n let tmp = date2;\n date2 = date1;\n date1 = tmp;\n tmp = null;\n }\n let valid = true;\n\n // Check the validity of the dates\n if (this.startDate && this.compareDay(date1, this.startDate) < 0 || this.endDate && this.compareDay(date2, this.endDate) > 0) {\n valid = false;\n }\n\n // If not valid, reset the datepicker\n if (!valid) {\n // Show default (initial) months\n this.showMonth(this.startDate, 1);\n this.showMonth(this.getNextMonth(this.startDate), 2);\n this.setDayIndexes();\n\n // Show selected days in the calendar\n this.showSelectedDays();\n\n // Disable (if needed) the prev/next buttons\n this.disableNextPrevButtons();\n return;\n }\n\n // Fix DST\n date1.setTime(date1.getTime() + 12 * 60 * 60 * 1000);\n date2.setTime(date2.getTime() + 12 * 60 * 60 * 1000);\n\n // Calculate the next month value\n this.start = date1.getTime();\n this.end = date2.getTime();\n if (this.compareDay(date1, date2) > 0 && this.compareMonth(date1, date2) === 0) {\n date2 = this.getNextMonth(date1);\n }\n if (this.compareMonth(date1, date2) === 0) {\n date2 = this.getNextMonth(date1);\n }\n\n // Show the months\n this.showMonth(date1, 1);\n this.showMonth(date2, 2);\n this.setDayIndexes();\n\n // Show selected days in the calendar\n this.showSelectedDays();\n\n // Disable (if needed) the prev/next buttons\n this.disableNextPrevButtons();\n\n // Check the selection\n this.checkSelection();\n\n // Show selected dates in top bar\n this.showSelectedInfo();\n\n // Close the datepicker\n if (!onresize) {\n this.autoclose();\n }\n\n // Add aria attributes\n this.setDayAriaAttributes();\n }\n showSelectedDays() {\n // Show selected days in the calendar\n\n // Return early if we don't have the start and end dates\n if (!this.start && !this.end) {\n return;\n }\n\n // Get every td in the months table: our days\n const days = this.datepicker.getElementsByTagName(\"td\");\n\n // Iterate each day and assign an appropriate HTML class\n // if they are selected in the date range\n for (let i = 0; i < days.length; i++) {\n const time = parseInt(days[i].getAttribute(\"time\"), 10);\n\n // Add selected class\n if (this.start && this.end && this.end >= time && this.start <= time || this.start && !this.end && this.getDateString(this.start, \"YYYY-MM-DD\") === this.getDateString(time, \"YYYY-MM-DD\")) {\n this.addClass(days[i], this.className + \"__month-day--selected\");\n } else {\n this.removeClass(days[i], this.className + \"__month-day--selected\");\n }\n\n // Add class to the first day of the range\n if (this.start && this.getDateString(this.start, \"YYYY-MM-DD\") === this.getDateString(time, \"YYYY-MM-DD\")) {\n this.addClass(days[i], this.className + \"__month-day--first-day-selected\");\n } else {\n this.removeClass(days[i], this.className + \"__month-day--first-day-selected\");\n }\n\n // Add class to the last day of the range\n if (this.end && this.getDateString(this.end, \"YYYY-MM-DD\") === this.getDateString(time, \"YYYY-MM-DD\")) {\n this.addClass(days[i], this.className + \"__month-day--last-day-selected\");\n } else {\n this.removeClass(days[i], this.className + \"__month-day--last-day-selected\");\n }\n }\n }\n showSelectedInfo() {\n // Return early if the top bar is disabled\n if (!this.showTopbar) {\n // If both dates are set, set the value of our input\n if (this.start && this.end) {\n const dateRangeValue = this.getDateString(new Date(this.start)) + this.separator + this.getDateString(new Date(this.end));\n\n // Set input value\n this.setValue(dateRangeValue, this.getDateString(new Date(this.start)), this.getDateString(new Date(this.end)));\n this.changed = true;\n }\n return;\n }\n\n // Show selected range in top bar\n const selectedInfo = this.datepicker.getElementsByClassName(this.className + \"__info--selected\")[0];\n const elStart = selectedInfo.getElementsByClassName(this.className + \"__info-text--start-day\")[0];\n const elEnd = selectedInfo.getElementsByClassName(this.className + \"__info-text--end-day\")[0];\n const elSelected = selectedInfo.getElementsByClassName(this.className + \"__info-text--selected-days\")[0];\n const closeButton = document.getElementById(this.getCloseButtonId());\n const clearButton = document.getElementById(this.getClearButtonId());\n const submitButton = document.getElementById(this.getSubmitButtonId());\n\n // Set default text and hide the count element\n elStart.textContent = \"...\";\n elEnd.textContent = \"...\";\n elSelected.style.display = \"none\";\n\n // Show first date\n if (this.start) {\n selectedInfo.style.display = \"\";\n elStart.textContent = this.getDateString(new Date(parseInt(this.start, 10)), this.infoFormat);\n if (this.clearButton) {\n clearButton.disabled = false;\n clearButton.setAttribute(\"aria-disabled\", \"false\");\n }\n }\n\n // Show second date\n if (this.end) {\n elEnd.textContent = this.getDateString(new Date(parseInt(this.end, 10)), this.infoFormat);\n }\n\n // If both dates are set, show the count and set the value of our input\n if (this.start && this.end) {\n const count = this.countDays(this.getDateString(new Date(this.end)), this.getDateString(new Date(this.start))) - 1;\n const countText = count === 1 ? count + \" \" + this.lang(\"night\") : count + \" \" + this.lang(\"nights\");\n const dateRangeValue = this.getDateString(new Date(this.start)) + this.separator + this.getDateString(new Date(this.end));\n\n // Show count\n elSelected.style.display = \"\";\n elSelected.firstElementChild.textContent = countText;\n if (!this.inline) {\n closeButton.disabled = false;\n closeButton.setAttribute(\"aria-disabled\", \"false\");\n } else if (this.submitButton) {\n submitButton.disabled = false;\n submitButton.setAttribute(\"aria-disabled\", \"false\");\n }\n\n // Set input value\n this.setValue(dateRangeValue, this.getDateString(new Date(this.start)), this.getDateString(new Date(this.end)));\n this.changed = true;\n } else if (!this.inline && this.start === false && this.end === false) {\n closeButton.disabled = false;\n closeButton.setAttribute(\"aria-disabled\", \"false\");\n } else if (!this.inline) {\n // Disable the close button until a valid date range\n closeButton.disabled = true;\n closeButton.setAttribute(\"aria-disabled\", \"true\");\n } else {\n if (this.submitButton) {\n // Disable the submit button until a valid date range\n submitButton.disabled = true;\n submitButton.setAttribute(\"aria-disabled\", \"true\");\n }\n }\n if (this.clearButton && !this.start && !this.end) {\n // Disable the clear button until one valid date is selected\n clearButton.disabled = true;\n clearButton.setAttribute(\"aria-disabled\", \"true\");\n }\n }\n dayClicked(day) {\n if (this.hasClass(day, this.className + \"__month-day--invalid\")) {\n return;\n }\n const isSelectStart = this.start && this.end || !this.start && !this.end;\n const time = parseInt(day.getAttribute(\"time\"), 10);\n\n // Return early for those days where the checkin or checkout is disabled\n if (isSelectStart) {\n if (this.hasClass(day, this.className + \"__month-day--no-checkin\")) {\n return;\n }\n } else if (this.start) {\n if (this.start > time && this.hasClass(day, this.className + \"__month-day--no-checkin\")) {\n return;\n }\n const startDayEl = this.datepicker.querySelectorAll('td[time=\"' + this.start + '\"]')[0];\n if (startDayEl) {\n if (this.hasClass(startDayEl, this.className + \"__month-day--no-checkout\") && this.start > time) {\n return;\n }\n }\n if (this.hasClass(day, this.className + \"__month-day--no-checkout\") && time > this.start) {\n return;\n }\n }\n this.addClass(day, this.className + \"__month-day--selected\");\n if (isSelectStart) {\n this.start = time;\n this.end = false;\n } else if (this.start) {\n this.end = time;\n }\n\n // Swap dates if they are inverted\n if (this.start && this.end && this.start > this.end) {\n const tmp = this.end;\n this.end = this.start;\n this.start = tmp;\n }\n this.start = parseInt(this.start, 10);\n this.end = parseInt(this.end, 10);\n\n // Remove hovering class from every day and hide tooltip\n this.clearHovering();\n\n // Show hover\n if (this.start && !this.end) {\n // Add hovering class\n this.dayHovering(day);\n }\n\n // Check day dates\n this.updateSelectableRange();\n\n // Check the selection\n this.checkSelection();\n\n // Show selected dates in top bar\n this.showSelectedInfo();\n\n // Check dates again after selection\n if (this.start && this.end) {\n this.checkAndSetDayClasses();\n }\n\n // Show selected days in the calendar\n this.showSelectedDays();\n\n // Close the datepicker\n this.autoclose();\n\n // Optionally run a function when a day is clicked\n if (this.onDayClick) {\n this.onDayClick();\n }\n\n // Optionally run a function when a range is selected\n if (this.end && this.onSelectRange) {\n this.onSelectRange();\n }\n\n // Add aria attributes\n this.setDayAriaAttributes();\n }\n isValidDate(time) {\n // Check if the date is valid\n time = parseInt(time, 10);\n if (this.startDate && this.compareDay(time, this.startDate) < 0 || this.endDate && this.compareDay(time, this.endDate) > 0) {\n return false;\n }\n\n // Update valid dates during the selection\n if (this.start && !this.end) {\n // Check maximum/minimum days\n if (this.maxDays > 0 && this.countDays(time, this.start) > this.maxDays || this.minDays > 0 && this.countDays(time, this.start) > 1 && this.countDays(time, this.start) < this.minDays) {\n return false;\n }\n\n // Check if only multiple of minDays is allowed\n if (this.minNightsMultiple && (this.countDays(time, this.start) - 1) % 7 !== 0) {\n return false;\n }\n\n // Check if date is before first date of range\n if (this.selectForward && time < this.start) {\n return false;\n }\n\n // Check the disabled dates\n if (this.disabledDates.length > 0) {\n const limit = this.getClosestDisabledDates(new Date(parseInt(this.start, 10)));\n if (limit[0] && this.compareDay(time, limit[0]) <= 0) {\n return false;\n }\n if (limit[1] && this.compareDay(time, limit[1]) >= 0) {\n return false;\n }\n }\n\n // Check disabled days of week\n if (this.disabledDaysOfWeek.length > 0) {\n const limit = this.getClosestDisabledDays(new Date(parseInt(this.start, 10)));\n if (limit[0] && this.compareDay(time, limit[0]) <= 0) {\n return false;\n }\n if (limit[1] && this.compareDay(time, limit[1]) >= 0) {\n return false;\n }\n }\n }\n return true;\n }\n checkSelection() {\n const numberOfDays = this.countDays(this.end, this.start);\n const bar = this.showTopbar ? this.datepicker.getElementsByClassName(this.className + \"__info--feedback\")[0] : false;\n if (this.maxDays && numberOfDays > this.maxDays) {\n this.start = false;\n this.end = false;\n\n // Remove selected class from each day\n const days = this.datepicker.getElementsByTagName(\"td\");\n for (let i = 0; i < days.length; i++) {\n this.removeClass(days[i], this.className + \"__month-day--selected\");\n this.removeClass(days[i], this.className + \"__month-day--first-day-selected\");\n this.removeClass(days[i], this.className + \"__month-day--last-day-selected\");\n }\n if (this.showTopbar) {\n // Show error in top bar\n const errorValue = this.maxDays - 1;\n this.topBarErrorText(bar, \"error-more\", errorValue);\n }\n } else if (this.minDays && numberOfDays < this.minDays) {\n this.start = false;\n this.end = false;\n\n // Remove selected class from each day\n const days = this.datepicker.getElementsByTagName(\"td\");\n for (let i = 0; i < days.length; i++) {\n this.removeClass(days[i], this.className + \"__month-day--selected\");\n this.removeClass(days[i], this.className + \"__month-day--first-day-selected\");\n this.removeClass(days[i], this.className + \"__month-day--last-day-selected\");\n }\n if (this.showTopbar) {\n // Show error in top bar\n const errorValue = this.minDays - 1;\n this.topBarErrorText(bar, \"error-less\", errorValue);\n }\n } else if (this.start || this.end) {\n if (this.showTopbar) {\n // Remove error and help classes from top bar\n this.removeClass(bar, this.className + \"__info--error\");\n this.removeClass(bar, this.className + \"__info--help\");\n }\n } else if (this.showTopbar) {\n // Show help message\n this.removeClass(bar, this.className + \"__info--error\");\n this.addClass(bar, this.className + \"__info--help\");\n }\n }\n addDays(date, days) {\n // Add xx days to date\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return result;\n }\n substractDays(date, days) {\n // Substract xx days to date\n const result = new Date(date);\n result.setDate(result.getDate() - days);\n return result;\n }\n countDays(start, end) {\n // Return days between two dates\n return Math.abs(this.daysFrom1970(start) - this.daysFrom1970(end)) + 1;\n }\n compareDay(day1, day2) {\n // Compare two days: check if day1 is before/after/same day of day2\n const p = parseInt(this.getDateString(day1, \"YYYYMMDD\"), 10) - parseInt(this.getDateString(day2, \"YYYYMMDD\"), 10);\n if (p > 0) {\n return 1;\n }\n if (p === 0) {\n return 0;\n }\n return -1;\n }\n compareMonth(month1, month2) {\n // Compare two months: check if month1 is before/after/same month of month2\n const p = parseInt(this.getDateString(month1, \"YYYYMM\"), 10) - parseInt(this.getDateString(month2, \"YYYYMM\"), 10);\n if (p > 0) {\n return 1;\n }\n if (p === 0) {\n return 0;\n }\n return -1;\n }\n daysFrom1970(t) {\n // Get days from 1970\n return Math.round(this.toLocalTimestamp(t) / 86400000);\n }\n toLocalTimestamp(t) {\n // Convert timestamp to local timestamp\n if (typeof t === \"object\" && t.getTime) {\n t = t.getTime();\n }\n if (typeof t === \"string\" && !t.match(/\\d{13}/)) {\n t = this.parseDate(t).getTime();\n }\n t = parseInt(t, 10) - new Date().getTimezoneOffset() * 60 * 1000;\n return t;\n }\n printAttributes(obj) {\n // Print object attributes in a DOM element\n const _obj = obj;\n let attribute = \"\";\n for (const attr in obj) {\n if (Object.prototype.hasOwnProperty.call(_obj, attr)) {\n attribute += attr + '=\"' + _obj[attr] + '\" ';\n }\n }\n return attribute;\n }\n goToNextMonth(e) {\n let forceBoth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // Go to the next month\n const thisMonth = Number.isInteger(e) ? e : e.target.getAttribute(\"month\");\n const isMonth2 = thisMonth > 1;\n let nextMonth = isMonth2 ? this.month2 : this.month1;\n nextMonth = this.getNextMonth(nextMonth);\n\n // Dont't go to the next month if:\n // 1. The second month is visible and it is the next month after\n // our current month\n // 2. The month is after the (optional) endDate. There's no need\n // to show other months in this case.\n if (!this.isSingleMonth() && !isMonth2 && this.compareMonth(nextMonth, this.month2) >= 0 || this.isMonthOutOfRange(nextMonth)) {\n return false;\n }\n\n // We can now show the month and proceed\n if ((this.moveBothMonths || forceBoth) && isMonth2) {\n this.showMonth(this.month2, 1);\n }\n this.showMonth(nextMonth, thisMonth);\n this.setDayIndexes();\n this.showSelectedDays();\n this.disableNextPrevButtons();\n return true;\n }\n goToPreviousMonth(e) {\n let forceBoth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // Go to the previous month\n const thisMonth = Number.isInteger(e) ? e : e.target.getAttribute(\"month\");\n const isMonth2 = thisMonth > 1;\n let prevMonth = isMonth2 ? this.month2 : this.month1;\n prevMonth = this.getPrevMonth(prevMonth);\n\n // Dont't go to the previous month if:\n // 1. The click it's in the second month and the month we need is already\n // shown in the first month\n // 2. The month is before the (optional) startDate. There's no need\n // to show other months in this case.\n if (isMonth2 && this.compareMonth(prevMonth, this.month1) <= 0 || this.isMonthOutOfRange(prevMonth)) {\n return false;\n }\n\n // We can now show the month and proceed\n if ((this.moveBothMonths || forceBoth) && !isMonth2) {\n this.showMonth(this.month1, 2);\n }\n this.showMonth(prevMonth, thisMonth);\n this.setDayIndexes();\n this.showSelectedDays();\n this.disableNextPrevButtons();\n return true;\n }\n isSingleMonth() {\n // Check if the second month is visible\n return !this.isVisible(this.getMonthDom(2));\n }\n isMonthOutOfRange(month) {\n const _m = new Date(month.valueOf());\n\n // Return true for months before the startDate and months after the endDate\n if (this.startDate && new Date(_m.getFullYear(), _m.getMonth() + 1, 0, 23, 59, 59) < this.startDate || this.endDate && new Date(_m.getFullYear(), _m.getMonth(), 1) > this.endDate) {\n return true;\n }\n return false;\n }\n\n // Disable next/prev buttons according to the value of the prev/next\n // month. We don't want two same months at the same time!\n disableNextPrevButtons() {\n if (this.isSingleMonth()) {\n return;\n }\n const month1 = parseInt(this.getDateString(this.month1, \"YYYYMM\"), 10);\n const month2 = parseInt(this.getDateString(this.month2, \"YYYYMM\"), 10);\n const d = Math.abs(month1 - month2);\n const nextButtons = this.datepicker.getElementsByClassName(this.className + \"__month-button--next\");\n const prevButtons = this.datepicker.getElementsByClassName(this.className + \"__month-button--prev\");\n if (d > 1 && d !== 89) {\n this.removeClass(nextButtons[0], this.className + \"__month-button--disabled\");\n nextButtons[0].setAttribute(\"aria-disabled\", \"false\");\n this.removeClass(prevButtons[1], this.className + \"__month-button--disabled\");\n prevButtons[1].setAttribute(\"aria-disabled\", \"false\");\n } else {\n this.addClass(nextButtons[0], this.className + \"__month-button--disabled\");\n nextButtons[0].setAttribute(\"aria-disabled\", \"true\");\n this.addClass(prevButtons[1], this.className + \"__month-button--disabled\");\n prevButtons[1].setAttribute(\"aria-disabled\", \"true\");\n }\n if (this.isMonthOutOfRange(this.getPrevMonth(this.month1))) {\n this.addClass(prevButtons[0], this.className + \"__month-button--disabled\");\n prevButtons[0].setAttribute(\"aria-disabled\", \"true\");\n } else {\n this.removeClass(prevButtons[0], this.className + \"__month-button--disabled\");\n prevButtons[0].setAttribute(\"aria-disabled\", \"false\");\n }\n if (this.isMonthOutOfRange(this.getNextMonth(this.month2))) {\n this.addClass(nextButtons[1], this.className + \"__month-button--disabled\");\n nextButtons[1].setAttribute(\"aria-disabled\", \"true\");\n } else {\n this.removeClass(nextButtons[1], this.className + \"__month-button--disabled\");\n nextButtons[1].setAttribute(\"aria-disabled\", \"false\");\n }\n }\n topBarDefaultText() {\n // Return early if the top bar is disabled\n if (!this.showTopbar) {\n return;\n }\n\n // Show help message on top bar\n let topBarText = \"\";\n if (this.minDays && this.maxDays) {\n if (this.minDays === this.maxDays) {\n topBarText = this.lang(\"info-range-equal\");\n } else {\n topBarText = this.lang(\"info-range\");\n }\n } else if (this.minDays && this.minDays > 2) {\n topBarText = this.lang(\"info-more-plural\");\n } else if (this.minDays) {\n topBarText = this.lang(\"info-more\");\n } else {\n topBarText = this.lang(\"info-default\");\n }\n const bar = this.datepicker.getElementsByClassName(this.className + \"__info--feedback\")[0];\n topBarText = topBarText.replace(/%d/, this.minDays - 1).replace(/%d/, this.maxDays - 1);\n this.addClass(bar, this.className + \"__info--help\");\n this.removeClass(bar, this.className + \"__info--error\");\n bar.textContent = topBarText;\n }\n topBarErrorText(bar, errorText, errorValue) {\n if (!this.showTopbar) {\n return;\n }\n\n // Show error message on top bar\n this.addClass(bar, this.className + \"__info--error\");\n this.removeClass(bar, this.className + \"__info--help\");\n if (errorValue > 1) {\n errorText = this.lang(errorText + \"-plural\");\n errorText = errorText.replace(\"%d\", errorValue);\n bar.textContent = errorText;\n } else {\n errorText = this.lang(errorText);\n }\n\n // And hide the selected info\n const selectedInfo = this.datepicker.getElementsByClassName(this.className + \"__info--selected\")[0];\n selectedInfo.style.display = \"none\";\n }\n updateSelectableRange() {\n const days = this.datepicker.getElementsByTagName(\"td\");\n const isSelecting = this.start && !this.end;\n\n // Add needed classes\n for (let i = 0; i < days.length; i++) {\n if (this.hasClass(days[i], this.className + \"__month-day--invalid\") && this.hasClass(days[i], this.className + \"__month-day--tmp\")) {\n this.removeClass(days[i], this.className + \"__month-day--tmp\");\n if (this.hasClass(days[i], this.className + \"__month-day--tmpinvalid\")) {\n this.removeClass(days[i], this.className + \"__month-day--tmpinvalid\");\n } else {\n this.removeClass(days[i], this.className + \"__month-day--invalid\");\n this.addClass(days[i], this.className + \"__month-day--valid\");\n }\n }\n\n // Update day classes during the date range selection\n if (isSelecting) {\n if (this.hasClass(days[i], this.className + \"__month-day--visibleMonth\") && (this.hasClass(days[i], this.className + \"__month-day--valid\") || this.hasClass(days[i], this.className + \"__month-day--disabled\") || this.hasClass(days[i], this.className + \"__month-day--before-disabled-date\"))) {\n const time = parseInt(days[i].getAttribute(\"time\"), 10);\n if (this.isValidDate(time)) {\n this.addClass(days[i], this.className + \"__month-day--valid\");\n this.addClass(days[i], this.className + \"__month-day--tmp\");\n this.removeClass(days[i], this.className + \"__month-day--invalid\");\n this.removeClass(days[i], this.className + \"__month-day--disabled\");\n } else {\n if (this.hasClass(days[i], this.className + \"__month-day--invalid\")) {\n this.addClass(days[i], this.className + \"__month-day--tmpinvalid\");\n }\n this.addClass(days[i], this.className + \"__month-day--invalid\");\n this.addClass(days[i], this.className + \"__month-day--tmp\");\n this.removeClass(days[i], this.className + \"__month-day--valid\");\n }\n }\n } else if (this.hasClass(days[i], this.className + \"__month-day--checkout-enabled\") || this.hasClass(days[i], this.className + \"__month-day--before-disabled-date\")) {\n // At the end of the selection, restore the disabled/invalid class for\n // days where the checkout is enabled. We need to check this when the\n // autoclose option is false. The same for the day just before the\n // disabled date\n this.addClass(days[i], this.className + \"__month-day--invalid\");\n this.removeClass(days[i], this.className + \"__month-day--valid\");\n if (!this.hasClass(days[i], this.className + \"__month-day--before-disabled-date\")) {\n this.addClass(days[i], this.className + \"__month-day--disabled\");\n }\n }\n }\n\n // Set aria attributes\n this.setDayAriaAttributes();\n return true;\n }\n dayHovering(day) {\n const hoverTime = parseInt(day.getAttribute(\"time\"), 10);\n let tooltip = \"\";\n if (!this.hasClass(day, this.className + \"__month-day--invalid\")) {\n // Get every td in the months table: our days\n const days = this.datepicker.getElementsByTagName(\"td\");\n\n // Iterate each day and add the hovering class\n for (let i = 0; i < days.length; i++) {\n const time = parseInt(days[i].getAttribute(\"time\"), 10);\n if (time === hoverTime) {\n this.addClass(days[i], this.className + \"__month-day--hovering\");\n } else {\n this.removeClass(days[i], this.className + \"__month-day--hovering\");\n }\n if (this.start && !this.end && (this.start < time && hoverTime >= time || this.start > time && hoverTime <= time)) {\n this.addClass(days[i], this.className + \"__month-day--hovering\");\n } else {\n this.removeClass(days[i], this.className + \"__month-day--hovering\");\n }\n }\n\n // Generate date range tooltip\n if (this.start && !this.end) {\n const nights = this.countDays(hoverTime, this.start) - 1;\n if (this.hoveringTooltip) {\n if (typeof this.hoveringTooltip === \"function\") {\n tooltip = this.hoveringTooltip(nights, this.start, hoverTime);\n } else if (this.hoveringTooltip === true && nights > 0) {\n const label = nights === 1 ? this.lang(\"night\") : this.lang(\"nights\");\n tooltip = nights + \" \" + label;\n }\n }\n }\n }\n\n // Show tooltip on hovering and set its position\n if (tooltip) {\n const dayBounding = day.getBoundingClientRect();\n const datepickerBounding = this.datepicker.getBoundingClientRect();\n let _left = dayBounding.left - datepickerBounding.left;\n let _top = dayBounding.top - datepickerBounding.top;\n _left += dayBounding.width / 2;\n const tooltipContainer = document.getElementById(this.getTooltipId());\n tooltipContainer.style.display = \"\";\n tooltipContainer.textContent = tooltip;\n const w = tooltipContainer.getBoundingClientRect().width;\n const h = tooltipContainer.getBoundingClientRect().height;\n _left -= w / 2;\n _top -= h;\n setTimeout(() => {\n tooltipContainer.style.left = _left + \"px\";\n tooltipContainer.style.top = _top + \"px\";\n }, 10);\n } else {\n const tooltipContainer = document.getElementById(this.getTooltipId());\n tooltipContainer.style.display = \"none\";\n }\n }\n clearHovering() {\n // Remove hovering class from every day\n const days = this.datepicker.getElementsByTagName(\"td\");\n for (let i = 0; i < days.length; i++) {\n this.removeClass(days[i], this.className + \"__month-day--hovering\");\n }\n\n // Hide the tooltip\n const tooltipContainer = document.getElementById(this.getTooltipId());\n tooltipContainer.style.display = \"none\";\n }\n clearSelection() {\n // Reset start and end dates\n this.start = false;\n this.end = false;\n\n // Remove selected classes\n const days = this.datepicker.getElementsByTagName(\"td\");\n for (let i = 0; i < days.length; i++) {\n this.removeClass(days[i], this.className + \"__month-day--selected\");\n this.removeClass(days[i], this.className + \"__month-day--first-day-selected\");\n this.removeClass(days[i], this.className + \"__month-day--last-day-selected\");\n this.removeClass(days[i], this.className + \"__month-day--hovering\");\n }\n\n // Reset input\n this.setValue(\"\");\n\n // Check the selection\n this.checkSelection();\n\n // Show selected dates in top bar\n this.showSelectedInfo();\n\n // Show selected days in the calendar\n this.showSelectedDays();\n }\n clearDatepicker() {\n // Reset start and end dates\n this.start = false;\n this.end = false;\n\n // Remove selected classes\n const days = this.datepicker.getElementsByTagName(\"td\");\n for (let i = 0; i < days.length; i++) {\n this.removeClass(days[i], this.className + \"__month-day--selected\");\n this.removeClass(days[i], this.className + \"__month-day--first-day-selected\");\n this.removeClass(days[i], this.className + \"__month-day--last-day-selected\");\n this.removeClass(days[i], this.className + \"__month-day--hovering\");\n }\n\n // Reset input\n this.setValue(\"\");\n\n // Show default text in top bar\n this.topBarDefaultText();\n\n // Check the selection\n this.checkSelection();\n\n // Show selected dates in top bar\n this.showSelectedInfo();\n\n // Hide the selected info\n const selectedInfo = this.datepicker.getElementsByClassName(this.className + \"__info--selected\")[0];\n selectedInfo.style.display = \"none\";\n\n // Show selected days in the calendar\n this.showSelectedDays();\n\n // Check day dates\n this.updateSelectableRange();\n\n // Create event on clear\n const evt = document.createEvent(\"Event\");\n evt.initEvent(\"afterClear\", true, true);\n this.input.dispatchEvent(evt);\n }\n parseDisabledDates() {\n // Sort disabled dates and store it in property\n const _tmp = [];\n this.setFechaI18n();\n for (let i = 0; i < this.disabledDates.length; i++) {\n _tmp[i] = fecha.parse(this.disabledDates[i], \"YYYY-MM-DD\");\n }\n _tmp.sort((a, b) => {\n return a - b;\n });\n this.disabledDatesTime = _tmp;\n }\n getClosestDisabledDates(x) {\n // This method implements part of the work done by the user Zeta\n // http://stackoverflow.com/a/11795472\n\n // Return an array with two elements:\n // - The closest date on the left\n // - The closest date on the right\n let dates = [false, false];\n\n // If the day is before the first disabled date return early\n if (x < this.disabledDatesTime[0]) {\n // Add one day if we want include the checkout\n if (this.enableCheckout) {\n dates = [false, this.addDays(this.disabledDatesTime[0], 1)];\n // Otherwise use the first date of the array\n } else {\n dates = [false, this.disabledDatesTime[0]];\n }\n\n // If the day is after the last disabled date return early\n } else if (x > this.disabledDatesTime[this.disabledDatesTime.length - 1]) {\n dates = [this.disabledDatesTime[this.disabledDatesTime.length - 1], false];\n // Otherwise calculate the closest dates\n } else {\n let bestPrevDate = this.disabledDatesTime.length;\n let bestNextDate = this.disabledDatesTime.length;\n const maxDateValue = Math.abs(new Date(0, 0, 0).valueOf());\n let bestPrevDiff = maxDateValue;\n let bestNextDiff = -maxDateValue;\n let currDiff = 0;\n let i;\n for (i = 0; i < this.disabledDatesTime.length; ++i) {\n currDiff = x - this.disabledDatesTime[i];\n if (currDiff < 0 && currDiff > bestNextDiff) {\n bestNextDate = i;\n bestNextDiff = currDiff;\n }\n if (currDiff > 0 && currDiff < bestPrevDiff) {\n bestPrevDate = i;\n bestPrevDiff = currDiff;\n }\n }\n if (this.disabledDatesTime[bestPrevDate]) {\n dates[0] = this.disabledDatesTime[bestPrevDate];\n }\n if (typeof this.disabledDatesTime[bestPrevDate] === \"undefined\") {\n dates[1] = false;\n // Add one day if we want include the checkout\n } else if (this.enableCheckout) {\n dates[1] = this.addDays(this.disabledDatesTime[bestNextDate], 1);\n // Otherwise use the date of the array\n } else {\n dates[1] = this.disabledDatesTime[bestNextDate];\n }\n }\n return dates;\n }\n getDisabledDays() {\n const allDays = [];\n const disabledDays = [];\n const day = new Date();\n for (let i = 0; i < 7; i++) {\n const _date = this.addDays(day, i);\n allDays[fecha.format(_date, \"d\")] = fecha.format(_date, \"dddd\");\n }\n for (let i = 0; i < this.disabledDaysOfWeek.length; i++) {\n disabledDays.push(allDays.indexOf(this.disabledDaysOfWeek[i]));\n }\n disabledDays.sort();\n this.disabledDaysIndexes = disabledDays;\n }\n getClosestDisabledDays(day) {\n // Return an array with two elements:\n // - The closest date on the left\n // - The closest date on the right\n const dates = [false, false];\n for (let i = 0; i < 7; i++) {\n const _date = this.substractDays(day, i);\n if (this.disabledDaysIndexes.indexOf(parseInt(fecha.format(_date, \"d\"), 10)) > -1) {\n dates[0] = _date;\n break;\n }\n }\n for (let i = 0; i < 7; i++) {\n const _date = this.addDays(day, i);\n if (this.disabledDaysIndexes.indexOf(parseInt(fecha.format(_date, \"d\"), 10)) > -1) {\n dates[1] = _date;\n break;\n }\n }\n return dates;\n }\n lang(s) {\n // Return i18n string\n return s in this.i18n ? this.i18n[s] : \"\";\n }\n emptyElement(element) {\n // Remove all child elements of a DOM node\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n\n // Helper regex for DOM classes\n classRegex(c) {\n return new RegExp(\"(^|\\\\s+)\" + c + \"(\\\\s+|$)\");\n }\n\n // Check if an element has a class\n hasClass(el, c) {\n return this.classRegex(c).test(el.className);\n }\n\n // Add a class to the element\n addClass(el, c) {\n if (!this.hasClass(el, c)) {\n el.className = el.className + \" \" + c;\n }\n }\n\n // Remove class from element\n removeClass(el, c) {\n el.className = el.className.replace(this.classRegex(c), \" \");\n }\n isVisible(element) {\n // Check if a DOM element is visible\n return element.offsetWidth || element.offsetHeight || element.getClientRects().length;\n }\n slideDown(element, speed) {\n // Slide down an element\n element.style.display = \"\";\n const h = element.getBoundingClientRect().height;\n element.style.height = 0;\n this.recalc(element.offsetHeight);\n element.style.transition = \"height \" + speed;\n element.style.height = h + \"px\";\n element.addEventListener(\"transitionend\", () => {\n element.style.height = element.style.transition = element.style.display = \"\";\n });\n }\n slideUp(element, speed) {\n // Slide up an element\n const h = element.getBoundingClientRect().height;\n element.style.height = h + \"px\";\n this.recalc(element.offsetHeight);\n element.style.transition = \"height \" + speed;\n element.style.height = 0;\n element.addEventListener(\"transitionend\", () => {\n element.style.display = \"none\";\n });\n }\n recalc(element) {\n // Force browser recalculation\n return element.offsetHeight;\n }\n isTouchDevice() {\n // This *does not* necessarily reflect a touchscreen device!!!\n // http://www.stucox.com/blog/you-cant-detect-a-touchscreen/\n return \"ontouchstart\" in window || window.DocumentTouch && document instanceof DocumentTouch;\n }\n setDayAriaAttributes() {\n const days = this.datepicker.getElementsByTagName(\"td\");\n for (let i = 0; i < days.length; i++) {\n const classes = days[i].className;\n const time = parseInt(days[i].getAttribute(\"time\"), 10);\n let ariaDisabled = \"false\";\n let ariaLabel = \"\";\n if (classes.includes(this.className + \"__month-day--invalid\")) {\n ariaLabel = this.replacei18n(this.i18n[\"aria-disabled\"], fecha.format(time, this.ariaDayFormat));\n ariaDisabled = \"true\";\n } else if (classes.includes(this.className + \"__month-day--first-day-selected\")) {\n ariaLabel = this.replacei18n(this.i18n[\"aria-selected-checkin\"], fecha.format(time, this.ariaDayFormat));\n } else if (classes.includes(this.className + \"__month-day--last-day-selected\")) {\n ariaLabel = this.replacei18n(this.i18n[\"aria-selected-checkout\"], fecha.format(time, this.ariaDayFormat));\n } else if (classes.includes(this.className + \"__month-day--selected\")) {\n ariaLabel = this.replacei18n(this.i18n[\"aria-selected\"], fecha.format(time, this.ariaDayFormat));\n } else if (this.start && !this.end) {\n ariaLabel = this.replacei18n(this.i18n[\"aria-choose-checkout\"], fecha.format(time, this.ariaDayFormat));\n } else {\n ariaLabel = this.replacei18n(this.i18n[\"aria-choose-checkin\"], fecha.format(time, this.ariaDayFormat));\n }\n if (ariaLabel) {\n days[i].setAttribute(\"aria-label\", ariaLabel);\n }\n days[i].setAttribute(\"aria-disabled\", ariaDisabled);\n }\n }\n replacei18n(string, value) {\n return string.replace(\"%s\", value);\n }\n checkOnFocus(event) {\n if (event.target && this.input === event.target || this.datepicker.contains(event.target)) {\n this.isOnFocus = true;\n } else {\n this.isOnFocus = false;\n if (this.isOpen) {\n this.closeDatepicker();\n }\n }\n }\n doKeyDown(event) {\n switch (event.keyCode) {\n case 39:\n if (this.isOnFocus) {\n event.preventDefault();\n this.setActiveDay(\"next\");\n }\n break;\n case 37:\n if (this.isOnFocus) {\n event.preventDefault();\n this.setActiveDay(\"prev\");\n }\n break;\n case 40:\n if (this.isOnFocus) {\n event.preventDefault();\n this.setActiveDay(\"down\");\n }\n break;\n case 38:\n if (this.isOnFocus) {\n event.preventDefault();\n this.setActiveDay(\"up\");\n }\n break;\n case 36:\n if (this.isOnFocus) {\n event.preventDefault();\n this.setActiveDay(\"first\");\n }\n break;\n case 35:\n if (this.isOnFocus) {\n event.preventDefault();\n this.setActiveDay(\"last\");\n }\n break;\n case 27:\n if (this.isOnFocus && this.input.offsetParent !== null) {\n this.setFocusToInput();\n }\n break;\n case 34:\n if (this.isOnFocus) {\n event.preventDefault();\n this.moveMonthFromKeyboard(\"next\");\n }\n break;\n case 33:\n if (this.isOnFocus) {\n event.preventDefault();\n this.moveMonthFromKeyboard(\"prev\");\n }\n break;\n case 13:\n if (this.isOnFocus) {\n event.preventDefault();\n this.handleReturn();\n }\n break;\n }\n }\n setActiveDay($direction) {\n const activeEl = document.activeElement;\n if (activeEl && this.hasClass(activeEl, this.className + \"__month-day--visibleMonth\") && this.datepicker.contains(activeEl)) {\n const currentIndex = parseInt(activeEl.getAttribute(\"index\"), 10);\n const currentWeekdayIndex = parseInt(activeEl.getAttribute(\"d\"), 10);\n let nextIndex = -1;\n switch ($direction) {\n case \"next\":\n nextIndex = currentIndex + 1;\n break;\n case \"prev\":\n nextIndex = currentIndex - 1;\n break;\n case \"up\":\n nextIndex = currentIndex - 7;\n break;\n case \"down\":\n nextIndex = currentIndex + 7;\n break;\n case \"first\":\n if (currentWeekdayIndex === 1) {\n return false;\n }\n nextIndex = currentIndex - (currentWeekdayIndex - 1);\n break;\n case \"last\":\n if (currentWeekdayIndex === 7) {\n return false;\n }\n nextIndex = currentIndex + (7 - currentWeekdayIndex);\n break;\n }\n const nextDay = this.datepicker.querySelectorAll('[index=\"' + nextIndex + '\"]');\n if (nextDay.length > 0 && nextIndex > 0) {\n this.setDayFocus(nextDay[0]);\n } else if (nextIndex > 0) {\n let nextDay = \"\";\n const gone = this.goToNextMonth(2, true);\n if (gone) {\n const month = this.datepicker.getElementsByClassName(this.className + \"__month--month2\");\n if (month.length > 0) {\n if ($direction === \"down\") {\n nextDay = month[0].querySelectorAll(\".\" + this.className + '__month-day--visibleMonth[d=\"' + currentWeekdayIndex + '\"]');\n } else if ($direction === \"last\") {\n const nextWeekdayIndex = currentWeekdayIndex + (7 - currentWeekdayIndex);\n nextDay = month[0].querySelectorAll(\".\" + this.className + '__month-day--visibleMonth[d=\"' + nextWeekdayIndex + '\"]');\n } else {\n nextDay = month[0].querySelectorAll(\".\" + this.className + \"__month-day--visibleMonth\");\n }\n if (nextDay.length > 0) {\n this.setDayFocus(nextDay[0]);\n }\n }\n }\n } else if (nextIndex <= 0) {\n let prevDay = \"\";\n const gone = this.goToPreviousMonth(1, true);\n if (gone) {\n const month = this.datepicker.getElementsByClassName(this.className + \"__month--month1\");\n if (month.length > 0) {\n if ($direction === \"up\") {\n prevDay = month[0].querySelectorAll(\".\" + this.className + '__month-day--visibleMonth[d=\"' + currentWeekdayIndex + '\"]');\n } else if ($direction === \"first\") {\n const prevWeekdayIndex = currentWeekdayIndex - (currentWeekdayIndex - 1);\n prevDay = month[0].querySelectorAll(\".\" + this.className + '__month-day--visibleMonth[d=\"' + prevWeekdayIndex + '\"]');\n } else {\n prevDay = month[0].querySelectorAll(\".\" + this.className + \"__month-day--visibleMonth\");\n }\n if (prevDay.length > 0) {\n this.setDayFocus(prevDay[prevDay.length - 1]);\n }\n }\n }\n }\n } else {\n this.setInitialActiveDay();\n }\n }\n setInitialActiveDay() {\n // Check if today is visible\n const today = this.datepicker.getElementsByClassName(this.className + \"__month-day--today\");\n if (today.length > 0) {\n this.setDayFocus(today[0]);\n return today[0];\n }\n\n // Check if check-in is visible\n const checkin = this.datepicker.getElementsByClassName(this.className + \"__month-day--first-day-selected\");\n if (checkin.length > 0) {\n this.setDayFocus(checkin[0]);\n return checkin[0];\n }\n\n // Get first visible day\n const visibleDay = this.datepicker.getElementsByClassName(this.className + \"__month-day--visibleMonth\");\n if (visibleDay.length > 0) {\n this.setDayFocus(visibleDay[0]);\n return visibleDay[0];\n }\n }\n setDayFocus(day) {\n const days = this.datepicker.getElementsByTagName(\"td\");\n this.removeDaysTabIndex(days);\n day.setAttribute(\"tabindex\", \"0\");\n day.focus();\n if (this.start && !this.end) {\n this.dayHovering(day);\n }\n }\n removeDaysTabIndex(days) {\n for (let i = 0; i < days.length; i++) {\n days[i].removeAttribute(\"tabindex\");\n }\n }\n setDayIndexes() {\n const days = this.datepicker.getElementsByTagName(\"td\");\n this.dayIndex = 1;\n for (let i = 0; i < days.length; i++) {\n if (this.hasClass(days[i], this.className + \"__month-day--visibleMonth\")) {\n days[i].setAttribute(\"index\", this.dayIndex);\n this.dayIndex++;\n } else {\n days[i].setAttribute(\"index\", 0);\n }\n }\n }\n setFocusToInput() {\n this.input.focus();\n this.closeDatepicker();\n this.clearHovering();\n this.justEsc = true;\n this.isOnFocus = false;\n }\n moveMonthFromKeyboard($direction) {\n if ($direction === \"prev\") {\n this.goToPreviousMonth(1, true);\n } else {\n this.goToNextMonth(2, true);\n }\n }\n handleReturn() {\n const activeEl = document.activeElement;\n if (activeEl && this.datepicker.contains(activeEl) && (this.hasClass(activeEl, this.className + \"__month-day--visibleMonth\") || this.hasClass(activeEl, this.className + \"__month-button\") || this.hasClass(activeEl, this.className + \"__close-button\") || this.hasClass(activeEl, this.className + \"__clear-button\") || this.hasClass(activeEl, this.className + \"__submit-button\"))) {\n activeEl.click();\n }\n }\n\n // ------------------ //\n // PUBLIC METHODS //\n // ------------------ //\n\n open() {\n this.openDatepicker();\n }\n close() {\n this.closeDatepicker();\n }\n getDatePicker() {\n return this.datepicker;\n }\n setRange(d1, d2) {\n if (typeof d1 === \"string\" && typeof d2 === \"string\") {\n d1 = this.parseDate(d1);\n d2 = this.parseDate(d2);\n } else {\n d1 = new Date(d1.getTime());\n d2 = new Date(d2.getTime());\n }\n this.setDateRange(d1, d2);\n }\n clear() {\n this.clearSelection();\n }\n getNights() {\n let count = 0;\n if (this.start && this.end) {\n count = this.countDays(this.end, this.start) - 1;\n } else {\n const value = this.getValue();\n const dates = value ? value.split(this.separator) : \"\";\n if (dates && dates.length >= 2) {\n const _format = this.format;\n count = this.countDays(this.parseDate(dates[0], _format), this.parseDate(dates[1], _format)) - 1;\n }\n }\n return count;\n }\n destroy() {\n if (document.getElementById(this.getDatepickerId())) {\n this.removeAllBoundedListeners(this.input, \"click\");\n this.removeAllBoundedListeners(document, \"click\");\n this.removeAllBoundedListeners(this.input, \"change\");\n this.datepicker.parentNode.removeChild(this.datepicker);\n }\n }\n}\n\nexport { HotelDatepicker as default };\n"],"names":["module","exports","e","i","t","prototype","isBetween","s","f","n","o","r","u","this","isAfter","isBefore","token","twoDigitsOptional","twoDigits","word","literal","shorten","arr","sLen","newArr","len","length","push","substr","monthUpdate","arrName","v","i18n","lowerCaseArr","map","toLowerCase","index","indexOf","assign","origObj","args","_i","arguments","_a","args_1","obj","key","dayNames","monthNames","monthNamesShort","defaultI18n","dayNamesShort","amPm","DoFn","dayOfMonth","globalI18n","setGlobalDateI18n","regexEscape","str","replace","pad","val","String","formatFlags","D","dateObj","getDate","DD","Do","d","getDay","dd","ddd","dddd","M","getMonth","MM","MMM","MMMM","YY","getFullYear","YYYY","h","getHours","hh","H","HH","m","getMinutes","mm","getSeconds","ss","S","Math","round","getMilliseconds","SS","SSS","a","A","toUpperCase","ZZ","offset","getTimezoneOffset","floor","abs","Z","monthParse","emptyDigits","emptyWord","timezoneOffset","parts","match","minutes","parseInt","parseFlags","cent","Date","undefined","globalMasks","default","shortDate","mediumDate","longDate","fullDate","isoDate","isoDateTime","shortTime","mediumTime","longTime","format","mask","Object","toString","call","isNaN","getTime","Error","literals","$0","$1","combinedI18nSettings","shift","parse","dateStr","dateInfo","year","month","day","hour","minute","second","millisecond","isPm","parseInfo","newFormat","specifiedFields","requiredFields","info","field","regex","requiredField","keys","forEach","matches","RegExp","dateTZ","parser","value","validateFields","UTC","idCounter","HotelDatepicker","constructor","input","options","_boundedEventHandlers","id","getNewId","opts","className","infoFormat","ariaDayFormat","separator","startOfWeek","startDate","endDate","minNights","minNightsMultiple","maxNights","selectForward","disabledDates","noCheckInDates","noCheckOutDates","disabledDaysOfWeek","noCheckInDaysOfWeek","noCheckOutDaysOfWeek","daysWithExtraText","enableCheckout","preventContainerClose","container","animationSpeed","hoveringTooltip","autoClose","showTopbar","topbarPosition","moveBothMonths","inline","clearButton","submitButton","Boolean","submitButtonName","closeOnScroll","selected","night","nights","button","getValue","setValue","onDayClick","onOpenDatepicker","onSelectRange","extraDayText","init","addBoundedListener","node","event","handler","capture","boundedHandler","bind","addEventListener","removeAllBoundedListeners","handlers","eventHandlers","removeEventListener","setFechaI18n","fecha","getWeekDayNames","week","lang","getMonthDom","document","getElementById","getMonthTableId","getMonthName","getDatepickerId","generateId","getCloseButtonId","getClearButtonId","getSubmitButtonId","getTooltipId","getNextMonth","_m","valueOf","setMonth","getPrevMonth","getDateString","date","parseDate","parent","parentElement","start","end","minDays","maxDays","isTouchDevice","isOpen","changed","justEsc","isOnFocus","createDom","defaultTime","compareMonth","parseDisabledDates","getDisabledDays","showMonth","setDayIndexes","topBarDefaultText","openDatepicker","disabled","setAttribute","addListeners","isFirstDisabledDate","lastDisabledDate","setDayAriaAttributes","nextButtons","datepicker","getElementsByClassName","evt","goToNextMonth","prevButtons","goToPreviousMonth","closeDatepicker","clearDatepicker","window","onResizeDatepicker","datepickerHover","datepickerMouseOut","checkAndSetDefaultValue","doKeyDown","checkOnFocus","domString","createDatepickerDomString","insertAdjacentHTML","wrapperClass","wrapperStyle","html","topBarHtml","buttonsHtml","setHours","name","monthDom","monthName","monthBody","getElementsByTagName","textContent","emptyElement","createMonthDomString","updateSelectableRange","_date","days","valid","setDate","dayOfWeek","currentMonth","_day","isValidDate","compareDay","type","time","addDays","classes","getDayClasses","title","hasClass","dayAttributes","daytype","class","join","role","tabindex","extraText","printAttributes","removeClass","addClass","slideDown","showSelectedDays","disableNextPrevButtons","documentClick","slideUp","createEvent","initEvent","dispatchEvent","autoclose","contains","target","tagName","dayClicked","dayHovering","style","display","isToday","isStartDate","isDayWithExtraText","isDisabled","isNoCheckIn","isNoCheckOut","isDayOfWeekDisabled","isFirstEnabledDate","isDayBeforeDisabledDate","dateString","limit","getClosestDisabledDates","substractDays","countDays","daysBeforeNextDisabledDate","daysAfterPrevDisabledDate","checkAndSetDayClasses","getAttribute","onresize","dates","split","_format","setDateRange","clearSelection","date1","date2","tmp","setTime","checkSelection","showSelectedInfo","dateRangeValue","selectedInfo","elStart","elEnd","elSelected","closeButton","count","countText","firstElementChild","isSelectStart","startDayEl","querySelectorAll","clearHovering","getClosestDisabledDays","numberOfDays","bar","errorValue","topBarErrorText","result","daysFrom1970","day1","day2","p","month1","month2","toLocalTimestamp","_obj","attribute","attr","hasOwnProperty","forceBoth","thisMonth","Number","isInteger","isMonth2","nextMonth","isSingleMonth","isMonthOutOfRange","prevMonth","isVisible","topBarText","errorText","isSelecting","hoverTime","tooltip","dayBounding","getBoundingClientRect","datepickerBounding","_left","left","_top","top","width","tooltipContainer","w","height","setTimeout","_tmp","sort","b","disabledDatesTime","x","bestPrevDate","bestNextDate","maxDateValue","bestPrevDiff","bestNextDiff","currDiff","allDays","disabledDays","disabledDaysIndexes","element","firstChild","removeChild","classRegex","c","el","test","offsetWidth","offsetHeight","getClientRects","speed","recalc","transition","DocumentTouch","ariaDisabled","ariaLabel","includes","replacei18n","string","keyCode","preventDefault","setActiveDay","offsetParent","setFocusToInput","moveMonthFromKeyboard","handleReturn","$direction","activeEl","activeElement","currentIndex","currentWeekdayIndex","nextIndex","nextDay","setDayFocus","nextWeekdayIndex","prevDay","prevWeekdayIndex","setInitialActiveDay","today","checkin","visibleDay","removeDaysTabIndex","focus","removeAttribute","dayIndex","click","open","close","getDatePicker","setRange","d1","d2","clear","getNights","destroy","parentNode"],"mappings":"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","debug_id":"3ac1661b-78c8-5e94-8673-c6975e957cd4"}