willba-component-library 0.2.28 → 0.2.30

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.
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export declare const SpinnerSVG: ({ fill, size, }: {
3
+ fill?: string | undefined;
4
+ size?: number | undefined;
5
+ }) => React.JSX.Element;
@@ -1,4 +1,5 @@
1
1
  import { DateRange, Matcher } from 'react-day-picker';
2
+ import { Palette } from 'src/themes/useTheme';
2
3
  export type CalendarOffset = {
3
4
  [key: string]: number;
4
5
  };
@@ -33,4 +34,5 @@ export type CalendarTypes = {
33
34
  initialCalendarRange?: DateRange | undefined;
34
35
  showFeedback?: boolean;
35
36
  noActiveSelection?: boolean;
37
+ palette?: Palette;
36
38
  };
package/lib/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { DateRange, Matcher } from 'react-day-picker';
3
+ import { Palette as Palette$1 } from 'src/themes/useTheme';
3
4
 
4
5
  interface ButtonProps {
5
6
  /**
@@ -62,6 +63,7 @@ type CalendarTypes = {
62
63
  initialCalendarRange?: DateRange | undefined;
63
64
  showFeedback?: boolean;
64
65
  noActiveSelection?: boolean;
66
+ palette?: Palette$1;
65
67
  };
66
68
 
67
69
  type Palette = {
package/lib/index.esm.js CHANGED
@@ -10787,6 +10787,14 @@ var reactResponsive = {exports: {}};
10787
10787
 
10788
10788
  var reactResponsiveExports = reactResponsive.exports;
10789
10789
 
10790
+ var SpinnerSVG = function (_a) {
10791
+ var fill = _a.fill, size = _a.size;
10792
+ return (React__default__default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "".concat(size || 25), height: "".concat(size || 25), viewBox: "0 0 24 24" },
10793
+ React__default__default.createElement("style", null, "\n .spinner_z9k8 {\n transform-origin: center;\n animation: spinner_StKS .75s infinite linear;\n }\n @keyframes spinner_StKS {\n 100% {\n transform: rotate(360deg);\n }\n }\n "),
10794
+ React__default__default.createElement("path", { d: "M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z", opacity: ".25", fill: fill }),
10795
+ React__default__default.createElement("path", { d: "M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z", className: "spinner_z9k8", fill: fill })));
10796
+ };
10797
+
10790
10798
  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
10799
  styleInject(css_248z$9);
10792
10800
 
@@ -10795,7 +10803,7 @@ styleInject(css_248z$8);
10795
10803
 
10796
10804
  var Calendar = forwardRef(function (_a, ref) {
10797
10805
  var _b;
10798
- 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; _a.updateCalendar; var setUpdateCalendar = _a.setUpdateCalendar, loadingData = _a.loadingData, initialCalendarRange = _a.initialCalendarRange, showFeedback = _a.showFeedback;
10806
+ 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, initialCalendarRange = _a.initialCalendarRange, showFeedback = _a.showFeedback, palette = _a.palette;
10799
10807
  // Translations
10800
10808
  var t = useTranslation('common').t;
10801
10809
  var isTablet = reactResponsiveExports.useMediaQuery({ maxWidth: 960 });
@@ -10846,17 +10854,19 @@ var Calendar = forwardRef(function (_a, ref) {
10846
10854
  useEffect(function () {
10847
10855
  if (typeof document === 'undefined' || !showFeedback)
10848
10856
  return;
10857
+ // Children
10849
10858
  var calendarTooltip = document.querySelector('.will-calendar-tooltip');
10850
10859
  var calendarTooltipCheckOut = document.querySelector('.will-calendar-tooltip-check-out');
10851
10860
  var calendarTooltipOverlappingDate = document.querySelector('.will-calendar-tooltip-overlapping-date');
10852
10861
  var loadingSpinner = document.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
10862
+ // Parents
10853
10863
  var calendarButtons = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked):not(:has(.disabled-after-check-in))');
10854
10864
  var calendarButtonsCheckOut = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked.disabled-after-check-in)');
10855
10865
  var calendarMonthContainer = document.querySelector('.will-filter-bar-calendar .rdp-months');
10856
- var calendarOverlappingDate = document.querySelector('.will-filter-bar-calendar .rdp-cell:has(.overlapping-date)');
10857
- var appendedOverlappingDateTooltip = document.querySelector('.will-filter-bar-calendar .rdp-cell .will-calendar-tooltip-overlapping-date');
10866
+ var calendarOverlappingDate = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.overlapping-date)');
10858
10867
  var tooltipClones = [];
10859
10868
  var tooltipClonesCheckOut = [];
10869
+ var tooltipClonesOverlappingDates = [];
10860
10870
  if (calendarTooltip && calendarButtons.length > 0) {
10861
10871
  calendarButtons.forEach(function (element) {
10862
10872
  var tooltipClone = calendarTooltip.cloneNode(true);
@@ -10874,23 +10884,20 @@ var Calendar = forwardRef(function (_a, ref) {
10874
10884
  if (loadingSpinner && calendarMonthContainer) {
10875
10885
  calendarMonthContainer.appendChild(loadingSpinner);
10876
10886
  }
10877
- if (calendarOverlappingDate &&
10878
- calendarTooltipOverlappingDate &&
10879
- !appendedOverlappingDateTooltip &&
10880
- !calendarRange) {
10881
- calendarOverlappingDate.appendChild(calendarTooltipOverlappingDate);
10882
- }
10883
- else if (calendarRange && appendedOverlappingDateTooltip) {
10884
- appendedOverlappingDateTooltip.style.display = 'none';
10885
- }
10886
- else if (!calendarRange && appendedOverlappingDateTooltip) {
10887
- appendedOverlappingDateTooltip.style.display = 'block';
10887
+ if (calendarTooltipOverlappingDate &&
10888
+ calendarOverlappingDate.length > 0) {
10889
+ calendarOverlappingDate.forEach(function (element) {
10890
+ var tooltipClone = calendarTooltipOverlappingDate.cloneNode(true);
10891
+ element.appendChild(tooltipClone);
10892
+ tooltipClonesOverlappingDates.push(tooltipClone);
10893
+ });
10888
10894
  }
10889
10895
  return function () {
10890
10896
  tooltipClones.forEach(function (clone) { return clone.remove(); });
10891
10897
  tooltipClonesCheckOut.forEach(function (clone) { return clone.remove(); });
10898
+ tooltipClonesOverlappingDates.forEach(function (clone) { return clone.remove(); });
10892
10899
  };
10893
- }, [calendarRange, overlappingDate]);
10900
+ }, [calendarRange, updateCalendar, overlappingDate]);
10894
10901
  return (React__default__default.createElement("div", { className: "will-filter-bar-calendar", ref: ref },
10895
10902
  React__default__default.createElement("div", { className: "will-calendar-filter-container" },
10896
10903
  React__default__default.createElement(DayPicker, { id: "will-calendar", mode: "range", locale: language === 'en' ? enUS : fi, numberOfMonths: !isTablet ? 2 : 1, weekStartsOn: 1, selected: calendarRange, onSelect: function (range) {
@@ -10902,7 +10909,8 @@ var Calendar = forwardRef(function (_a, ref) {
10902
10909
  calendarRange: calendarRange,
10903
10910
  overlappingDate: overlappingDate,
10904
10911
  });
10905
- }, captionLayout: "dropdown-buttons", defaultMonth: selectedStartDate ||
10912
+ }, captionLayout: "dropdown-buttons", defaultMonth: (initialCalendarRange === null || initialCalendarRange === void 0 ? void 0 : initialCalendarRange.from) ||
10913
+ selectedStartDate ||
10906
10914
  (((_b = disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.length)
10907
10915
  ? disableCalendarDates.disabledDates[0].from
10908
10916
  : today), disabled: disabledDatesByPage.length
@@ -10954,7 +10962,8 @@ var Calendar = forwardRef(function (_a, ref) {
10954
10962
  React__default__default.createElement("div", null, t('noCheckOut'))),
10955
10963
  React__default__default.createElement("div", { className: 'will-calendar-tooltip-overlapping-date' },
10956
10964
  React__default__default.createElement("div", null, t('checkOutOnly'))),
10957
- React__default__default.createElement("div", { className: 'will-calendar-spinner' }, "Loading..."))));
10965
+ React__default__default.createElement("div", { className: 'will-calendar-spinner' },
10966
+ React__default__default.createElement(SpinnerSVG, { fill: (palette === null || palette === void 0 ? void 0 : palette.primary) || 'inherit', size: 50 })))));
10958
10967
  });
10959
10968
  /////////
10960
10969
  var handleSelectedCheckIn = function (_a) {
@@ -11490,7 +11499,7 @@ function FilterCalendar(_a) {
11490
11499
  React__default__default.createElement("h2", null, t('filterBar:calendar.title')),
11491
11500
  React__default__default.createElement(CloseButton, { handleClose: function () { return setToggleCalendar(false); } })),
11492
11501
  React__default__default.createElement("div", { className: "will-calendar-main" },
11493
- React__default__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, initialCalendarRange: initialCalendarRange, showFeedback: showFeedback, noActiveSelection: noActiveSelection })),
11502
+ React__default__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, initialCalendarRange: initialCalendarRange, showFeedback: showFeedback, noActiveSelection: noActiveSelection, palette: palette })),
11494
11503
  React__default__default.createElement("div", { className: "will-calendar-footer" },
11495
11504
  React__default__default.createElement("div", { className: "will-calendar-footer-dates" },
11496
11505
  React__default__default.createElement("div", null,