{"version":3,"file":"static/js/6976.70aeb5b5.chunk.js","mappings":"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","sources":["assets/images/Icons/SVG/Calendar.js","components/availability_calendar/components/SelectedDatesPanel.js","components/availability_calendar/components/AvailabilityDate.js","components/availability_calendar/AvailabilityCalendar.js","components/common/SelectedInfoPanel.js","utils/date.js"],"sourcesContent":["import * as React from 'react';\n\nconst SvgCalendar = (props) => (\n \n \n \n);\nexport default SvgCalendar;\n","import SvgCalendar from '../../../assets/images/Icons/SVG/Calendar';\nimport moment from 'moment';\nimport SelectedInfoPanel from '../../common/SelectedInfoPanel';\n\nexport default function SelectedDatesPanel({\n arrival,\n departure,\n className = '',\n}) {\n const formatDate = (date) => {\n if (moment(date).isValid()) {\n return moment(date).format('Do MMMM YYYY');\n }\n return null;\n };\n\n const arrivalString = formatDate(arrival);\n let departureString = null;\n if (!moment(arrival).isSame(moment(departure))) {\n departureString = formatDate(departure);\n }\n\n return (\n \n {arrivalString}\n {departureString ? ` – ${departureString}` : ''}\n \n }\n placeholder='Select Your Dates On The Calendar Above'\n icon={}\n className={className}\n />\n );\n}\n","import moment from 'moment-timezone';\nimport { Popover } from 'antd';\nimport React from 'react';\nimport { getDayName, normalizeTZOffset } from '../../../utils/date';\nimport { notification } from '../../../utils/messaging';\n\nfunction AvailabilityDate({\n date,\n utcDate,\n fullyBookedDates,\n limitedAvailabilityDates,\n disabledDates,\n minDate,\n maxDate,\n maxSelectableDate,\n maxSelectableDateMessage,\n selectedPackage,\n selectedBookingDates,\n clearSelectedDates,\n}) {\n const limitedDate = limitedAvailabilityDates.find((ld) =>\n moment(ld.date).isSame(utcDate, 'day')\n );\n const disabledDate = disabledDates.find((d) =>\n moment(d).isSame(utcDate, 'day')\n );\n const isOutsideValidDates =\n (minDate != null && moment(utcDate).isBefore(minDate, 'day')) ||\n (maxDate != null && moment(utcDate).isAfter(maxDate, 'day'));\n\n const { startDate = null, endDate = null } = selectedBookingDates;\n const start = moment(normalizeTZOffset(startDate));\n const end = moment(normalizeTZOffset(endDate));\n\n if (selectedPackage) {\n if (isOutsideValidDates) {\n return (\n {date.getDate()}\n );\n }\n\n const dateDay = getDayName(date.getDay());\n const arrivalDay = selectedPackage?.arrival_day;\n\n const isInSelectedRange =\n maxDate != null &&\n moment(utcDate).isSameOrAfter(start, 'day') &&\n minDate != null &&\n moment(utcDate).isSameOrBefore(end, 'day');\n\n if (\n dateDay !== arrivalDay &&\n !isInSelectedRange &&\n selectedPackage?.arrival_day &&\n selectedPackage?.departure_day\n ) {\n return {date.getDate()};\n } else if (isInSelectedRange) {\n return {date.getDate()};\n }\n }\n\n const isDepartureOnlyAndToday =\n limitedDate &&\n moment(utcDate).isSame(minDate, 'day') &&\n limitedDate.type === 'departure-only';\n\n const nextDay = moment(utcDate).add(1, 'day');\n\n const nextDayIsNotSelectable =\n limitedAvailabilityDates.find(\n (ld) =>\n moment(ld.date).isSame(nextDay, 'day') && ld.type === 'arrival-only'\n ) || fullyBookedDates.some((fd) => moment(fd).isSame(nextDay, 'day'));\n\n const isArrivalOnlyAndNoValidNextDate =\n limitedDate &&\n limitedDate.type === 'arrival-only' &&\n nextDayIsNotSelectable;\n\n const isUnavailableDate =\n isOutsideValidDates ||\n fullyBookedDates.some((fd) => moment(fd).isSame(utcDate, 'day')) ||\n isDepartureOnlyAndToday ||\n isArrivalOnlyAndNoValidNextDate;\n\n // Colour unavailable if it is fully-booked or in the past\n if (isUnavailableDate) {\n return (\n {date.getDate()}\n );\n }\n\n const isNotBookableDate =\n Boolean(maxSelectableDate) &&\n moment(utcDate).isAfter(maxSelectableDate, 'day');\n\n const onClick = isNotBookableDate\n ? () => {\n notification.warning({ description: maxSelectableDateMessage });\n clearSelectedDates();\n }\n : !disabledDate\n ? () => {}\n : clearSelectedDates;\n\n // Colour limited (with popover) if it has limited availability\n if (limitedDate && limitedDate.type !== 'no-night') {\n let text = undefined;\n if (limitedDate.type === 'arrival-only') {\n text = 'Arrival Only';\n } else if (limitedDate.type === 'departure-only') {\n text = 'Departure Only';\n }\n return (\n {text}}\n trigger={text ? ['hover', 'click'] : 'none'}\n >\n \n {date.getDate()}\n \n \n );\n }\n\n // No night session indicator\n if (limitedDate && limitedDate.type === 'no-night') {\n const nextDay = moment(utcDate).add(1, 'day');\n const isNextDayUnavailable =\n (minDate != null && nextDay.isBefore(minDate, 'day')) ||\n (maxDate != null && nextDay.isAfter(maxDate, 'day')) ||\n fullyBookedDates.some((fd) => moment(fd).isSame(nextDay, 'day'));\n const nextDayLimited = limitedAvailabilityDates.find(\n (ld) => moment(ld.date).isSame(nextDay, 'day') && ld.type !== 'no-night'\n );\n // Only show no-night indicator if the next day is green (or another no-night)\n if (isNextDayUnavailable || nextDayLimited) {\n return (\n \n {date.getDate()}\n \n );\n }\n return (\n \n {date.getDate()}\n \n );\n }\n\n // Otherwise colour available\n return (\n \n {date.getDate()}\n \n );\n}\n\nexport default AvailabilityDate;\n","import { DateRangePicker } from 'react-date-range';\nimport { enGB } from 'date-fns/locale';\nimport { Button, Spin } from 'antd';\nimport SelectedDatesPanel from './components/SelectedDatesPanel';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport {\n getAllDatesNotEqualToWeekday,\n getDatesBetween,\n getDatesInMonthAfterDate,\n getDatesInMonthBeforeDate,\n getNextWeekday,\n normalizeTZOffset,\n toNonUTCDate,\n toUTCDate,\n} from '../../utils/date';\nimport moment from 'moment-timezone';\nimport AvailabilityDate from './components/AvailabilityDate';\nimport './assets/css/calendar.css';\nimport 'react-date-range/dist/styles.css'; // main style file\nimport 'react-date-range/dist/theme/default.css';\nimport { addDays } from 'date-fns';\n\nexport const emptyDatesObject = {\n startDate: null,\n endDate: addDays(null, null),\n key: 'selection',\n end_date: null,\n};\n\n/**\n * Get the list of current disabled dates based on the current calendar selection.\n *
\n * For example: prevents selecting arrival-only dates if a departure date is\n * currently being selected, and prevents selecting a period which overlaps a\n * limited-availability date, and so on...\n *\n * @param fullyBookedDates the list of fully-booked/unavailable dates\n * @param limitedAvailabilityDates the list of limited availability objects\n * @param startDate the currently selected booking start date object\n * @param endDate the currently selected booking end date object\n * @param maxSelectableDate the maximum selectable date\n * @param maxVisibleDate the maximum visible date\n */\nfunction getDynamicDisabledDates(\n fullyBookedDates,\n limitedAvailabilityDates,\n startDate,\n endDate,\n maxSelectableDate,\n maxVisibleDate\n) {\n limitedAvailabilityDates = limitedAvailabilityDates.sort(\n (a, b) => moment(a.date).unix() - moment(b.date).unix()\n );\n const start = moment(normalizeTZOffset(startDate));\n const end = moment(normalizeTZOffset(endDate));\n\n let disabledDates = [...fullyBookedDates];\n\n if (maxSelectableDate && maxVisibleDate) {\n disabledDates.push(...getDatesBetween(maxSelectableDate, maxVisibleDate));\n }\n\n // A start date (arrival) is selected but not an end-date (departure)\n const isSelectingDeparture =\n start.isValid() && (!end.isValid() || start.isSame(end, 'day'));\n\n if (!isSelectingDeparture) {\n // Selecting Arrival date -- disable all departure-only dates\n disabledDates.push(\n ...limitedAvailabilityDates\n .filter((ld) => ld.type === 'departure-only')\n .map((ld) => ld.date)\n );\n } else {\n // Dates which can't be selected as a valid departure date (or arrival date if they're in the past)\n const invalidSecondSelectionDates = limitedAvailabilityDates.filter(\n (ld) =>\n (ld.type === 'arrival-only' && moment(ld.date).isAfter(start, 'day')) ||\n ((ld.type === 'departure-only' || ld.type === 'no-night') &&\n moment(ld.date).isBefore(start, 'day'))\n );\n disabledDates.push(...invalidSecondSelectionDates.map((ld) => ld.date));\n\n const blockingDates = [\n ...fullyBookedDates,\n ...limitedAvailabilityDates.map((d) => d.date),\n ].sort((a, b) => moment(a).unix() - moment(b).unix());\n\n // Block all dates after the closest future date which has an un-bookable period within it\n const isSelectedAFutureBlocker = limitedAvailabilityDates.some(\n ({ date, type }) => start.isSame(date, 'day') && type === 'no-night'\n );\n const closestFutureBlocker = isSelectedAFutureBlocker\n ? moment(startDate).add(1, 'day').toDate()\n : blockingDates.find((d) => moment(d).isAfter(start, 'day'));\n if (closestFutureBlocker) {\n disabledDates.push(...getDatesInMonthAfterDate(closestFutureBlocker));\n }\n\n // Block all dates before the closest past date which has an un-bookable period within it\n const isSelectedAPastBlocker = limitedAvailabilityDates.some(\n ({ date, type }) => start.isSame(date, 'day') && type === 'arrival-only'\n );\n const closestPastBlocker = isSelectedAPastBlocker\n ? startDate\n : blockingDates\n .slice()\n .reverse()\n .find((d) => moment(d).isBefore(start, 'day'));\n if (closestPastBlocker) {\n disabledDates.push(...getDatesInMonthBeforeDate(closestPastBlocker));\n }\n\n // If the selected date has no-night availability, block all future dates\n if (\n limitedAvailabilityDates.some(\n ({ date, type }) => start.isSame(date, 'day') && type === 'no-night'\n )\n ) {\n disabledDates.push(start.clone().add(1, 'day').toDate());\n }\n }\n return disabledDates.map(toNonUTCDate);\n}\n\n/**\n * Get the list of current disabled dates if there is a selected package. Does not\n * have support for limited availability due to the more strict nature of custom\n * packages.\n *
\n * Disables all non-arrival dates and all fully-booked dates\n *\n * @param fullyBookedDates the list of fully-booked/unavailable dates\n * @param selectedPackage the currently selected package object\n * @param minDate the calendar minDate\n * @param maxDate the calendar maxDate\n */\nfunction getCustomPackageDisabledDates(\n fullyBookedDates,\n selectedPackage,\n minDate,\n maxDate\n) {\n let disabledDates = [...fullyBookedDates];\n let dummyMaxDate = new Date();\n\n dummyMaxDate.setFullYear(dummyMaxDate.getFullYear() + 2);\n let max_Date = maxDate ? maxDate : dummyMaxDate;\n const arrivalDay = selectedPackage?.arrival_day;\n if (arrivalDay) {\n const nonArrivalDays = getAllDatesNotEqualToWeekday(\n minDate,\n max_Date,\n arrivalDay\n );\n\n disabledDates.push(...nonArrivalDays.map(toUTCDate));\n }\n return disabledDates.map(toNonUTCDate);\n}\n\nfunction AvailabilityCalendar({\n fullyBookedDates,\n limitedAvailabilityDates,\n selectedPackage = null,\n selectedRanges, // Seemingly needs to be passed as an invariant array reference to prevent erroneous re-rendering\n minDate = new Date(),\n maxDate = null,\n maxSelectableDate = null,\n maxDateSelectMessage = 'Bookings this far in advance are not available yet. Please select different dates.',\n loading = false,\n onDateSelection = () => {},\n onMonthChange = () => {},\n clearSelectedDates = () => {},\n reRenderKey = '',\n showSelectionTail = false,\n isUnitTestEnvironment = false,\n}) {\n maxDate = maxDate ?? maxSelectableDate;\n const [focusedRange, setFocusedRange] = useState([0, 0]);\n const minDateCorrected = minDate\n ? normalizeTZOffset(moment(minDate).format('YYYY-MM-DD'))\n : null;\n const maxDateCorrected = maxDate ? normalizeTZOffset(moment(maxDate)) : null;\n const maxSelectableDateCorrected = maxSelectableDate\n ? normalizeTZOffset(moment(maxSelectableDate))\n : null;\n\n const { startDate = null, endDate = null } = selectedRanges?.[0];\n useEffect(() => {\n if (!startDate) {\n setFocusedRange([0, 0]);\n }\n }, [startDate, endDate]);\n const maxDateToShow = new Date();\n maxDateToShow.setFullYear(maxDateToShow.getFullYear() + 5);\n const disabledDates = useMemo(() => {\n if (\n selectedPackage &&\n selectedPackage?.arrival_day &&\n selectedPackage?.departure_day\n ) {\n return getCustomPackageDisabledDates(\n fullyBookedDates,\n selectedPackage,\n minDate,\n maxDate\n );\n } else {\n return getDynamicDisabledDates(\n fullyBookedDates,\n limitedAvailabilityDates,\n startDate,\n endDate,\n maxSelectableDateCorrected,\n maxDateCorrected\n );\n }\n }, [\n selectedPackage,\n fullyBookedDates,\n minDate,\n maxDate,\n limitedAvailabilityDates,\n startDate,\n endDate,\n maxSelectableDateCorrected,\n maxDateCorrected,\n ]);\n\n return (\n <>\n \n {loading && (\n
\n \n
\n )}\n {\n const selection = item.selection;\n\n if (!selection.startDate) {\n // Needed for the clear selection button -- seems to be an issue in the library where sometimes it\n // interprets a null startDate as valid and only returns a selected endDate\n selection.startDate = selection.endDate;\n }\n\n // If a package has been selected, set endDate to the correct departure day\n const fixedDepartureDay = selectedPackage?.departure_day;\n if (\n selectedPackage &&\n !selectedPackage?.arrival_day &&\n !selectedPackage?.departure_day\n ) {\n let currDate = new Date(selection.startDate);\n currDate.setDate(\n currDate.getDate() + selectedPackage?.booking_days\n );\n selection.endDate = currDate;\n } else if (fixedDepartureDay) {\n selection.endDate = getNextWeekday(\n selection.startDate,\n fixedDepartureDay,\n selectedPackage?.arrival_day === selectedPackage?.departure_day,\n selectedPackage?.booking_week\n );\n }\n\n // This is to render in time selection page\n selection['end_date'] = selection['endDate'];\n onDateSelection(item.selection);\n }}\n onShownDateChange={(date) => onMonthChange(date)}\n disabledDates={disabledDates}\n locale={enGB}\n months={1}\n ranges={selectedRanges}\n dragSelectionEnabled={\n /*\n Weird bug with library where disabling this breaks functionality in unit tests, but it needs to be\n disabled for solely visual animation purposes (not functionality)\n */\n isUnitTestEnvironment\n }\n showPreview={false}\n direction='horizontal'\n color='black'\n rangeColors={['#60B077', 'white']}\n maxDate={maxDateToShow}\n minDate={minDateCorrected}\n {...(maxDate\n ? {\n maxDate: maxDateCorrected,\n }\n : {})}\n focusedRange={focusedRange}\n onRangeFocusChange={setFocusedRange}\n dayContentRenderer={(date) => (\n {\n if (!selectedRanges?.[0]?.startDate) {\n return;\n }\n if (\n moment(selectedRanges[0].startDate).isSame(\n selectedRanges?.[0]?.endDate,\n 'day'\n )\n ) {\n clearSelectedDates();\n setFocusedRange([0, 0]);\n }\n }}\n />\n )}\n />\n \n {\n clearSelectedDates();\n setFocusedRange([0, 0]);\n }}\n >\n Clear Selection\n \n \n \n );\n}\n\nexport default AvailabilityCalendar;\n","import './assets/css/selected-info-panel.css';\nimport Icon, { InfoOutlined } from '@ant-design/icons';\n\nfunction SelectedInfoPanel({\n title,\n content,\n placeholder = 'Select an option above',\n showPlaceholder = true,\n className = '',\n icon = ,\n iconSize = 1.3,\n}) {\n return (\n
\n icon}\n />\n
{title}
\n
\n {!showPlaceholder ? (\n content\n ) : (\n {placeholder}\n )}\n
\n
\n );\n}\n\nexport default SelectedInfoPanel;\n","import moment from 'moment';\nimport { month, ordinal_suffix_of } from '../components/common/Utils';\nimport dayjs from 'dayjs';\n\nconst getDayName = (dayIndex) => {\n const days = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ];\n return days[dayIndex];\n};\n\nconst getFullDate = (date) => {\n if (!date) {\n return null;\n }\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n\n return year + '-' + month + '-' + day;\n};\n\n/**\n * Returns the next date after Today which is not in blockedDates\n * @param blockedDates {Array} A list of un-available dates in the format (yyyy-mm-dd) (or any format the\n * {@link https://momentjs.com/docs/#/parsing/string/ moment library} can parse)\n */\nconst getNextAvailableDate = (blockedDates) => {\n const parsedDates = blockedDates\n .map((dateStr) => moment(dateStr))\n .sort((a, b) => b.diff(a));\n\n let date = moment();\n while (parsedDates.some((blocked) => blocked.isSame(date, 'day'))) {\n date.add(1, 'days');\n }\n return date.format('Y-MM-DD');\n};\n\nconst formatDate = (date) => {\n return moment(date).format('DD/MM/YYYY');\n};\nconst formatDateWithTime = (date) => {\n return moment(date).format('DD/MM/YYYY HH:mm');\n};\n\nconst formatDateTime = (timestamp) => {\n const d = dayjs(timestamp);\n const day = d.format('Do MMM. h:mm a');\n return day;\n};\n\nconst formatShortDateTime = (timestamp) => {\n const d = new Date(timestamp);\n const day = d.getDate().toString().padStart(2, '0');\n const month = (d.getMonth() + 1).toString().padStart(2, '0');\n const time = d.toLocaleString('en-UK', {\n hour: 'numeric',\n hourCycle: 'h12',\n });\n return day + '/' + month + ' ' + time;\n};\n\nconst getDatesBetween = (start, end) => {\n const startDate = moment(start);\n const endDate = moment(end);\n let dates = [];\n\n let currDate = startDate.startOf('day');\n let lastDate = endDate.startOf('day');\n\n while (currDate.add(1, 'days').diff(lastDate) < 0) {\n dates.push(normalizeTZOffset(currDate.clone().toDate()));\n }\n return dates;\n};\n\n// TODO unit test\nconst getDatesInMonthBeforeDate = (date) => {\n const startDate = moment(date).startOf('month').clone().subtract(1, 'day');\n const endDate = moment(date);\n let dates = [];\n\n let currDate = startDate.startOf('day');\n let lastDate = endDate.startOf('day');\n\n while (currDate.add(1, 'days').diff(lastDate) < 0) {\n dates.push(normalizeTZOffset(currDate.clone().toDate()));\n }\n return dates;\n};\n\n// TODO unit test\nconst getDatesInMonthAfterDate = (date) => {\n if (!date) {\n return [];\n }\n const endDate = moment(date).endOf('month').add(1, 'day').clone();\n const startDate = moment(date);\n let dates = [];\n\n let currDate = endDate.startOf('day');\n let lastDate = startDate.startOf('day');\n\n let diff = currDate.subtract(1, 'days').diff(lastDate);\n while (diff > 0) {\n if (currDate.date() === date.getDate()) {\n break;\n }\n dates.push(normalizeTZOffset(currDate.clone().toDate()));\n diff = currDate.subtract(1, 'days').diff(lastDate);\n }\n return dates;\n};\n\nconst toUTCDate = (dateString) => {\n // Returns a date with time 00:00:00 GMT+000\n if (!dateString || !moment(dateString).isValid()) {\n return null;\n }\n let date;\n if (typeof dateString === 'string') {\n date = new Date(new Date(dateString).toISOString().substring(0, 23));\n } else {\n date = new Date(dateString.toISOString());\n }\n date.setTime(date.getTime() - date.getTimezoneOffset() * 60 * 1000);\n return date;\n};\n\nconst toNonUTCDate = (date) => {\n if (!date) {\n return null;\n }\n return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n};\n\nconst normalizeTZOffset = (date) => {\n if (!date || !moment(date).isValid()) {\n return date;\n }\n let copy;\n if (typeof date === 'string') {\n copy = new Date(date);\n } else {\n copy = new Date(date.toISOString());\n }\n copy.setTime(copy.getTime() + Math.abs(copy.getTimezoneOffset() * 60 * 1000));\n return copy;\n};\n\nconst getNextWeekday = (\n startDate,\n weekdayName,\n isDayToDay = false,\n minWeek = 0\n) => {\n const currDate = new Date(startDate);\n currDate.setDate(currDate.getDate() + minWeek * 7);\n while (getDayName(currDate.getDay()) !== weekdayName) {\n currDate.setDate(currDate.getDate() + 1);\n }\n if (isDayToDay) {\n currDate.setDate(currDate.getDate() + 7);\n }\n\n return currDate;\n};\n\nconst getAllDatesNotEqualToWeekday = (minDate, maxDate, weekdayName) => {\n const nonArrivalDays = [];\n const currDate = moment(new Date(minDate));\n while (currDate.isSameOrBefore(maxDate, 'day')) {\n if (getDayName(currDate.day()) !== weekdayName) {\n nonArrivalDays.push(new Date(currDate.toDate()));\n }\n currDate.add(1, 'day');\n }\n return nonArrivalDays;\n};\n\nexport {\n getDayName,\n getFullDate,\n formatDate,\n formatDateWithTime,\n getNextAvailableDate,\n getNextWeekday,\n getAllDatesNotEqualToWeekday,\n formatDateTime,\n formatShortDateTime,\n getDatesBetween,\n getDatesInMonthBeforeDate,\n getDatesInMonthAfterDate,\n toUTCDate,\n toNonUTCDate,\n normalizeTZOffset,\n};\n"],"names":["props","_jsx","_objectSpread","xmlns","width","height","viewBox","children","d","fill","SelectedDatesPanel","_ref","arrival","departure","_ref$className","className","formatDate","date","moment","isValid","format","arrivalString","departureString","isSame","SelectedInfoPanel","title","showPlaceholder","content","_jsxs","_Fragment","concat","placeholder","icon","SvgCalendar","utcDate","fullyBookedDates","limitedAvailabilityDates","disabledDates","minDate","maxDate","maxSelectableDate","maxSelectableDateMessage","selectedPackage","selectedBookingDates","clearSelectedDates","limitedDate","find","ld","disabledDate","isOutsideValidDates","isBefore","isAfter","_selectedBookingDates","startDate","_selectedBookingDates2","endDate","start","normalizeTZOffset","end","getDate","dateDay","getDayName","getDay","arrivalDay","arrival_day","isInSelectedRange","isSameOrAfter","isSameOrBefore","departure_day","isDepartureOnlyAndToday","type","nextDay","add","nextDayIsNotSelectable","some","fd","isArrivalOnlyAndNoValidNextDate","onClick","Boolean","notification","description","text","undefined","Popover","overlayClassName","trigger","isNextDayUnavailable","nextDayLimited","emptyDatesObject","addDays","key","end_date","_ref4","_maxDate","_selectedRanges$4","_selectedRanges$5","_ref4$selectedPackage","selectedRanges","_ref4$minDate","Date","_ref4$maxDate","_ref4$maxSelectableDa","_ref4$maxDateSelectMe","maxDateSelectMessage","_ref4$loading","loading","_ref4$onDateSelection","onDateSelection","_ref4$onMonthChange","onMonthChange","_ref4$clearSelectedDa","_ref4$reRenderKey","reRenderKey","_ref4$showSelectionTa","showSelectionTail","_ref4$isUnitTestEnvir","isUnitTestEnvironment","_useState","useState","_useState2","_slicedToArray","focusedRange","setFocusedRange","minDateCorrected","maxDateCorrected","maxSelectableDateCorrected","_selectedRanges$","_selectedRanges$$star","_selectedRanges$$endD","useEffect","maxDateToShow","setFullYear","getFullYear","useMemo","_toConsumableArray","dummyMaxDate","max_Date","nonArrivalDays","getAllDatesNotEqualToWeekday","push","apply","map","toUTCDate","toNonUTCDate","getCustomPackageDisabledDates","maxVisibleDate","sort","a","b","unix","getDatesBetween","filter","invalidSecondSelectionDates","blockingDates","closestFutureBlocker","toDate","getDatesInMonthAfterDate","closestPastBlocker","_ref2","slice","reverse","getDatesInMonthBeforeDate","_ref3","clone","getDynamicDisabledDates","id","Spin","DateRangePicker","onChange","item","selection","fixedDepartureDay","getNextWeekday","booking_week","currDate","setDate","booking_days","onShownDateChange","locale","enGB","months","ranges","dragSelectionEnabled","showPreview","direction","color","rangeColors","onRangeFocusChange","dayContentRenderer","AvailabilityDate","_selectedRanges$2","_selectedRanges$3","Button","_ref$placeholder","_ref$showPlaceholder","_ref$icon","InfoOutlined","_ref$iconSize","iconSize","Icon","style","fontSize","component","dayIndex","getFullDate","day","String","padStart","month","getMonth","formatDateWithTime","formatDateTime","timestamp","dayjs","formatShortDateTime","toString","toLocaleString","hour","hourCycle","dates","startOf","lastDate","diff","subtract","endOf","dateString","toISOString","substring","setTime","getTime","getTimezoneOffset","getUTCFullYear","getUTCMonth","getUTCDate","copy","Math","abs","weekdayName","isDayToDay","arguments","length","minWeek"],"sourceRoot":""}