willba-component-library 0.2.15 → 0.2.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -544,7 +544,7 @@ function useTheme(_a) {
544
544
  return themePalette;
545
545
  }
546
546
 
547
- var css_248z$c = "@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap');\n\n.will-root * {\n font-family: 'Montserrat', sans-serif;\n}\n\n.will-root {\n \n box-sizing: border-box;\n font-size: 14px;\n \n color: #1E1E1E;\n \n /* Palette */\n --will-primary: #374269;\n --will-secondary: #374269;\n --will-grey: #ABA7AF;\n --will-white: #fff;\n --will-black: #000;\n --will-onahau: #CDEEFF;\n --will-text: #5A5959;\n --will-charcoal-blue: #384265;\n --will-transparent-white: rgba(255, 255, 255, 0.30);\n --will-transparent-black: rgba(171, 167, 175, 0.30);\n\n /* Confines */\n --will-box-shadow-dark: 0px 2px 12px 2px #a1a1a180;\n --will-box-shadow-light: 0px 2px 12px 2px #bcb9b980;\n\n /* Breakpoints */\n\n --will-lg: 1140px;\n --will-md: 960px;\n --will-sm: 600px;\n --will-xl: 1280px;\n --will-xs: 0px;\n}\n\n/* Typography */\n\n.will-root h1, h2, h3, h4, h5, h6 {\n font-weight: 700;\n} \n\n.will-root p, h1, h2, h3, h4, h5, h6, span {\n margin: 0;\n padding: 0;\n}\n\n\n/* Integration fixes */\n\n.will-root p {\n margin: 0 !important;\n}\n\n.will-root button {\n line-height: normal !important;\n}\n";
547
+ var css_248z$c = "@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap');\n\n.will-root * {\n font-family: 'Montserrat', sans-serif;\n}\n\n.will-root {\n \n box-sizing: border-box;\n font-size: 14px;\n \n color: #1E1E1E;\n \n /* Palette */\n --will-primary: #374269;\n --will-secondary: #374269;\n --will-grey: #ABA7AF;\n --will-white: #fff;\n --will-white-transparent: #ffffffcf;\n --will-black: #000;\n --will-onahau: #CDEEFF;\n --will-text: #5A5959;\n --will-charcoal-blue: #384265;\n --will-transparent-white: rgba(255, 255, 255, 0.30);\n --will-transparent-black: rgba(171, 167, 175, 0.30);\n\n /* Confines */\n --will-box-shadow-dark: 0px 2px 12px 2px #a1a1a180;\n --will-box-shadow-light: 0px 2px 12px 2px #bcb9b980;\n\n /* Breakpoints */\n\n --will-lg: 1140px;\n --will-md: 960px;\n --will-sm: 600px;\n --will-xl: 1280px;\n --will-xs: 0px;\n}\n\n/* Typography */\n\n.will-root h1, h2, h3, h4, h5, h6 {\n font-weight: 700;\n} \n\n.will-root p, h1, h2, h3, h4, h5, h6, span {\n margin: 0;\n padding: 0;\n}\n\n\n/* Integration fixes */\n\n.will-root p {\n margin: 0 !important;\n}\n\n.will-root button {\n line-height: normal !important;\n}\n";
548
548
  styleInject(css_248z$c);
549
549
 
550
550
  var useAwaitRender = function () {
@@ -2829,7 +2829,7 @@ instance.loadNamespaces;
2829
2829
  instance.loadLanguages;
2830
2830
 
2831
2831
  var calendar$1 = {
2832
- label: "Date",
2832
+ label: "Dates",
2833
2833
  roomsLabelPlaceholder: "Add check-in and check-out",
2834
2834
  eventsLabelPlaceholder: "Add search dates",
2835
2835
  startDate: "Start date",
@@ -2867,12 +2867,20 @@ var nights$1 = "nights";
2867
2867
  var checkIn$1 = "check-in";
2868
2868
  var checkOut$1 = "check-out";
2869
2869
  var search$1 = "Search";
2870
+ var apply$1 = "Apply";
2871
+ var clearDates$1 = "Clear dates";
2872
+ var noCheckIn$1 = "No check-in";
2873
+ var noCheckOut$1 = "No check-out";
2870
2874
  var enCommon = {
2871
2875
  night: night$1,
2872
2876
  nights: nights$1,
2873
2877
  checkIn: checkIn$1,
2874
2878
  checkOut: checkOut$1,
2875
- search: search$1
2879
+ search: search$1,
2880
+ apply: apply$1,
2881
+ clearDates: clearDates$1,
2882
+ noCheckIn: noCheckIn$1,
2883
+ noCheckOut: noCheckOut$1
2876
2884
  };
2877
2885
 
2878
2886
  var calendar = {
@@ -2916,12 +2924,20 @@ var nights = "yötä";
2916
2924
  var checkIn = "check-in";
2917
2925
  var checkOut = "check-out";
2918
2926
  var search = "Hae";
2927
+ var apply = "Apply";
2928
+ var clearDates = "Clear dates";
2929
+ var noCheckIn = "No check-in";
2930
+ var noCheckOut = "No check-out";
2919
2931
  var fiCommon = {
2920
2932
  night: night,
2921
2933
  nights: nights,
2922
2934
  checkIn: checkIn,
2923
2935
  checkOut: checkOut,
2924
- search: search
2936
+ search: search,
2937
+ apply: apply,
2938
+ clearDates: clearDates,
2939
+ noCheckIn: noCheckIn,
2940
+ noCheckOut: noCheckOut
2925
2941
  };
2926
2942
 
2927
2943
  var urlParams = typeof window !== 'undefined'
@@ -10790,85 +10806,190 @@ var reactResponsiveExports = reactResponsive.exports;
10790
10806
  var css_248z$9 = ".rdp {\n --rdp-cell-size: 40px;\n --rdp-caption-font-size: 18px;\n --rdp-accent-color: #0000ff;\n --rdp-background-color: #e7edff;\n --rdp-accent-color-dark: #3003e1;\n --rdp-background-color-dark: #180270;\n --rdp-outline: 2px solid var(--rdp-accent-color); /* Outline border for focused elements */\n --rdp-outline-selected: 3px solid var(--rdp-accent-color); /* Outline border for focused _and_ selected elements */\n\n margin: 1em;\n}\n\n/* Hide elements for devices that are not screen readers */\n.rdp-vhidden {\n box-sizing: border-box;\n padding: 0;\n margin: 0;\n background: transparent;\n border: 0;\n -moz-appearance: none;\n -webkit-appearance: none;\n appearance: none;\n position: absolute !important;\n top: 0;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n overflow: hidden !important;\n clip: rect(1px, 1px, 1px, 1px) !important;\n border: 0 !important;\n}\n\n/* Buttons */\n.rdp-button_reset {\n appearance: none;\n position: relative;\n margin: 0;\n padding: 0;\n cursor: default;\n color: inherit;\n background: none;\n font: inherit;\n\n -moz-appearance: none;\n -webkit-appearance: none;\n}\n\n.rdp-button_reset:focus-visible {\n /* Make sure to reset outline only when :focus-visible is supported */\n outline: none;\n}\n\n.rdp-button {\n border: 2px solid transparent;\n}\n\n.rdp-button[disabled]:not(.rdp-day_selected) {\n opacity: 0.25;\n}\n\n.rdp-button:not([disabled]) {\n cursor: pointer;\n}\n\n.rdp-button:focus-visible:not([disabled]) {\n color: inherit;\n background-color: var(--rdp-background-color);\n border: var(--rdp-outline);\n}\n\n.rdp-button:hover:not([disabled]):not(.rdp-day_selected) {\n background-color: var(--rdp-background-color);\n}\n\n.rdp-months {\n display: flex;\n}\n\n.rdp-month {\n margin: 0 1em;\n}\n\n.rdp-month:first-child {\n margin-left: 0;\n}\n\n.rdp-month:last-child {\n margin-right: 0;\n}\n\n.rdp-table {\n margin: 0;\n max-width: calc(var(--rdp-cell-size) * 7);\n border-collapse: collapse;\n}\n\n.rdp-with_weeknumber .rdp-table {\n max-width: calc(var(--rdp-cell-size) * 8);\n border-collapse: collapse;\n}\n\n.rdp-caption {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0;\n text-align: left;\n}\n\n.rdp-multiple_months .rdp-caption {\n position: relative;\n display: block;\n text-align: center;\n}\n\n.rdp-caption_dropdowns {\n position: relative;\n display: inline-flex;\n}\n\n.rdp-caption_label {\n position: relative;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n margin: 0;\n padding: 0 0.25em;\n white-space: nowrap;\n color: currentColor;\n border: 0;\n border: 2px solid transparent;\n font-family: inherit;\n font-size: var(--rdp-caption-font-size);\n font-weight: bold;\n}\n\n.rdp-nav {\n white-space: nowrap;\n}\n\n.rdp-multiple_months .rdp-caption_start .rdp-nav {\n position: absolute;\n top: 50%;\n left: 0;\n transform: translateY(-50%);\n}\n\n.rdp-multiple_months .rdp-caption_end .rdp-nav {\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n}\n\n.rdp-nav_button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--rdp-cell-size);\n height: var(--rdp-cell-size);\n padding: 0.25em;\n border-radius: 100%;\n}\n\n/* ---------- */\n/* Dropdowns */\n/* ---------- */\n\n.rdp-dropdown_year,\n.rdp-dropdown_month {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.rdp-dropdown {\n appearance: none;\n position: absolute;\n z-index: 2;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n margin: 0;\n padding: 0;\n cursor: inherit;\n opacity: 0;\n border: none;\n background-color: transparent;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n.rdp-dropdown[disabled] {\n opacity: unset;\n color: unset;\n}\n\n.rdp-dropdown:focus-visible:not([disabled]) + .rdp-caption_label {\n background-color: var(--rdp-background-color);\n border: var(--rdp-outline);\n border-radius: 6px;\n}\n\n.rdp-dropdown_icon {\n margin: 0 0 0 5px;\n}\n\n.rdp-head {\n border: 0;\n}\n\n.rdp-head_row,\n.rdp-row {\n height: 100%;\n}\n\n.rdp-head_cell {\n vertical-align: middle;\n font-size: 0.75em;\n font-weight: 700;\n text-align: center;\n height: 100%;\n height: var(--rdp-cell-size);\n padding: 0;\n text-transform: uppercase;\n}\n\n.rdp-tbody {\n border: 0;\n}\n\n.rdp-tfoot {\n margin: 0.5em;\n}\n\n.rdp-cell {\n width: var(--rdp-cell-size);\n height: 100%;\n height: var(--rdp-cell-size);\n padding: 0;\n text-align: center;\n}\n\n.rdp-weeknumber {\n font-size: 0.75em;\n}\n\n.rdp-weeknumber,\n.rdp-day {\n display: flex;\n overflow: hidden;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: var(--rdp-cell-size);\n max-width: var(--rdp-cell-size);\n height: var(--rdp-cell-size);\n margin: 0;\n border: 2px solid transparent;\n border-radius: 100%;\n}\n\n.rdp-day_today:not(.rdp-day_outside) {\n font-weight: bold;\n}\n\n.rdp-day_selected,\n.rdp-day_selected:focus-visible,\n.rdp-day_selected:hover {\n color: white;\n opacity: 1;\n background-color: var(--rdp-accent-color);\n}\n\n.rdp-day_outside {\n opacity: 0.5;\n}\n\n.rdp-day_selected:focus-visible {\n /* Since the background is the same use again the outline */\n outline: var(--rdp-outline);\n outline-offset: 2px;\n z-index: 1;\n}\n\n.rdp:not([dir='rtl']) .rdp-day_range_start:not(.rdp-day_range_end) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.rdp:not([dir='rtl']) .rdp-day_range_end:not(.rdp-day_range_start) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.rdp[dir='rtl'] .rdp-day_range_start:not(.rdp-day_range_end) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.rdp[dir='rtl'] .rdp-day_range_end:not(.rdp-day_range_start) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.rdp-day_range_end.rdp-day_range_start {\n border-radius: 100%;\n}\n\n.rdp-day_range_middle {\n border-radius: 0;\n}";
10791
10807
  styleInject(css_248z$9);
10792
10808
 
10793
- var css_248z$8 = ".will-calendar-filter-container {\n display: flex;\n justify-content: center;\n user-select: none;\n}\n\n/* Calendar overrides */\n\n\n.will-calendar-filter-container .DayPicker {\n font-size: 25px; /* Adjust this value to make the DayPicker bigger */\n}\n\n.will-calendar-filter-container .rdp-month {\n position: relative;\n}\n\n.will-calendar-filter-container .rdp-month.rdp-caption_start {\n padding-left: 70px;\n}\n\n.will-calendar-filter-container .rdp-month.rdp-caption_end {\n padding-right: 70px;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-nav {\n border: 1px solid var(--will-primary);\n border-radius: 50%;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-nav svg {\n color: var(--will-primary);\n}\n\n\n.will-calendar-filter-container .rdp-month .rdp-caption {\n position: initial;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-caption > .rdp-caption_label,\n.will-calendar-filter-container .rdp-table .rdp-head {\n opacity: .6;\n}\n\n\n\n.will-calendar-filter-container .rdp-button_reset.rdp-button.rdp-day.rdp-day_selected {\n background-color: var(--will-primary);\n opacity: 1;\n}\n\n.my-today:not(.rdp-day_selected) { \n font-weight: 700;\n opacity: 1;\n color: var(--will-primary);\n}\n\n@media (max-width: 960px) {\n .will-calendar-filter-container .rdp-month .rdp-nav {\n border: none;\n border-radius: initial;\n }\n\n .will-calendar-filter-container .rdp-month.rdp-caption_start {\n padding-left: 10px;\n }\n \n .will-calendar-filter-container .rdp-month.rdp-caption_end {\n padding-right: 10px;\n }\n}\n\n/* Tooltip */\n\n.will-root .will-calendar-filter-container .will-calendar-tooltip {\n position: absolute;\n top: -42px;\n display: none;\n white-space: nowrap;\n z-index: 2;\n}\n\n.will-root .will-calendar-filter-container .will-calendar-tooltip > div {\n background-color: white;\n position: relative;\n padding: 5px 10px;\n border: 1px solid var(--will-primary);\n border-radius: 5px;\n}\n\n.will-root .will-calendar-filter-container .will-calendar-tooltip::before {\n content: \"\";\n width: 10px;\n height: 10px;\n border: 1px solid var(--will-primary);\n position: absolute;\n bottom: -4px;\n left:calc(50% - 5.555px);\n rotate: 45deg;\n z-index: 0;\n background-color: var(--will-white);\n}\n\n\n";
10809
+ var css_248z$8 = ".will-calendar-filter-container {\n display: flex;\n justify-content: center;\n user-select: none;\n}\n\n/* Calendar overrides */\n\n\n.will-calendar-filter-container .DayPicker {\n font-size: 25px; /* Adjust this value to make the DayPicker bigger */\n}\n\n.will-calendar-filter-container .rdp-month {\n position: relative;\n}\n\n.will-calendar-filter-container .rdp-month.rdp-caption_start {\n padding-left: 70px;\n}\n\n.will-calendar-filter-container .rdp-month.rdp-caption_end {\n padding-right: 70px;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-nav {\n border: 1px solid var(--will-primary);\n border-radius: 50%;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-nav svg {\n color: var(--will-primary);\n}\n\n\n.will-calendar-filter-container .rdp-month .rdp-caption {\n position: initial;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-caption > .rdp-caption_label,\n.will-calendar-filter-container .rdp-table .rdp-head {\n opacity: .6;\n}\n\n.will-calendar-filter-container .rdp-button_reset.rdp-button.rdp-day.rdp-day_selected {\n background-color: var(--will-primary);\n opacity: 1;\n}\n\n.will-calendar-filter-container .my-today:not(.rdp-day_selected) { \n font-weight: 700;\n opacity: 1;\n color: var(--will-primary);\n}\n\n.will-calendar-filter-container .rdp-cell {\n position: relative;\n}\n\n.will-calendar-filter-container .rdp-cell button {\n font-weight: 500;\n}\n\n.will-calendar-filter-container .rdp-cell button.booked {\n font-weight: 400;\n cursor: not-allowed;\n}\n\n.will-calendar-filter-container .rdp-cell .rdp-button[disabled] {\n opacity: 0.5;\n}\n\n@media (max-width: 960px) {\n .will-calendar-filter-container .rdp-month .rdp-nav {\n border: none;\n border-radius: initial;\n }\n\n .will-calendar-filter-container .rdp-month.rdp-caption_start {\n padding-left: 10px;\n }\n \n .will-calendar-filter-container .rdp-month.rdp-caption_end {\n padding-right: 10px;\n }\n}\n\n/* Tooltip */\n.will-root .will-calendar-filter-container .will-calendar-tooltip,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out {\n position: absolute;\n top: -42px;\n transform: translateX(calc(-50% + 20px));\n display: none;\n white-space: nowrap;\n z-index: 2;\n}\n.will-root .will-calendar-filter-container .will-calendar-tooltip > div,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out> div {\n background-color: white;\n position: relative;\n padding: 5px 10px;\n border: 1px solid var(--will-primary);\n border-radius: 5px;\n}\n\n.will-root .will-calendar-filter-container .will-calendar-tooltip::before,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out::before {\n content: \"\";\n width: 10px;\n height: 10px;\n border: 1px solid var(--will-primary);\n position: absolute;\n bottom: -4px;\n left:calc(50% - 5.555px);\n rotate: 45deg;\n z-index: 0;\n background-color: var(--will-white);\n}\n\n.will-root .will-calendar-filter-container .rdp-cell:hover .will-calendar-tooltip,\n.will-root .will-calendar-filter-container .rdp-cell:hover .will-calendar-tooltip-check-out {\n display: block;\n}\n\n/* Loading spinner */\n\n.will-root .will-calendar-filter-container .rdp-months {\n position: relative;\n}\n\n.will-root .will-calendar-filter-container .will-calendar-spinner {\n position: absolute;\n top:0;\n bottom:0;\n left: 0;\n right: 0;\n background-color: var(--will-white-transparent);\n z-index: 3;\n display: none;\n justify-content: center;\n align-items: center;\n font-weight: 600;\n}\n\n\n";
10794
10810
  styleInject(css_248z$8);
10795
10811
 
10796
10812
  var Calendar = React__default.forwardRef(function (_a, ref) {
10797
10813
  var _b;
10798
- var calendarRange = _a.calendarRange, setCalendarRange = _a.setCalendarRange, calendarOffset = _a.calendarOffset, selectedPath = _a.selectedPath, language = _a.language, calendarOffsetGroup = _a.calendarOffsetGroup, requestDates = _a.requestDates;
10814
+ var selectedPath = _a.selectedPath, calendarRange = _a.calendarRange, setCalendarRange = _a.setCalendarRange, language = _a.language, disableCalendarDates = _a.disableCalendarDates, requestDates = _a.requestDates, disabledDates = _a.disabledDates, setDisabledDates = _a.setDisabledDates, updateCalendar = _a.updateCalendar, setUpdateCalendar = _a.setUpdateCalendar, loadingData = _a.loadingData;
10799
10815
  // Translations
10800
- var t = useTranslation('filterBar').t;
10816
+ var t = useTranslation('common').t;
10801
10817
  var isTablet = reactResponsiveExports.useMediaQuery({ maxWidth: 960 });
10818
+ var today = startOfDay(new Date());
10819
+ var selectedStartDate = calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from;
10802
10820
  React__default.useEffect(function () {
10803
10821
  if (!calendarRange)
10804
10822
  setCalendarRange(undefined);
10805
10823
  }, []);
10806
- var today = startOfDay(new Date());
10807
- var daysToOffsetCalendar = calendarOffset && selectedPath
10808
- ? (_b = Object.entries(calendarOffset)) === null || _b === void 0 ? void 0 : _b.find(function (page) { return (selectedPath === null || selectedPath === void 0 ? void 0 : selectedPath.substring(1)) === page[0]; })
10809
- : null;
10810
- var disabledDays = [
10811
- {
10812
- from: addDays(today, !!(daysToOffsetCalendar === null || daysToOffsetCalendar === void 0 ? void 0 : daysToOffsetCalendar.length) ? daysToOffsetCalendar[1] : -2),
10813
- to: addDays(today, -100),
10814
- },
10815
- ];
10816
- var selectedStartDate = calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from;
10817
- // Handle selected dates with disable dates and tooltip feedback
10818
- var _c = __read(React__default.useState(''), 2), openTooltip = _c[0], setOpenTooltip = _c[1];
10819
- var handleSelectedDates = function (range, e) {
10820
- var isNextDayDisabled = calendarOffsetGroup === null || calendarOffsetGroup === void 0 ? void 0 : calendarOffsetGroup.find(function (item) {
10821
- return isSameDay(item.from, addDays((range === null || range === void 0 ? void 0 : range.from) || 1, 1));
10822
- });
10823
- var rangeHasDisabledDay = calendarOffsetGroup === null || calendarOffsetGroup === void 0 ? void 0 : calendarOffsetGroup.find(function (date) {
10824
- return isAfter(date.from, (range === null || range === void 0 ? void 0 : range.from) || 1) &&
10825
- isBefore(date.from, (range === null || range === void 0 ? void 0 : range.to) || 1);
10826
- });
10827
- var handleTooltip = function (type) {
10828
- var calendarButton = e.currentTarget;
10829
- var calendarTooltip = document.querySelector('.will-calendar-tooltip');
10830
- if (calendarButton && calendarTooltip) {
10831
- if (type) {
10832
- calendarButton.appendChild(calendarTooltip);
10833
- calendarTooltip.style.display = 'block';
10834
- calendarButton.style.overflow = 'visible';
10835
- calendarButton.style.position = 'relative';
10836
- }
10837
- else {
10838
- calendarTooltip.style.display = 'none';
10839
- }
10840
- }
10841
- };
10842
- if (isNextDayDisabled) {
10843
- setOpenTooltip('next');
10844
- handleTooltip('next');
10845
- setCalendarRange(undefined);
10824
+ // Handle tooltip
10825
+ React__default.useEffect(function () {
10826
+ if (typeof document === 'undefined')
10827
+ return;
10828
+ var calendarTooltip = document.querySelector('.will-calendar-tooltip');
10829
+ var calendarTooltipCheckOut = document.querySelector('.will-calendar-tooltip-check-out');
10830
+ var loadingSpinner = document.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
10831
+ var calendarButtons = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked):not(:has(.disabled-after-check-in))');
10832
+ var calendarButtonsCheckOut = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked.disabled-after-check-in)');
10833
+ var calendarMonthContainer = document.querySelector('.will-filter-bar-calendar .rdp-months');
10834
+ var tooltipClones = [];
10835
+ var tooltipClonesCheckOut = [];
10836
+ if (calendarTooltip && calendarButtons.length > 0) {
10837
+ calendarButtons.forEach(function (element) {
10838
+ var tooltipClone = calendarTooltip.cloneNode(true);
10839
+ element.appendChild(tooltipClone);
10840
+ tooltipClones.push(tooltipClone);
10841
+ });
10846
10842
  }
10847
- else if (rangeHasDisabledDay) {
10848
- setOpenTooltip('between');
10849
- handleTooltip('range');
10850
- setCalendarRange(undefined);
10843
+ if (calendarTooltipCheckOut && calendarButtonsCheckOut.length > 0) {
10844
+ calendarButtonsCheckOut.forEach(function (element) {
10845
+ var tooltipClone = calendarTooltipCheckOut.cloneNode(true);
10846
+ element.appendChild(tooltipClone);
10847
+ tooltipClonesCheckOut.push(tooltipClone);
10848
+ });
10849
+ }
10850
+ if (loadingSpinner && calendarMonthContainer) {
10851
+ calendarMonthContainer.appendChild(loadingSpinner);
10852
+ }
10853
+ return function () {
10854
+ tooltipClones.forEach(function (clone) { return clone.remove(); });
10855
+ tooltipClonesCheckOut.forEach(function (clone) { return clone.remove(); });
10856
+ };
10857
+ }, [calendarRange, updateCalendar]);
10858
+ // Handle loading spinner
10859
+ React__default.useEffect(function () {
10860
+ if (typeof document === 'undefined')
10861
+ return;
10862
+ var loadingSpinner = document.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
10863
+ if (loadingData) {
10864
+ if (loadingSpinner)
10865
+ loadingSpinner.style.display = 'flex';
10851
10866
  }
10852
10867
  else {
10853
- setCalendarRange(range);
10854
- setOpenTooltip('');
10855
- handleTooltip('');
10868
+ if (loadingSpinner)
10869
+ loadingSpinner.style.display = 'none';
10856
10870
  }
10857
- };
10871
+ }, [loadingData]);
10872
+ // Handle disable dates by page
10873
+ var disabledDatesByPage = handleDisabledDatesByPage({
10874
+ today: today,
10875
+ selectedPath: selectedPath,
10876
+ disableCalendarDates: disableCalendarDates,
10877
+ });
10858
10878
  return (React__default.createElement("div", { className: "will-filter-bar-calendar", ref: ref },
10859
10879
  React__default.createElement("div", { className: "will-calendar-filter-container" },
10860
10880
  React__default.createElement(DayPicker, { id: "will-calendar", mode: "range", locale: language === 'en' ? enUS : fi, numberOfMonths: !isTablet ? 2 : 1, weekStartsOn: 1, selected: calendarRange, onSelect: function (range, days, activeModifiers, e) {
10861
- return handleSelectedDates(range, e);
10881
+ return handleSelectedCheckIn({
10882
+ range: range,
10883
+ e: e,
10884
+ disableCalendarDates: disableCalendarDates,
10885
+ setCalendarRange: setCalendarRange,
10886
+ setDisabledDates: setDisabledDates,
10887
+ calendarRange: calendarRange,
10888
+ });
10862
10889
  }, modifiersClassNames: {
10863
10890
  today: 'my-today',
10864
- }, modifiersStyles: {
10865
- disabled: { opacity: '0.2' },
10866
- }, captionLayout: "dropdown-buttons", defaultMonth: selectedStartDate || disabledDays[0].from, disabled: calendarOffsetGroup || disabledDays, fromMonth: today, onMonthChange: function (val) { return (requestDates ? requestDates(val) : null); } }),
10891
+ booked: 'booked',
10892
+ disabledAfterCheckIn: 'disabled-after-check-in',
10893
+ }, captionLayout: "dropdown-buttons", defaultMonth: selectedStartDate ||
10894
+ (((_b = disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.length)
10895
+ ? disableCalendarDates.disabledDates[0].from
10896
+ : today), disabled: disabledDatesByPage.length
10897
+ ? disabledDatesByPage
10898
+ : (disabledDates === null || disabledDates === void 0 ? void 0 : disabledDates.length)
10899
+ ? disabledDates
10900
+ : (disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) || [], fromMonth: today, onMonthChange: function (val) {
10901
+ requestDates && setUpdateCalendar
10902
+ ? (requestDates(val), setUpdateCalendar(function (prev) { return !prev; }))
10903
+ : null;
10904
+ }, modifiers: {
10905
+ booked: disabledDatesByPage.length
10906
+ ? disabledDatesByPage
10907
+ : (disabledDates === null || disabledDates === void 0 ? void 0 : disabledDates.length)
10908
+ ? disabledDates
10909
+ : (disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) || [],
10910
+ disabledAfterCheckIn: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from)
10911
+ ? [{ after: calendarRange.from }]
10912
+ : [],
10913
+ } }),
10867
10914
  React__default.createElement("div", { className: 'will-calendar-tooltip' },
10868
- React__default.createElement("div", null, openTooltip === 'next'
10869
- ? t('calendar.checkoutOnly')
10870
- : t('calendar.hasDisableDates'))))));
10915
+ React__default.createElement("div", null, t('noCheckIn'))),
10916
+ React__default.createElement("div", { className: 'will-calendar-tooltip-check-out' },
10917
+ React__default.createElement("div", null, t('noCheckOut'))),
10918
+ React__default.createElement("div", { className: 'will-calendar-spinner' }, "Loading..."))));
10871
10919
  });
10920
+ /////////
10921
+ var handleSelectedCheckIn = function (_a) {
10922
+ var _b;
10923
+ var range = _a.range; _a.e; var disableCalendarDates = _a.disableCalendarDates, setCalendarRange = _a.setCalendarRange, setDisabledDates = _a.setDisabledDates, calendarRange = _a.calendarRange;
10924
+ // Calendar dates select logic
10925
+ var dateFormat = 'dd-MM-yyyy';
10926
+ var rangeFrom = (range === null || range === void 0 ? void 0 : range.from) ? format(range.from, dateFormat) : null;
10927
+ var rangeTo = (range === null || range === void 0 ? void 0 : range.to) ? format(range.to, dateFormat) : null;
10928
+ var calendarFrom = (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from)
10929
+ ? format(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from, dateFormat)
10930
+ : null;
10931
+ var calendarTo = (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to)
10932
+ ? format(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to, dateFormat)
10933
+ : null;
10934
+ var checkOutRange = ((_b = disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.availableDates) === null || _b === void 0 ? void 0 : _b.length)
10935
+ ? disableCalendarDates.availableDates.find(function (checkInDate) {
10936
+ return format(checkInDate.checkIn || 1, dateFormat) ===
10937
+ format((range === null || range === void 0 ? void 0 : range.from) || 1, dateFormat);
10938
+ })
10939
+ : null;
10940
+ if (rangeFrom &&
10941
+ rangeFrom !== calendarTo &&
10942
+ checkOutRange &&
10943
+ setDisabledDates) {
10944
+ var checkIn = addDays(checkOutRange.checkIn, 1);
10945
+ var firstCheckOut = addDays(checkOutRange.firstCheckOut, -1);
10946
+ var noDatesRange = format(checkIn, dateFormat) ===
10947
+ format(checkOutRange.firstCheckOut, dateFormat);
10948
+ setDisabledDates(__spreadArray$1(__spreadArray$1([], __read(((disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) || [])), false), [
10949
+ {
10950
+ from: noDatesRange ? undefined : checkIn,
10951
+ to: noDatesRange ? undefined : firstCheckOut,
10952
+ },
10953
+ { after: checkOutRange === null || checkOutRange === void 0 ? void 0 : checkOutRange.lastCheckOut },
10954
+ ], false));
10955
+ }
10956
+ if (rangeFrom && rangeFrom === calendarTo) {
10957
+ return;
10958
+ }
10959
+ else if ((rangeTo && rangeFrom && rangeFrom === rangeTo) ||
10960
+ (!rangeTo && !rangeFrom)) {
10961
+ setCalendarRange(undefined);
10962
+ setDisabledDates && setDisabledDates([]);
10963
+ }
10964
+ else if (calendarFrom && rangeFrom && rangeFrom !== calendarFrom) {
10965
+ setCalendarRange({
10966
+ from: range === null || range === void 0 ? void 0 : range.from,
10967
+ to: undefined,
10968
+ });
10969
+ }
10970
+ else {
10971
+ setCalendarRange(range);
10972
+ }
10973
+ };
10974
+ var handleDisabledDatesByPage = function (_a) {
10975
+ var _b, _c, _d;
10976
+ var disableCalendarDates = _a.disableCalendarDates, selectedPath = _a.selectedPath, today = _a.today;
10977
+ var daysToOffsetCalendar = (disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDatesByPage) && selectedPath
10978
+ ? [
10979
+ (_b = disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDatesByPage) === null || _b === void 0 ? void 0 : _b.find(function (item) { return selectedPath === item.page; }),
10980
+ ]
10981
+ : [];
10982
+ return daysToOffsetCalendar.length
10983
+ ? [
10984
+ {
10985
+ from: addDays(today, daysToOffsetCalendar.length && ((_c = daysToOffsetCalendar[0]) === null || _c === void 0 ? void 0 : _c.offset)
10986
+ ? (_d = daysToOffsetCalendar[0]) === null || _d === void 0 ? void 0 : _d.offset
10987
+ : -2),
10988
+ to: addDays(today, -100),
10989
+ },
10990
+ ]
10991
+ : [];
10992
+ };
10872
10993
 
10873
10994
  var parseDates = function (_a) {
10874
10995
  var calendarRange = _a.calendarRange;
@@ -11185,7 +11306,7 @@ var css_248z$1 = ".will-root {\n z-index: 999;\n width: fit-content;\n min-wi
11185
11306
  styleInject(css_248z$1);
11186
11307
 
11187
11308
  function FilterBar(_a) {
11188
- var language = _a.language, _b = _a.ageCategories, ageCategories = _b === void 0 ? AGE_CATEGORIES_FALLBACK : _b, _c = _a.redirectUrl, redirectUrl = _c === void 0 ? REDIRECT_URL_FALLBACK : _c, palette = _a.palette, onSubmit = _a.onSubmit, fullWidth = _a.fullWidth, calendarOffset = _a.calendarOffset, mode = _a.mode, tabs = _a.tabs;
11309
+ var language = _a.language, _b = _a.ageCategories, ageCategories = _b === void 0 ? AGE_CATEGORIES_FALLBACK : _b, _c = _a.redirectUrl, redirectUrl = _c === void 0 ? REDIRECT_URL_FALLBACK : _c, palette = _a.palette, onSubmit = _a.onSubmit, fullWidth = _a.fullWidth, disableCalendarDates = _a.disableCalendarDates, mode = _a.mode, tabs = _a.tabs;
11189
11310
  var themePalette = useTheme({ palette: palette });
11190
11311
  // Translations
11191
11312
  useUpdateTranslations({ language: language });
@@ -11232,7 +11353,7 @@ function FilterBar(_a) {
11232
11353
  React__default.createElement(SubmitButton, { onClick: handleSubmit, startIcon: React__default.createElement(FaSearch, null), label: t('common:search') })),
11233
11354
  selectedFilter && (React__default.createElement("div", { className: "will-filter-bar-container ".concat(mode || 'light'), style: (!tabs || tabs.length < 2) && !isMobile ? { top: 66 } : {} },
11234
11355
  React__default.createElement(CloseButton, { handleClose: function () { return handleSelectedFilter(false); } }),
11235
- selectedFilter === FilterSections.CALENDAR && (React__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, ref: filtersRef, calendarOffset: calendarOffset, selectedPath: selectedPath, language: language })),
11356
+ selectedFilter === FilterSections.CALENDAR && (React__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, ref: filtersRef, disableCalendarDates: disableCalendarDates, selectedPath: selectedPath, language: language })),
11236
11357
  selectedFilter === FilterSections.GUESTS && (React__default.createElement(Guests, { updateGuestsCount: updateGuestsCount, ageCategories: ageCategories, ageCategoryCounts: ageCategoryCounts, ref: filtersRef })),
11237
11358
  selectedFilter === FilterSections.CATEGORIES && (React__default.createElement(Categories, { categories: categories, setCategories: setCategories }))))));
11238
11359
  }
@@ -11256,18 +11377,41 @@ var REDIRECT_URL_FALLBACK = 'http://localhost:3000/';
11256
11377
  var useFilterCalendar = function (_a) {
11257
11378
  var onSubmit = _a.onSubmit, setToggleCalendar = _a.setToggleCalendar;
11258
11379
  var _b = __read(React__default.useState(), 2), calendarRange = _b[0], setCalendarRange = _b[1];
11380
+ var _c = __read(React__default.useState([]), 2), disabledDates = _c[0], setDisabledDates = _c[1];
11381
+ var _d = __read(React__default.useState(false), 2), updateCalendar = _d[0], setUpdateCalendar = _d[1];
11382
+ React__default.useEffect(function () {
11383
+ if (typeof window === 'undefined')
11384
+ return;
11385
+ var urlSearchParams = new URLSearchParams(window.location.search);
11386
+ var startDateParam = urlSearchParams.get('startDate');
11387
+ var endDateParam = urlSearchParams.get('endDate');
11388
+ if (startDateParam && endDateParam) {
11389
+ setCalendarRange({
11390
+ from: new Date(startDateParam),
11391
+ to: new Date(endDateParam),
11392
+ });
11393
+ }
11394
+ }, []);
11395
+ React__default.useEffect(function () {
11396
+ onSubmit(calendarRange);
11397
+ }, []);
11259
11398
  var handleSubmit = function () {
11260
11399
  setToggleCalendar(false);
11261
11400
  return onSubmit(calendarRange);
11262
11401
  };
11263
11402
  var handleClearDates = function () {
11403
+ setDisabledDates([]);
11264
11404
  setCalendarRange(undefined);
11265
11405
  };
11266
11406
  return {
11267
11407
  handleSubmit: handleSubmit,
11268
11408
  handleClearDates: handleClearDates,
11269
11409
  setCalendarRange: setCalendarRange,
11410
+ setDisabledDates: setDisabledDates,
11411
+ setUpdateCalendar: setUpdateCalendar,
11270
11412
  calendarRange: calendarRange,
11413
+ disabledDates: disabledDates,
11414
+ updateCalendar: updateCalendar,
11271
11415
  };
11272
11416
  };
11273
11417
 
@@ -11275,12 +11419,12 @@ var css_248z = ".will-root .will-calendar-wrapper {\n box-shadow: var(--will-
11275
11419
  styleInject(css_248z);
11276
11420
 
11277
11421
  function FilterCalendar(_a) {
11278
- var calendarOffset = _a.calendarOffset, language = _a.language, palette = _a.palette, onSubmit = _a.onSubmit, calendarOffsetGroup = _a.calendarOffsetGroup, toggleCalendar = _a.toggleCalendar, setToggleCalendar = _a.setToggleCalendar, requestDates = _a.requestDates;
11422
+ var calendarOffset = _a.calendarOffset, language = _a.language, palette = _a.palette, onSubmit = _a.onSubmit, disableCalendarDates = _a.disableCalendarDates, toggleCalendar = _a.toggleCalendar, loadingData = _a.loadingData, setToggleCalendar = _a.setToggleCalendar, requestDates = _a.requestDates;
11279
11423
  var themePalette = useTheme({ palette: palette });
11280
11424
  // Translations
11281
11425
  useUpdateTranslations({ language: language });
11282
11426
  var t = useTranslation().t;
11283
- var _b = useFilterCalendar({ onSubmit: onSubmit, setToggleCalendar: setToggleCalendar }), handleSubmit = _b.handleSubmit, setCalendarRange = _b.setCalendarRange, handleClearDates = _b.handleClearDates, calendarRange = _b.calendarRange;
11427
+ var _b = useFilterCalendar({ onSubmit: onSubmit, setToggleCalendar: setToggleCalendar }), handleSubmit = _b.handleSubmit, setCalendarRange = _b.setCalendarRange, handleClearDates = _b.handleClearDates, calendarRange = _b.calendarRange, disabledDates = _b.disabledDates, setDisabledDates = _b.setDisabledDates, updateCalendar = _b.updateCalendar, setUpdateCalendar = _b.setUpdateCalendar;
11284
11428
  // Display component after fully loaded
11285
11429
  useAwaitRender();
11286
11430
  // Handle close filter section
@@ -11293,7 +11437,7 @@ function FilterCalendar(_a) {
11293
11437
  React__default.createElement("h2", null, t('filterBar:calendar.title')),
11294
11438
  React__default.createElement(CloseButton, { handleClose: function () { return setToggleCalendar(false); } })),
11295
11439
  React__default.createElement("div", { className: "will-calendar-main" },
11296
- React__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, calendarOffset: calendarOffset, selectedPath: '/rooms', language: language, calendarOffsetGroup: calendarOffsetGroup, requestDates: requestDates })),
11440
+ React__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, calendarOffset: calendarOffset, selectedPath: '/rooms', language: language, disableCalendarDates: disableCalendarDates, requestDates: requestDates, disabledDates: disabledDates, setDisabledDates: setDisabledDates, updateCalendar: updateCalendar, setUpdateCalendar: setUpdateCalendar, loadingData: loadingData })),
11297
11441
  React__default.createElement("div", { className: "will-calendar-footer" },
11298
11442
  React__default.createElement("div", { className: "will-calendar-footer-dates" },
11299
11443
  React__default.createElement("div", null,
@@ -11308,8 +11452,8 @@ function FilterCalendar(_a) {
11308
11452
  }) || t('common:checkOut'))),
11309
11453
  !!nights && (React__default.createElement("span", null, "".concat(nights, " ").concat(t("common:".concat(nights > 1 ? 'nights' : 'night')))))),
11310
11454
  React__default.createElement("div", { className: "will-calendar-footer-actions" },
11311
- React__default.createElement(SubmitButton, { onClick: handleClearDates, disabled: !(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from), label: 'Clear dates' }),
11312
- React__default.createElement(SubmitButton, { onClick: handleSubmit, label: t("common:search") })))))));
11455
+ React__default.createElement(SubmitButton, { onClick: handleClearDates, disabled: !(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from), label: t("common:clearDates") }),
11456
+ React__default.createElement(SubmitButton, { onClick: handleSubmit, label: t("common:apply"), disabled: !(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) || !(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) })))))));
11313
11457
  }
11314
11458
 
11315
11459
  exports.Button = Button$1;