willba-component-library 0.3.13 → 0.3.15

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.
Files changed (110) hide show
  1. package/README.md +12 -12
  2. package/lib/assets/IconsSvg.d.ts +2 -1
  3. package/lib/components/Button/Button.d.ts +2 -2
  4. package/lib/components/FilterBar/FilterBar.d.ts +3 -2
  5. package/lib/components/FilterBar/components/FilterControls/FilterControls.d.ts +3 -0
  6. package/lib/components/FilterBar/components/FilterPanels/Categories/Categories.d.ts +11 -0
  7. package/lib/components/FilterBar/components/FilterPanels/Dates/Dates.d.ts +16 -0
  8. package/lib/components/FilterBar/components/FilterPanels/FilterPanels.d.ts +3 -0
  9. package/lib/components/FilterBar/components/FilterPanels/Guests/GuestCount/GuestCount.d.ts +4 -0
  10. package/lib/components/FilterBar/components/FilterPanels/Guests/Guests.d.ts +12 -0
  11. package/lib/components/FilterBar/components/FilterPanels/Locations/Locations.d.ts +14 -0
  12. package/lib/components/FilterBar/components/FilterPanels/SectionHeader/SectionHeader.d.ts +8 -0
  13. package/lib/components/FilterBar/components/FilterTabs/FilterTabs.d.ts +3 -0
  14. package/lib/components/FilterBar/components/ImageCard/ImageCard.d.ts +11 -0
  15. package/lib/components/FilterBar/components/SelectButton/SelectButton.d.ts +13 -0
  16. package/lib/components/FilterBar/components/TabButton/TabButton.d.ts +10 -0
  17. package/lib/components/FilterBar/components/buttons/select-button/SelectButton.d.ts +2 -1
  18. package/lib/components/FilterBar/components/buttons/tab-button/TabButton.d.ts +2 -1
  19. package/lib/components/FilterBar/components/cards/image-card/ImageCard.d.ts +2 -1
  20. package/lib/components/FilterBar/components/categories/Categories.d.ts +2 -1
  21. package/lib/components/FilterBar/components/common/FilterSectionHeader.d.ts +2 -2
  22. package/lib/components/FilterBar/components/dates/Dates.d.ts +2 -2
  23. package/lib/components/FilterBar/components/divider/Divider.d.ts +2 -1
  24. package/lib/components/FilterBar/components/guests/Guests.d.ts +2 -1
  25. package/lib/components/FilterBar/components/index.d.ts +6 -5
  26. package/lib/components/FilterBar/components/locations/Locations.d.ts +2 -1
  27. package/lib/components/FilterBar/hooks/index.d.ts +4 -1
  28. package/lib/components/FilterBar/hooks/useFilterActions.d.ts +25 -0
  29. package/lib/components/FilterBar/hooks/useFilterState.d.ts +22 -0
  30. package/lib/components/FilterBar/hooks/useFilterUi.d.ts +7 -0
  31. package/lib/components/FilterBar/hooks/usePanelPosition.d.ts +12 -0
  32. package/lib/components/FilterBar/index.d.ts +1 -1
  33. package/lib/components/FilterBar/providers/FilterBarProvider.d.ts +31 -0
  34. package/lib/components/FilterBar/providers/index.d.ts +1 -0
  35. package/lib/components/FilterBar/utils/ageCategoriesRules.d.ts +7 -0
  36. package/lib/components/FilterBar/utils/index.d.ts +1 -1
  37. package/lib/components/FilterBar/utils/parseGuests.d.ts +5 -1
  38. package/lib/components/FilterCalendar/FilterCalendar.d.ts +3 -2
  39. package/lib/components/FilterCalendar/components/Footer.d.ts +2 -1
  40. package/lib/core/components/buttons/CloseButton/CloseButton.d.ts +7 -0
  41. package/lib/core/components/buttons/SubmitButton/SubmitButton.d.ts +14 -0
  42. package/lib/core/components/buttons/close-button/CloseButton.d.ts +2 -1
  43. package/lib/core/components/buttons/submit-button/SubmitButton.d.ts +2 -1
  44. package/lib/core/components/calendar/Calendar.d.ts +2 -1
  45. package/lib/core/components/index.d.ts +4 -2
  46. package/lib/index.d.ts +4 -5
  47. package/lib/index.esm.js +1593 -1480
  48. package/lib/index.esm.js.map +1 -1
  49. package/lib/index.js +2156 -2043
  50. package/lib/index.js.map +1 -1
  51. package/lib/index.umd.js +2159 -2045
  52. package/lib/index.umd.js.map +1 -1
  53. package/lib/themes/useTheme.d.ts +1 -1
  54. package/package.json +1 -1
  55. package/rollup.config.mjs +1 -1
  56. package/src/components/FilterBar/FilterBar.css +4 -70
  57. package/src/components/FilterBar/FilterBar.stories.tsx +1 -1
  58. package/src/components/FilterBar/FilterBar.tsx +28 -283
  59. package/src/components/FilterBar/components/FilterControls/FilterControls.css +18 -0
  60. package/src/components/FilterBar/components/FilterControls/FilterControls.tsx +135 -0
  61. package/src/components/FilterBar/components/{categories → FilterPanels/Categories}/Categories.css +1 -1
  62. package/src/components/FilterBar/components/{categories → FilterPanels/Categories}/Categories.tsx +3 -1
  63. package/src/components/FilterBar/components/{dates → FilterPanels/Dates}/Dates.tsx +11 -11
  64. package/src/components/FilterBar/components/FilterPanels/FilterPanels.css +24 -0
  65. package/src/components/FilterBar/components/FilterPanels/FilterPanels.tsx +115 -0
  66. package/src/components/FilterBar/components/{guests → FilterPanels/Guests}/GuestCount/GuestCount.tsx +1 -1
  67. package/src/components/FilterBar/components/{guests → FilterPanels/Guests}/Guests.css +5 -6
  68. package/src/components/FilterBar/components/{guests → FilterPanels/Guests}/Guests.tsx +7 -7
  69. package/src/components/FilterBar/components/{locations → FilterPanels/Locations}/Locations.css +1 -1
  70. package/src/components/FilterBar/components/{locations → FilterPanels/Locations}/Locations.tsx +7 -6
  71. package/src/components/FilterBar/components/{common/FilterSectionHeader.tsx → FilterPanels/SectionHeader/SectionHeader.tsx} +2 -2
  72. package/src/components/FilterBar/components/FilterTabs/FilterTabs.css +10 -0
  73. package/src/components/FilterBar/components/FilterTabs/FilterTabs.tsx +47 -0
  74. package/src/components/FilterBar/components/{buttons/select-button → SelectButton}/SelectButton.css +1 -0
  75. package/src/components/FilterBar/components/{buttons/select-button → SelectButton}/SelectButton.tsx +7 -6
  76. package/src/components/FilterBar/components/index.ts +6 -6
  77. package/src/components/FilterBar/hooks/index.ts +4 -1
  78. package/src/components/FilterBar/hooks/useFilterActions.tsx +126 -0
  79. package/src/components/FilterBar/hooks/useFilterState.tsx +86 -0
  80. package/src/components/FilterBar/hooks/useFilterUi.tsx +19 -0
  81. package/src/components/FilterBar/hooks/usePanelPosition.tsx +66 -0
  82. package/src/components/FilterBar/index.ts +1 -1
  83. package/src/components/FilterBar/providers/FilterBarProvider.tsx +169 -0
  84. package/src/components/FilterBar/providers/index.ts +1 -0
  85. package/src/components/FilterBar/utils/ageCategoriesRules.ts +27 -0
  86. package/src/components/FilterBar/utils/index.tsx +1 -1
  87. package/src/components/FilterBar/utils/parseGuests.tsx +20 -9
  88. package/src/components/FilterBar/utils/{parseLocations.tsx → parseLocations.ts} +3 -4
  89. package/src/components/FilterCalendar/FilterCalendar.tsx +2 -2
  90. package/src/core/components/index.ts +5 -2
  91. package/src/index.ts +1 -1
  92. package/src/themes/useTheme.tsx +1 -1
  93. package/src/components/FilterBar/components/buttons/index.ts +0 -5
  94. package/src/components/FilterBar/components/cards/index.ts +0 -1
  95. package/src/components/FilterBar/components/dates/index.ts +0 -1
  96. package/src/components/FilterBar/hooks/useFilterBar.tsx +0 -208
  97. package/src/components/FilterBar/utils/calculateDropdownPosition.tsx +0 -96
  98. /package/src/components/FilterBar/components/{divider → Divider}/Divider.css +0 -0
  99. /package/src/components/FilterBar/components/{divider → Divider}/Divider.tsx +0 -0
  100. /package/src/components/FilterBar/components/{dates → FilterPanels/Dates}/Dates.css +0 -0
  101. /package/src/components/FilterBar/components/{guests → FilterPanels/Guests}/GuestCount/GuestCount.css +0 -0
  102. /package/src/components/FilterBar/components/{common/FilterSectionHeader.css → FilterPanels/SectionHeader/SectionHeader.css} +0 -0
  103. /package/src/components/FilterBar/components/{cards/image-card → ImageCard}/ImageCard.css +0 -0
  104. /package/src/components/FilterBar/components/{cards/image-card → ImageCard}/ImageCard.tsx +0 -0
  105. /package/src/components/FilterBar/components/{buttons/tab-button → TabButton}/TabButton.css +0 -0
  106. /package/src/components/FilterBar/components/{buttons/tab-button → TabButton}/TabButton.tsx +0 -0
  107. /package/src/core/components/buttons/{close-button → CloseButton}/CloseButton.css +0 -0
  108. /package/src/core/components/buttons/{close-button → CloseButton}/CloseButton.tsx +0 -0
  109. /package/src/core/components/buttons/{submit-button → SubmitButton}/SubmitButton.css +0 -0
  110. /package/src/core/components/buttons/{submit-button → SubmitButton}/SubmitButton.tsx +0 -0
package/lib/index.esm.js CHANGED
@@ -1,6 +1,5 @@
1
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import * as React__default from 'react';
3
- import React__default__default, { useState, createContext, useContext, useRef, useEffect, forwardRef, useMemo } from 'react';
1
+ import * as React from 'react';
2
+ import React__default, { useState, useEffect, createContext, useContext, useRef, forwardRef, useMemo } from 'react';
4
3
 
5
4
  /******************************************************************************
6
5
  Copyright (c) Microsoft Corporation.
@@ -192,8 +191,8 @@ function styleInject(css, ref) {
192
191
  }
193
192
  }
194
193
 
195
- var css_248z$h = ".storybook-button {\n font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n font-weight: 700;\n border: 0;\n border-radius: 3em;\n cursor: pointer;\n display: inline-block;\n line-height: 1;\n}\n.storybook-button--primary {\n color: white;\n background-color: #1ea7fd;\n}\n.storybook-button--secondary {\n color: #333;\n background-color: transparent;\n box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 0px 1px inset;\n}\n.storybook-button--small {\n font-size: 12px;\n padding: 10px 16px;\n}\n.storybook-button--medium {\n font-size: 14px;\n padding: 11px 20px;\n}\n.storybook-button--large {\n font-size: 16px;\n padding: 12px 24px;\n}";
196
- styleInject(css_248z$h);
194
+ var css_248z$k = ".storybook-button {\n font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n font-weight: 700;\n border: 0;\n border-radius: 3em;\n cursor: pointer;\n display: inline-block;\n line-height: 1;\n}\n.storybook-button--primary {\n color: white;\n background-color: #1ea7fd;\n}\n.storybook-button--secondary {\n color: #333;\n background-color: transparent;\n box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 0px 1px inset;\n}\n.storybook-button--small {\n font-size: 12px;\n padding: 10px 16px;\n}\n.storybook-button--medium {\n font-size: 14px;\n padding: 11px 20px;\n}\n.storybook-button--large {\n font-size: 16px;\n padding: 12px 24px;\n}";
195
+ styleInject(css_248z$k);
197
196
 
198
197
  /**
199
198
  * Primary UI component for user interaction
@@ -201,443 +200,103 @@ styleInject(css_248z$h);
201
200
  var Button$1 = function (_a) {
202
201
  var _b = _a.type, type = _b === void 0 ? 'primary' : _b, textColor = _a.textColor, _c = _a.size, size = _c === void 0 ? 'medium' : _c, onClick = _a.onClick, label = _a.label;
203
202
  var _d = __read(useState(4), 2), theState = _d[0]; _d[1];
204
- return (jsx("button", { type: "button", className: classNames('storybook-button', "storybook-button--".concat(size), "storybook-button--".concat(type)), style: textColor ? { color: textColor } : {}, onClick: onClick, children: "".concat(label, " ").concat(theState) }));
203
+ return (React__default.createElement("button", { type: "button", className: classNames('storybook-button', "storybook-button--".concat(size), "storybook-button--".concat(type)), style: textColor ? { color: textColor } : {}, onClick: onClick }, "".concat(label, " ").concat(theState)));
205
204
  };
206
205
 
207
- function warn() {
208
- if (console && console.warn) {
209
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
210
- args[_key] = arguments[_key];
211
- }
212
- if (typeof args[0] === 'string') args[0] = `react-i18next:: ${args[0]}`;
213
- console.warn(...args);
214
- }
215
- }
216
- const alreadyWarned = {};
217
- function warnOnce() {
218
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
219
- args[_key2] = arguments[_key2];
220
- }
221
- if (typeof args[0] === 'string' && alreadyWarned[args[0]]) return;
222
- if (typeof args[0] === 'string') alreadyWarned[args[0]] = new Date();
223
- warn(...args);
224
- }
225
- const loadedClb = (i18n, cb) => () => {
226
- if (i18n.isInitialized) {
227
- cb();
228
- } else {
229
- const initialized = () => {
230
- setTimeout(() => {
231
- i18n.off('initialized', initialized);
232
- }, 0);
233
- cb();
206
+ var useTheme = function (_a) {
207
+ var palette = _a.palette;
208
+ var themePalette = {
209
+ '--will-primary': palette === null || palette === void 0 ? void 0 : palette.primary,
210
+ '--will-secondary': palette === null || palette === void 0 ? void 0 : palette.secondary,
211
+ '--will-error': palette === null || palette === void 0 ? void 0 : palette.error,
234
212
  };
235
- i18n.on('initialized', initialized);
236
- }
213
+ return themePalette;
237
214
  };
238
- function loadNamespaces(i18n, ns, cb) {
239
- i18n.loadNamespaces(ns, loadedClb(i18n, cb));
240
- }
241
- function loadLanguages(i18n, lng, ns, cb) {
242
- if (typeof ns === 'string') ns = [ns];
243
- ns.forEach(n => {
244
- if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);
245
- });
246
- i18n.loadLanguages(lng, loadedClb(i18n, cb));
247
- }
248
- function oldI18nextHasLoadedNamespace(ns, i18n) {
249
- let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
250
- const lng = i18n.languages[0];
251
- const fallbackLng = i18n.options ? i18n.options.fallbackLng : false;
252
- const lastLng = i18n.languages[i18n.languages.length - 1];
253
- if (lng.toLowerCase() === 'cimode') return true;
254
- const loadNotPending = (l, n) => {
255
- const loadState = i18n.services.backendConnector.state[`${l}|${n}`];
256
- return loadState === -1 || loadState === 2;
257
- };
258
- if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false;
259
- if (i18n.hasResourceBundle(lng, ns)) return true;
260
- if (!i18n.services.backendConnector.backend || i18n.options.resources && !i18n.options.partialBundledLanguages) return true;
261
- if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;
262
- return false;
263
- }
264
- function hasLoadedNamespace(ns, i18n) {
265
- let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
266
- if (!i18n.languages || !i18n.languages.length) {
267
- warnOnce('i18n.languages were undefined or empty', i18n.languages);
268
- return true;
269
- }
270
- const isNewerI18next = i18n.options.ignoreJSONStructure !== undefined;
271
- if (!isNewerI18next) {
272
- return oldI18nextHasLoadedNamespace(ns, i18n, options);
273
- }
274
- return i18n.hasLoadedNamespace(ns, {
275
- lng: options.lng,
276
- precheck: (i18nInstance, loadNotPending) => {
277
- if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;
278
- }
279
- });
280
- }
281
215
 
282
- const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;
283
- const htmlEntities = {
284
- '&amp;': '&',
285
- '&#38;': '&',
286
- '&lt;': '<',
287
- '&#60;': '<',
288
- '&gt;': '>',
289
- '&#62;': '>',
290
- '&apos;': "'",
291
- '&#39;': "'",
292
- '&quot;': '"',
293
- '&#34;': '"',
294
- '&nbsp;': ' ',
295
- '&#160;': ' ',
296
- '&copy;': '©',
297
- '&#169;': '©',
298
- '&reg;': '®',
299
- '&#174;': '®',
300
- '&hellip;': '…',
301
- '&#8230;': '…',
302
- '&#x2F;': '/',
303
- '&#47;': '/'
216
+ var useAwaitRender = function () {
217
+ var _a = __read(useState(false), 2), initialRenderComplete = _a[0], setInitialRenderComplete = _a[1];
218
+ useEffect(function () {
219
+ setInitialRenderComplete(true);
220
+ }, []);
221
+ if (!initialRenderComplete)
222
+ return null;
304
223
  };
305
- const unescapeHtmlEntity = m => htmlEntities[m];
306
- const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);
307
224
 
308
- let defaultOptions$1 = {
309
- bindI18n: 'languageChanged',
310
- bindI18nStore: '',
311
- transEmptyNodeValue: '',
312
- transSupportBasicHtmlNodes: true,
313
- transWrapTextNodes: '',
314
- transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],
315
- useSuspense: true,
316
- unescape
225
+ const isString = obj => typeof obj === 'string';
226
+ const defer = () => {
227
+ let res;
228
+ let rej;
229
+ const promise = new Promise((resolve, reject) => {
230
+ res = resolve;
231
+ rej = reject;
232
+ });
233
+ promise.resolve = res;
234
+ promise.reject = rej;
235
+ return promise;
317
236
  };
318
- function setDefaults() {
319
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
320
- defaultOptions$1 = {
321
- ...defaultOptions$1,
322
- ...options
323
- };
324
- }
325
- function getDefaults() {
326
- return defaultOptions$1;
327
- }
328
-
329
- let i18nInstance;
330
- function setI18n(instance) {
331
- i18nInstance = instance;
332
- }
333
- function getI18n() {
334
- return i18nInstance;
335
- }
336
-
337
- const initReactI18next = {
338
- type: '3rdParty',
339
- init(instance) {
340
- setDefaults(instance.options.react);
341
- setI18n(instance);
342
- }
237
+ const makeString = object => {
238
+ if (object == null) return '';
239
+ return '' + object;
343
240
  };
344
-
345
- const I18nContext = createContext();
346
- class ReportNamespaces {
347
- constructor() {
348
- this.usedNamespaces = {};
241
+ const copy = (a, s, t) => {
242
+ a.forEach(m => {
243
+ if (s[m]) t[m] = s[m];
244
+ });
245
+ };
246
+ const lastOfPathSeparatorRegExp = /###/g;
247
+ const cleanKey = key => key && key.indexOf('###') > -1 ? key.replace(lastOfPathSeparatorRegExp, '.') : key;
248
+ const canNotTraverseDeeper = object => !object || isString(object);
249
+ const getLastOfPath = (object, path, Empty) => {
250
+ const stack = !isString(path) ? path : path.split('.');
251
+ let stackIndex = 0;
252
+ while (stackIndex < stack.length - 1) {
253
+ if (canNotTraverseDeeper(object)) return {};
254
+ const key = cleanKey(stack[stackIndex]);
255
+ if (!object[key] && Empty) object[key] = new Empty();
256
+ if (Object.prototype.hasOwnProperty.call(object, key)) {
257
+ object = object[key];
258
+ } else {
259
+ object = {};
260
+ }
261
+ ++stackIndex;
349
262
  }
350
- addUsedNamespaces(namespaces) {
351
- namespaces.forEach(ns => {
352
- if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;
353
- });
263
+ if (canNotTraverseDeeper(object)) return {};
264
+ return {
265
+ obj: object,
266
+ k: cleanKey(stack[stackIndex])
267
+ };
268
+ };
269
+ const setPath = (object, path, newValue) => {
270
+ const {
271
+ obj,
272
+ k
273
+ } = getLastOfPath(object, path, Object);
274
+ if (obj !== undefined || path.length === 1) {
275
+ obj[k] = newValue;
276
+ return;
354
277
  }
355
- getUsedNamespaces() {
356
- return Object.keys(this.usedNamespaces);
278
+ let e = path[path.length - 1];
279
+ let p = path.slice(0, path.length - 1);
280
+ let last = getLastOfPath(object, p, Object);
281
+ while (last.obj === undefined && p.length) {
282
+ e = `${p[p.length - 1]}.${e}`;
283
+ p = p.slice(0, p.length - 1);
284
+ last = getLastOfPath(object, p, Object);
285
+ if (last?.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {
286
+ last.obj = undefined;
287
+ }
357
288
  }
358
- }
359
-
360
- const usePrevious = (value, ignore) => {
361
- const ref = useRef();
362
- useEffect(() => {
363
- ref.current = ignore ? ref.current : value;
364
- }, [value, ignore]);
365
- return ref.current;
289
+ last.obj[`${last.k}.${e}`] = newValue;
366
290
  };
367
- function useTranslation(ns) {
368
- let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
291
+ const pushPath = (object, path, newValue, concat) => {
369
292
  const {
370
- i18n: i18nFromProps
371
- } = props;
372
- const {
373
- i18n: i18nFromContext,
374
- defaultNS: defaultNSFromContext
375
- } = useContext(I18nContext) || {};
376
- const i18n = i18nFromProps || i18nFromContext || getI18n();
377
- if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();
378
- if (!i18n) {
379
- warnOnce('You will need to pass in an i18next instance by using initReactI18next');
380
- const notReadyT = (k, optsOrDefaultValue) => {
381
- if (typeof optsOrDefaultValue === 'string') return optsOrDefaultValue;
382
- if (optsOrDefaultValue && typeof optsOrDefaultValue === 'object' && typeof optsOrDefaultValue.defaultValue === 'string') return optsOrDefaultValue.defaultValue;
383
- return Array.isArray(k) ? k[k.length - 1] : k;
384
- };
385
- const retNotReady = [notReadyT, {}, false];
386
- retNotReady.t = notReadyT;
387
- retNotReady.i18n = {};
388
- retNotReady.ready = false;
389
- return retNotReady;
390
- }
391
- if (i18n.options.react && i18n.options.react.wait !== undefined) warnOnce('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');
392
- const i18nOptions = {
393
- ...getDefaults(),
394
- ...i18n.options.react,
395
- ...props
396
- };
397
- const {
398
- useSuspense,
399
- keyPrefix
400
- } = i18nOptions;
401
- let namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;
402
- namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation'];
403
- if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces);
404
- const ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));
405
- function getT() {
406
- return i18n.getFixedT(props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);
407
- }
408
- const [t, setT] = useState(getT);
409
- let joinedNS = namespaces.join();
410
- if (props.lng) joinedNS = `${props.lng}${joinedNS}`;
411
- const previousJoinedNS = usePrevious(joinedNS);
412
- const isMounted = useRef(true);
413
- useEffect(() => {
414
- const {
415
- bindI18n,
416
- bindI18nStore
417
- } = i18nOptions;
418
- isMounted.current = true;
419
- if (!ready && !useSuspense) {
420
- if (props.lng) {
421
- loadLanguages(i18n, props.lng, namespaces, () => {
422
- if (isMounted.current) setT(getT);
423
- });
424
- } else {
425
- loadNamespaces(i18n, namespaces, () => {
426
- if (isMounted.current) setT(getT);
427
- });
428
- }
429
- }
430
- if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) {
431
- setT(getT);
432
- }
433
- function boundReset() {
434
- if (isMounted.current) setT(getT);
435
- }
436
- if (bindI18n && i18n) i18n.on(bindI18n, boundReset);
437
- if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset);
438
- return () => {
439
- isMounted.current = false;
440
- if (bindI18n && i18n) bindI18n.split(' ').forEach(e => i18n.off(e, boundReset));
441
- if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, boundReset));
442
- };
443
- }, [i18n, joinedNS]);
444
- const isInitial = useRef(true);
445
- useEffect(() => {
446
- if (isMounted.current && !isInitial.current) {
447
- setT(getT);
448
- }
449
- isInitial.current = false;
450
- }, [i18n, keyPrefix]);
451
- const ret = [t, i18n, ready];
452
- ret.t = t;
453
- ret.i18n = i18n;
454
- ret.ready = ready;
455
- if (ready) return ret;
456
- if (!ready && !useSuspense) return ret;
457
- throw new Promise(resolve => {
458
- if (props.lng) {
459
- loadLanguages(i18n, props.lng, namespaces, () => resolve());
460
- } else {
461
- loadNamespaces(i18n, namespaces, () => resolve());
462
- }
463
- });
464
- }
465
-
466
- var DefaultContext = {
467
- color: undefined,
468
- size: undefined,
469
- className: undefined,
470
- style: undefined,
471
- attr: undefined
472
- };
473
- var IconContext = React__default__default.createContext && React__default__default.createContext(DefaultContext);
474
-
475
- var __assign$1 = undefined && undefined.__assign || function () {
476
- __assign$1 = Object.assign || function (t) {
477
- for (var s, i = 1, n = arguments.length; i < n; i++) {
478
- s = arguments[i];
479
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
480
- }
481
- return t;
482
- };
483
- return __assign$1.apply(this, arguments);
484
- };
485
- var __rest$1 = undefined && undefined.__rest || function (s, e) {
486
- var t = {};
487
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
488
- if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
489
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
490
- }
491
- return t;
492
- };
493
- function Tree2Element(tree) {
494
- return tree && tree.map(function (node, i) {
495
- return React__default__default.createElement(node.tag, __assign$1({
496
- key: i
497
- }, node.attr), Tree2Element(node.child));
498
- });
499
- }
500
- function GenIcon(data) {
501
- // eslint-disable-next-line react/display-name
502
- return function (props) {
503
- return React__default__default.createElement(IconBase, __assign$1({
504
- attr: __assign$1({}, data.attr)
505
- }, props), Tree2Element(data.child));
506
- };
507
- }
508
- function IconBase(props) {
509
- var elem = function (conf) {
510
- var attr = props.attr,
511
- size = props.size,
512
- title = props.title,
513
- svgProps = __rest$1(props, ["attr", "size", "title"]);
514
- var computedSize = size || conf.size || "1em";
515
- var className;
516
- if (conf.className) className = conf.className;
517
- if (props.className) className = (className ? className + " " : "") + props.className;
518
- return React__default__default.createElement("svg", __assign$1({
519
- stroke: "currentColor",
520
- fill: "currentColor",
521
- strokeWidth: "0"
522
- }, conf.attr, attr, svgProps, {
523
- className: className,
524
- style: __assign$1(__assign$1({
525
- color: props.color || conf.color
526
- }, conf.style), props.style),
527
- height: computedSize,
528
- width: computedSize,
529
- xmlns: "http://www.w3.org/2000/svg"
530
- }), title && React__default__default.createElement("title", null, title), props.children);
531
- };
532
- return IconContext !== undefined ? React__default__default.createElement(IconContext.Consumer, null, function (conf) {
533
- return elem(conf);
534
- }) : elem(DefaultContext);
535
- }
536
-
537
- // THIS FILE IS AUTO GENERATED
538
- function FaSearch (props) {
539
- return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 512 512"},"child":[{"tag":"path","attr":{"d":"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"}}]})(props);
540
- }function FaSpinner (props) {
541
- return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 512 512"},"child":[{"tag":"path","attr":{"d":"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"}}]})(props);
542
- }
543
-
544
- function useTheme(_a) {
545
- var palette = _a.palette;
546
- var themePalette = {
547
- '--will-primary': palette === null || palette === void 0 ? void 0 : palette.primary,
548
- '--will-secondary': palette === null || palette === void 0 ? void 0 : palette.secondary,
549
- '--will-error': palette === null || palette === void 0 ? void 0 : palette.error,
550
- };
551
- return themePalette;
552
- }
553
-
554
- var css_248z$g = "@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-light-grey: #C8C8C8;\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-error: #d32f2f;\n\n /* Transparent */\n --will-transparent-black: rgba(0, 0, 0, 0.5);\n --will-transparent-white: rgba(255, 255, 255, 0.30);\n --will-transparent-lavender: rgba(171, 167, 175, 0.30);\n\n /* Color mix */\n --will-primary-lighter: color-mix(in srgb, var(--will-primary), white 50%);\n --will-primary-lightest: color-mix(in srgb, var(--will-primary), white 80%);\n\n\n /* Shadows */\n --will-box-shadow-dark: 0px 2px 12px 2px #a1a1a180;\n --will-box-shadow-light: 0px 2px 12px 2px #bcb9b980;\n\n /* Breakpoints */\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";
555
- styleInject(css_248z$g);
556
-
557
- var useAwaitRender = function () {
558
- var _a = __read(useState(false), 2), initialRenderComplete = _a[0], setInitialRenderComplete = _a[1];
559
- useEffect(function () {
560
- setInitialRenderComplete(true);
561
- }, []);
562
- if (!initialRenderComplete)
563
- return null;
564
- };
565
-
566
- const isString = obj => typeof obj === 'string';
567
- const defer = () => {
568
- let res;
569
- let rej;
570
- const promise = new Promise((resolve, reject) => {
571
- res = resolve;
572
- rej = reject;
573
- });
574
- promise.resolve = res;
575
- promise.reject = rej;
576
- return promise;
577
- };
578
- const makeString = object => {
579
- if (object == null) return '';
580
- return '' + object;
581
- };
582
- const copy = (a, s, t) => {
583
- a.forEach(m => {
584
- if (s[m]) t[m] = s[m];
585
- });
586
- };
587
- const lastOfPathSeparatorRegExp = /###/g;
588
- const cleanKey = key => key && key.indexOf('###') > -1 ? key.replace(lastOfPathSeparatorRegExp, '.') : key;
589
- const canNotTraverseDeeper = object => !object || isString(object);
590
- const getLastOfPath = (object, path, Empty) => {
591
- const stack = !isString(path) ? path : path.split('.');
592
- let stackIndex = 0;
593
- while (stackIndex < stack.length - 1) {
594
- if (canNotTraverseDeeper(object)) return {};
595
- const key = cleanKey(stack[stackIndex]);
596
- if (!object[key] && Empty) object[key] = new Empty();
597
- if (Object.prototype.hasOwnProperty.call(object, key)) {
598
- object = object[key];
599
- } else {
600
- object = {};
601
- }
602
- ++stackIndex;
603
- }
604
- if (canNotTraverseDeeper(object)) return {};
605
- return {
606
- obj: object,
607
- k: cleanKey(stack[stackIndex])
608
- };
609
- };
610
- const setPath = (object, path, newValue) => {
611
- const {
612
- obj,
613
- k
614
- } = getLastOfPath(object, path, Object);
615
- if (obj !== undefined || path.length === 1) {
616
- obj[k] = newValue;
617
- return;
618
- }
619
- let e = path[path.length - 1];
620
- let p = path.slice(0, path.length - 1);
621
- let last = getLastOfPath(object, p, Object);
622
- while (last.obj === undefined && p.length) {
623
- e = `${p[p.length - 1]}.${e}`;
624
- p = p.slice(0, p.length - 1);
625
- last = getLastOfPath(object, p, Object);
626
- if (last?.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {
627
- last.obj = undefined;
628
- }
629
- }
630
- last.obj[`${last.k}.${e}`] = newValue;
631
- };
632
- const pushPath = (object, path, newValue, concat) => {
633
- const {
634
- obj,
635
- k
636
- } = getLastOfPath(object, path, Object);
637
- obj[k] = obj[k] || [];
638
- obj[k].push(newValue);
639
- };
640
- const getPath = (object, path) => {
293
+ obj,
294
+ k
295
+ } = getLastOfPath(object, path, Object);
296
+ obj[k] = obj[k] || [];
297
+ obj[k].push(newValue);
298
+ };
299
+ const getPath = (object, path) => {
641
300
  const {
642
301
  obj,
643
302
  k
@@ -2793,22 +2452,281 @@ instance.hasLoadedNamespace;
2793
2452
  instance.loadNamespaces;
2794
2453
  instance.loadLanguages;
2795
2454
 
2796
- var locations$1 = {
2797
- label: "Location",
2798
- title: "Select location",
2799
- placeholder: "Add location",
2800
- selected: "locations"
2801
- };
2802
- var calendar$1 = {
2803
- label: "Dates",
2804
- roomsLabelPlaceholder: "Add check-in and check-out",
2805
- eventsLabelPlaceholder: "Add search dates",
2806
- startDate: "Start date",
2807
- endDate: "End date",
2808
- title: "Calendar"
2809
- };
2810
- var guests$1 = {
2811
- label: "Number of guests",
2455
+ function warn() {
2456
+ if (console && console.warn) {
2457
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2458
+ args[_key] = arguments[_key];
2459
+ }
2460
+ if (typeof args[0] === 'string') args[0] = `react-i18next:: ${args[0]}`;
2461
+ console.warn(...args);
2462
+ }
2463
+ }
2464
+ const alreadyWarned = {};
2465
+ function warnOnce() {
2466
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
2467
+ args[_key2] = arguments[_key2];
2468
+ }
2469
+ if (typeof args[0] === 'string' && alreadyWarned[args[0]]) return;
2470
+ if (typeof args[0] === 'string') alreadyWarned[args[0]] = new Date();
2471
+ warn(...args);
2472
+ }
2473
+ const loadedClb = (i18n, cb) => () => {
2474
+ if (i18n.isInitialized) {
2475
+ cb();
2476
+ } else {
2477
+ const initialized = () => {
2478
+ setTimeout(() => {
2479
+ i18n.off('initialized', initialized);
2480
+ }, 0);
2481
+ cb();
2482
+ };
2483
+ i18n.on('initialized', initialized);
2484
+ }
2485
+ };
2486
+ function loadNamespaces(i18n, ns, cb) {
2487
+ i18n.loadNamespaces(ns, loadedClb(i18n, cb));
2488
+ }
2489
+ function loadLanguages(i18n, lng, ns, cb) {
2490
+ if (typeof ns === 'string') ns = [ns];
2491
+ ns.forEach(n => {
2492
+ if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);
2493
+ });
2494
+ i18n.loadLanguages(lng, loadedClb(i18n, cb));
2495
+ }
2496
+ function oldI18nextHasLoadedNamespace(ns, i18n) {
2497
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2498
+ const lng = i18n.languages[0];
2499
+ const fallbackLng = i18n.options ? i18n.options.fallbackLng : false;
2500
+ const lastLng = i18n.languages[i18n.languages.length - 1];
2501
+ if (lng.toLowerCase() === 'cimode') return true;
2502
+ const loadNotPending = (l, n) => {
2503
+ const loadState = i18n.services.backendConnector.state[`${l}|${n}`];
2504
+ return loadState === -1 || loadState === 2;
2505
+ };
2506
+ if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false;
2507
+ if (i18n.hasResourceBundle(lng, ns)) return true;
2508
+ if (!i18n.services.backendConnector.backend || i18n.options.resources && !i18n.options.partialBundledLanguages) return true;
2509
+ if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;
2510
+ return false;
2511
+ }
2512
+ function hasLoadedNamespace(ns, i18n) {
2513
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2514
+ if (!i18n.languages || !i18n.languages.length) {
2515
+ warnOnce('i18n.languages were undefined or empty', i18n.languages);
2516
+ return true;
2517
+ }
2518
+ const isNewerI18next = i18n.options.ignoreJSONStructure !== undefined;
2519
+ if (!isNewerI18next) {
2520
+ return oldI18nextHasLoadedNamespace(ns, i18n, options);
2521
+ }
2522
+ return i18n.hasLoadedNamespace(ns, {
2523
+ lng: options.lng,
2524
+ precheck: (i18nInstance, loadNotPending) => {
2525
+ if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;
2526
+ }
2527
+ });
2528
+ }
2529
+
2530
+ const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;
2531
+ const htmlEntities = {
2532
+ '&amp;': '&',
2533
+ '&#38;': '&',
2534
+ '&lt;': '<',
2535
+ '&#60;': '<',
2536
+ '&gt;': '>',
2537
+ '&#62;': '>',
2538
+ '&apos;': "'",
2539
+ '&#39;': "'",
2540
+ '&quot;': '"',
2541
+ '&#34;': '"',
2542
+ '&nbsp;': ' ',
2543
+ '&#160;': ' ',
2544
+ '&copy;': '©',
2545
+ '&#169;': '©',
2546
+ '&reg;': '®',
2547
+ '&#174;': '®',
2548
+ '&hellip;': '…',
2549
+ '&#8230;': '…',
2550
+ '&#x2F;': '/',
2551
+ '&#47;': '/'
2552
+ };
2553
+ const unescapeHtmlEntity = m => htmlEntities[m];
2554
+ const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);
2555
+
2556
+ let defaultOptions$1 = {
2557
+ bindI18n: 'languageChanged',
2558
+ bindI18nStore: '',
2559
+ transEmptyNodeValue: '',
2560
+ transSupportBasicHtmlNodes: true,
2561
+ transWrapTextNodes: '',
2562
+ transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],
2563
+ useSuspense: true,
2564
+ unescape
2565
+ };
2566
+ function setDefaults() {
2567
+ let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
2568
+ defaultOptions$1 = {
2569
+ ...defaultOptions$1,
2570
+ ...options
2571
+ };
2572
+ }
2573
+ function getDefaults() {
2574
+ return defaultOptions$1;
2575
+ }
2576
+
2577
+ let i18nInstance;
2578
+ function setI18n(instance) {
2579
+ i18nInstance = instance;
2580
+ }
2581
+ function getI18n() {
2582
+ return i18nInstance;
2583
+ }
2584
+
2585
+ const initReactI18next = {
2586
+ type: '3rdParty',
2587
+ init(instance) {
2588
+ setDefaults(instance.options.react);
2589
+ setI18n(instance);
2590
+ }
2591
+ };
2592
+
2593
+ const I18nContext = createContext();
2594
+ class ReportNamespaces {
2595
+ constructor() {
2596
+ this.usedNamespaces = {};
2597
+ }
2598
+ addUsedNamespaces(namespaces) {
2599
+ namespaces.forEach(ns => {
2600
+ if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;
2601
+ });
2602
+ }
2603
+ getUsedNamespaces() {
2604
+ return Object.keys(this.usedNamespaces);
2605
+ }
2606
+ }
2607
+
2608
+ const usePrevious = (value, ignore) => {
2609
+ const ref = useRef();
2610
+ useEffect(() => {
2611
+ ref.current = ignore ? ref.current : value;
2612
+ }, [value, ignore]);
2613
+ return ref.current;
2614
+ };
2615
+ function useTranslation(ns) {
2616
+ let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2617
+ const {
2618
+ i18n: i18nFromProps
2619
+ } = props;
2620
+ const {
2621
+ i18n: i18nFromContext,
2622
+ defaultNS: defaultNSFromContext
2623
+ } = useContext(I18nContext) || {};
2624
+ const i18n = i18nFromProps || i18nFromContext || getI18n();
2625
+ if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();
2626
+ if (!i18n) {
2627
+ warnOnce('You will need to pass in an i18next instance by using initReactI18next');
2628
+ const notReadyT = (k, optsOrDefaultValue) => {
2629
+ if (typeof optsOrDefaultValue === 'string') return optsOrDefaultValue;
2630
+ if (optsOrDefaultValue && typeof optsOrDefaultValue === 'object' && typeof optsOrDefaultValue.defaultValue === 'string') return optsOrDefaultValue.defaultValue;
2631
+ return Array.isArray(k) ? k[k.length - 1] : k;
2632
+ };
2633
+ const retNotReady = [notReadyT, {}, false];
2634
+ retNotReady.t = notReadyT;
2635
+ retNotReady.i18n = {};
2636
+ retNotReady.ready = false;
2637
+ return retNotReady;
2638
+ }
2639
+ if (i18n.options.react && i18n.options.react.wait !== undefined) warnOnce('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');
2640
+ const i18nOptions = {
2641
+ ...getDefaults(),
2642
+ ...i18n.options.react,
2643
+ ...props
2644
+ };
2645
+ const {
2646
+ useSuspense,
2647
+ keyPrefix
2648
+ } = i18nOptions;
2649
+ let namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;
2650
+ namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation'];
2651
+ if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces);
2652
+ const ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));
2653
+ function getT() {
2654
+ return i18n.getFixedT(props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);
2655
+ }
2656
+ const [t, setT] = useState(getT);
2657
+ let joinedNS = namespaces.join();
2658
+ if (props.lng) joinedNS = `${props.lng}${joinedNS}`;
2659
+ const previousJoinedNS = usePrevious(joinedNS);
2660
+ const isMounted = useRef(true);
2661
+ useEffect(() => {
2662
+ const {
2663
+ bindI18n,
2664
+ bindI18nStore
2665
+ } = i18nOptions;
2666
+ isMounted.current = true;
2667
+ if (!ready && !useSuspense) {
2668
+ if (props.lng) {
2669
+ loadLanguages(i18n, props.lng, namespaces, () => {
2670
+ if (isMounted.current) setT(getT);
2671
+ });
2672
+ } else {
2673
+ loadNamespaces(i18n, namespaces, () => {
2674
+ if (isMounted.current) setT(getT);
2675
+ });
2676
+ }
2677
+ }
2678
+ if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) {
2679
+ setT(getT);
2680
+ }
2681
+ function boundReset() {
2682
+ if (isMounted.current) setT(getT);
2683
+ }
2684
+ if (bindI18n && i18n) i18n.on(bindI18n, boundReset);
2685
+ if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset);
2686
+ return () => {
2687
+ isMounted.current = false;
2688
+ if (bindI18n && i18n) bindI18n.split(' ').forEach(e => i18n.off(e, boundReset));
2689
+ if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, boundReset));
2690
+ };
2691
+ }, [i18n, joinedNS]);
2692
+ const isInitial = useRef(true);
2693
+ useEffect(() => {
2694
+ if (isMounted.current && !isInitial.current) {
2695
+ setT(getT);
2696
+ }
2697
+ isInitial.current = false;
2698
+ }, [i18n, keyPrefix]);
2699
+ const ret = [t, i18n, ready];
2700
+ ret.t = t;
2701
+ ret.i18n = i18n;
2702
+ ret.ready = ready;
2703
+ if (ready) return ret;
2704
+ if (!ready && !useSuspense) return ret;
2705
+ throw new Promise(resolve => {
2706
+ if (props.lng) {
2707
+ loadLanguages(i18n, props.lng, namespaces, () => resolve());
2708
+ } else {
2709
+ loadNamespaces(i18n, namespaces, () => resolve());
2710
+ }
2711
+ });
2712
+ }
2713
+
2714
+ var locations$1 = {
2715
+ label: "Location",
2716
+ title: "Select location",
2717
+ placeholder: "Add location",
2718
+ selected: "locations"
2719
+ };
2720
+ var calendar$1 = {
2721
+ label: "Dates",
2722
+ roomsLabelPlaceholder: "Add check-in and check-out",
2723
+ eventsLabelPlaceholder: "Add search dates",
2724
+ startDate: "Start date",
2725
+ endDate: "End date",
2726
+ title: "Calendar"
2727
+ };
2728
+ var guests$1 = {
2729
+ label: "Number of guests",
2812
2730
  labelPlaceholder: "Add guests",
2813
2731
  title: "Who's coming?",
2814
2732
  adultsLabel: "Adults",
@@ -2999,25 +2917,134 @@ var useAutoFocus = function (autoFocus) {
2999
2917
  return ref;
3000
2918
  };
3001
2919
 
3002
- var css_248z$f = ".will-filter-bar-submit-button {\n width: auto;\n height: auto;\n padding: 10px 20px;\n border-radius: 20px;\n cursor: pointer;\n border: none;\n white-space: nowrap;\n text-transform: uppercase;\n font-size: 12px;\n display: flex;\n align-items: center;\n user-select: none;\n}\n\n/* Submit button variants */\n.will-filter-bar-submit-button.default {\n background-color: var(--will-primary);\n color: var(--will-white);\n}\n\n.will-filter-bar-submit-button.text {\n background-color: transparent;\n color: var(--will-black);\n text-decoration: underline;\n font-weight: 500;\n font-size: 15px;\n padding: 0 10px;\n}\n\n.will-filter-bar-submit-button span {\n margin-right: 10px;\n display: flex;\n}\n\nbutton.will-filter-bar-submit-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n\n@media (max-width: 960px) {\n .will-filter-bar-submit-button {\n justify-content: center;\n \n }\n}\n\n/* --- */\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n";
3003
- styleInject(css_248z$f);
2920
+ var css_248z$j = ".will-filter-bar-select-button {\n width: 100%;\n height: auto;\n background-color: transparent;\n border: none;\n padding: 0 20px;\n border-radius: 20px;\n cursor: pointer;\n font-size: 14px;\n text-align: initial;\n user-select: none;\n}\n\n.will-filter-bar-select-button.disabled {\n cursor: not-allowed;\n}\n\n.will-filter-bar-select-button .select-button-wrapper {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.will-filter-bar-select-button .select-button-wrapper > div {\n display: grid;\n}\n\n.will-filter-bar-select-button .select-button-label {\n color: var(--will-black);\n font-weight: 600;\n}\n\n.will-filter-bar-select-button .select-button-description {\n color: var(--will-black);\n font-weight: 400;\n opacity: 0.5;\n white-space: nowrap;\n min-height: 19px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.will-filter-bar-select-button .select-button-description span {\n font: inherit;\n}\n\n.will-filter-bar-select-button .select-button-label.active,\n.will-filter-bar-select-button .select-button-description.active {\n font-weight: 700;\n font-size: 15px;\n opacity: 1;\n}\n\n@media (max-width: 960px) {\n .will-filter-bar-select-button {\n padding: 15px 0;\n }\n\n .will-filter-bar-select-button:first-child {\n padding: 0 0 15px 0;\n }\n\n .will-filter-bar-select-button .select-button-wrapper {\n justify-content: center;\n text-align: center;\n }\n\n .will-filter-bar-select-button .select-button-description {\n white-space: wrap;\n }\n\n .will-filter-bar-select-button .select-button-divider {\n display: none;\n }\n}\n";
2921
+ styleInject(css_248z$j);
3004
2922
 
3005
- var SubmitButton = function (_a) {
3006
- var onClick = _a.onClick, startIcon = _a.startIcon, label = _a.label, disabled = _a.disabled, isLoading = _a.isLoading, variant = _a.variant;
3007
- return (jsxs("button", { className: "will-filter-bar-submit-button ".concat(variant || 'default'), onClick: onClick, disabled: disabled || isLoading, children: [isLoading ? (jsx("span", { children: jsx(FaSpinner, { style: { animation: 'spin 1s linear infinite' } }) })) : (startIcon && jsx("span", { children: startIcon })), label || 'Label'] }));
2923
+ var SelectButton = forwardRef(function (_a, ref) {
2924
+ var active = _a.active, label = _a.label, onClick = _a.onClick, description = _a.description, disabled = _a.disabled, ariaExpanded = _a.ariaExpanded, ariaControls = _a.ariaControls;
2925
+ return (React__default.createElement("button", { ref: ref, className: "will-filter-bar-select-button ".concat(disabled ? 'disabled' : ''), onClick: function (e) { return (disabled ? undefined : onClick(e)); }, disabled: disabled, "aria-expanded": ariaExpanded, "aria-controls": ariaControls, "aria-haspopup": "true", "aria-disabled": disabled },
2926
+ React__default.createElement("span", { className: "select-button-wrapper" },
2927
+ React__default.createElement("div", null,
2928
+ React__default.createElement("p", { className: "select-button-label" }, label),
2929
+ React__default.createElement("p", { className: "select-button-description ".concat(active ? 'active' : '') }, description)))));
2930
+ });
2931
+ SelectButton.displayName = 'SelectButton';
2932
+
2933
+ var css_248z$i = ".will-filter-bar-tab-button {\n width: auto;\n height: auto;\n padding: 10px 20px;\n cursor: pointer;\n border: none;\n white-space: nowrap;\n font-size: 16px;\n display: flex;\n align-items: center;\n background-color: transparent;\n user-select: none;\n font-weight: 600;\n border-radius: 50px;\n }\n\n .will-filter-bar-tab-button.light {\n color: var(--will-white)\n }\n\n .will-filter-bar-tab-button.dark {\n color: var(--will-black)\n }\n\n .will-filter-bar-tab-button.light.active,\n .will-filter-bar-tab-button:hover {\n background-color: var(--will-transparent-white);\n }\n\n .will-filter-bar-tab-button.dark.active,\n .will-filter-bar-tab-button:hover {\n background-color: var(--will-transparent-lavender);\n }\n\n \n\n";
2934
+ styleInject(css_248z$i);
2935
+
2936
+ var TabButton = function (_a) {
2937
+ var onClick = _a.onClick, label = _a.label, active = _a.active, mode = _a.mode;
2938
+ return (React__default.createElement("button", { className: "will-filter-bar-tab-button ".concat(mode || 'light', " ").concat(active && 'active', " "), onClick: onClick }, label));
3008
2939
  };
3009
2940
 
3010
- // THIS FILE IS AUTO GENERATED
3011
- function IoIosCloseCircleOutline (props) {
3012
- return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 512 512"},"child":[{"tag":"path","attr":{"d":"M331.3 308.7L278.6 256l52.7-52.7c6.2-6.2 6.2-16.4 0-22.6-6.2-6.2-16.4-6.2-22.6 0L256 233.4l-52.7-52.7c-6.2-6.2-15.6-7.1-22.6 0-7.1 7.1-6 16.6 0 22.6l52.7 52.7-52.7 52.7c-6.7 6.7-6.4 16.3 0 22.6 6.4 6.4 16.4 6.2 22.6 0l52.7-52.7 52.7 52.7c6.2 6.2 16.4 6.2 22.6 0 6.3-6.2 6.3-16.4 0-22.6z"}},{"tag":"path","attr":{"d":"M256 76c48.1 0 93.3 18.7 127.3 52.7S436 207.9 436 256s-18.7 93.3-52.7 127.3S304.1 436 256 436c-48.1 0-93.3-18.7-127.3-52.7S76 304.1 76 256s18.7-93.3 52.7-127.3S207.9 76 256 76m0-28C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48z"}}]})(props);
3013
- }
2941
+ var css_248z$h = ".will-filter-bar-divider {\n width: 1px;\n margin: 0 10px;\n background-color: var(--will-charcoal-blue);\n}\n\n@media (max-width: 960px) {\n .will-filter-bar-divider {\n width: auto;\n margin: 0 10px;\n height: 1px;\n background-color: var(--will-charcoal-blue);\n }\n}";
2942
+ styleInject(css_248z$h);
3014
2943
 
3015
- var css_248z$e = ".will-filter-bar-close-button {\n width: auto;\n height: auto;\n /* background-color: var(--will-grey); */\n color: var(--will-grey);\n padding: 2px 7px;\n border-radius: 50%;\n cursor: pointer;\n border: none;\n display: flex;\n align-items: center;\n font-size: 23px;\n /* display: none; */\n\n position: absolute;\n top: 10px;\n right: 10px;\n\n min-height: 35px;\n}\n\n@media (max-width: 960px) {\n .will-filter-bar-close-button {\n top: 10px;\n right: 10px;\n\n border-radius: 25px;\n margin-left:0;\n \n display: flex;\n justify-content: center;\n }\n}\n";
3016
- styleInject(css_248z$e);
2944
+ var Divider = function () {
2945
+ return React__default.createElement("div", { className: "will-filter-bar-divider" });
2946
+ };
3017
2947
 
3018
- var CloseButton = function (_a) {
3019
- var handleClose = _a.handleClose;
3020
- return (jsx("button", { className: "will-filter-bar-close-button", onClick: handleClose, children: jsx(IoIosCloseCircleOutline, {}) }));
2948
+ var FilterSections;
2949
+ (function (FilterSections) {
2950
+ FilterSections["CALENDAR"] = "calendar";
2951
+ FilterSections["GUESTS"] = "guests";
2952
+ FilterSections["CATEGORIES"] = "categories";
2953
+ FilterSections["LOCATIONS"] = "locations";
2954
+ })(FilterSections || (FilterSections = {}));
2955
+ var Pages;
2956
+ (function (Pages) {
2957
+ Pages["ROOMS"] = "/rooms";
2958
+ Pages["EVENTS"] = "/events";
2959
+ Pages["SALES"] = "/sales";
2960
+ })(Pages || (Pages = {}));
2961
+
2962
+ var useScrollInToView = function (_a) {
2963
+ var selectedFilter = _a.selectedFilter;
2964
+ var _b = __read(useState(true), 2), isMobile = _b[0], setIsMobile = _b[1];
2965
+ var targetFilterBarRef = useRef(null);
2966
+ useEffect(function () {
2967
+ if (typeof window !== 'undefined' && window.innerWidth > 960) {
2968
+ setIsMobile(false);
2969
+ return;
2970
+ }
2971
+ if (targetFilterBarRef.current && selectedFilter) {
2972
+ window.scrollTo({
2973
+ behavior: 'smooth',
2974
+ top: targetFilterBarRef.current.getBoundingClientRect().top -
2975
+ document.body.getBoundingClientRect().top -
2976
+ 30,
2977
+ });
2978
+ }
2979
+ }, [selectedFilter]);
2980
+ return { isMobile: isMobile, targetFilterBarRef: targetFilterBarRef };
2981
+ };
2982
+
2983
+ var useFilterState = function (_a) {
2984
+ var locations = _a.locations;
2985
+ var _b = __read(useState(Pages.EVENTS), 2), selectedPath = _b[0], setSelectedPath = _b[1];
2986
+ var _c = __read(useState(false), 2), selectedFilter = _c[0], setSelectedFilter = _c[1];
2987
+ var _d = __read(useState(), 2), calendarRange = _d[0], setCalendarRange = _d[1];
2988
+ var _e = __read(useState(false), 2), innerLoading = _e[0], setInnerLoading = _e[1];
2989
+ var _f = __read(useState(0), 2), categories = _f[0], setCategories = _f[1];
2990
+ var _g = __read(useState({}), 2), ageCategoryCounts = _g[0], setAgeCategoryCounts = _g[1];
2991
+ var _h = __read(useState([]), 2), selectedLocations = _h[0], setSelectedLocations = _h[1];
2992
+ useEffect(function () {
2993
+ var _a;
2994
+ if (typeof window === 'undefined')
2995
+ return;
2996
+ var urlSearchParams = new URLSearchParams(window.location.search);
2997
+ var startDateParam = urlSearchParams.get('startDate');
2998
+ var endDateParam = urlSearchParams.get('endDate');
2999
+ var locationIdParams = urlSearchParams.getAll('locationId');
3000
+ var ageCategoryCountsParam = {};
3001
+ var ageCategoryCountsQuery = urlSearchParams.get('ageCategoryCounts');
3002
+ if (ageCategoryCountsQuery) {
3003
+ try {
3004
+ ageCategoryCountsParam = JSON.parse(ageCategoryCountsQuery);
3005
+ }
3006
+ catch (error) {
3007
+ console.warn('Invalid ageCategoryCounts query param, ignoring', error);
3008
+ ageCategoryCountsParam = {};
3009
+ }
3010
+ }
3011
+ var categoriesParam = urlSearchParams.get('categories');
3012
+ var parsedCategories = 0;
3013
+ if (categoriesParam) {
3014
+ var parsed = parseInt(categoriesParam, 10);
3015
+ parsedCategories = Number.isNaN(parsed) ? 0 : parsed;
3016
+ }
3017
+ if (startDateParam && endDateParam) {
3018
+ setCalendarRange({
3019
+ from: new Date(startDateParam),
3020
+ to: new Date(endDateParam),
3021
+ });
3022
+ }
3023
+ setAgeCategoryCounts(ageCategoryCountsParam);
3024
+ setCategories(parsedCategories);
3025
+ if (((_a = locations === null || locations === void 0 ? void 0 : locations.data) === null || _a === void 0 ? void 0 : _a.length) && locationIdParams.length) {
3026
+ var matchedLocations = locations.data.filter(function (location) {
3027
+ return locationIdParams.includes(location.id.toString());
3028
+ });
3029
+ setSelectedLocations(matchedLocations);
3030
+ }
3031
+ }, [locations]);
3032
+ return {
3033
+ selectedPath: selectedPath,
3034
+ selectedFilter: selectedFilter,
3035
+ calendarRange: calendarRange,
3036
+ innerLoading: innerLoading,
3037
+ categories: categories,
3038
+ ageCategoryCounts: ageCategoryCounts,
3039
+ selectedLocations: selectedLocations,
3040
+ setSelectedLocations: setSelectedLocations,
3041
+ setCalendarRange: setCalendarRange,
3042
+ setAgeCategoryCounts: setAgeCategoryCounts,
3043
+ setCategories: setCategories,
3044
+ setSelectedPath: setSelectedPath,
3045
+ setSelectedFilter: setSelectedFilter,
3046
+ setInnerLoading: setInnerLoading,
3047
+ };
3021
3048
  };
3022
3049
 
3023
3050
  function _typeof(o) {
@@ -6538,100 +6565,454 @@ function isSameMonth(dirtyDateLeft, dirtyDateRight) {
6538
6565
  */
6539
6566
  function isSameYear(dirtyDateLeft, dirtyDateRight) {
6540
6567
  requiredArgs(2, arguments);
6541
- var dateLeft = toDate(dirtyDateLeft);
6542
- var dateRight = toDate(dirtyDateRight);
6543
- return dateLeft.getFullYear() === dateRight.getFullYear();
6568
+ var dateLeft = toDate(dirtyDateLeft);
6569
+ var dateRight = toDate(dirtyDateRight);
6570
+ return dateLeft.getFullYear() === dateRight.getFullYear();
6571
+ }
6572
+
6573
+ /**
6574
+ * @name subDays
6575
+ * @category Day Helpers
6576
+ * @summary Subtract the specified number of days from the given date.
6577
+ *
6578
+ * @description
6579
+ * Subtract the specified number of days from the given date.
6580
+ *
6581
+ * @param {Date|Number} date - the date to be changed
6582
+ * @param {Number} amount - the amount of days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
6583
+ * @returns {Date} the new date with the days subtracted
6584
+ * @throws {TypeError} 2 arguments required
6585
+ *
6586
+ * @example
6587
+ * // Subtract 10 days from 1 September 2014:
6588
+ * const result = subDays(new Date(2014, 8, 1), 10)
6589
+ * //=> Fri Aug 22 2014 00:00:00
6590
+ */
6591
+ function subDays(dirtyDate, dirtyAmount) {
6592
+ requiredArgs(2, arguments);
6593
+ var amount = toInteger(dirtyAmount);
6594
+ return addDays(dirtyDate, -amount);
6595
+ }
6596
+
6597
+ /**
6598
+ * @name setMonth
6599
+ * @category Month Helpers
6600
+ * @summary Set the month to the given date.
6601
+ *
6602
+ * @description
6603
+ * Set the month to the given date.
6604
+ *
6605
+ * @param {Date|Number} date - the date to be changed
6606
+ * @param {Number} month - the month of the new date
6607
+ * @returns {Date} the new date with the month set
6608
+ * @throws {TypeError} 2 arguments required
6609
+ *
6610
+ * @example
6611
+ * // Set February to 1 September 2014:
6612
+ * const result = setMonth(new Date(2014, 8, 1), 1)
6613
+ * //=> Sat Feb 01 2014 00:00:00
6614
+ */
6615
+ function setMonth(dirtyDate, dirtyMonth) {
6616
+ requiredArgs(2, arguments);
6617
+ var date = toDate(dirtyDate);
6618
+ var month = toInteger(dirtyMonth);
6619
+ var year = date.getFullYear();
6620
+ var day = date.getDate();
6621
+ var dateWithDesiredMonth = new Date(0);
6622
+ dateWithDesiredMonth.setFullYear(year, month, 15);
6623
+ dateWithDesiredMonth.setHours(0, 0, 0, 0);
6624
+ var daysInMonth = getDaysInMonth(dateWithDesiredMonth);
6625
+ // Set the last day of the new month
6626
+ // if the original date was the last day of the longer month
6627
+ date.setMonth(month, Math.min(day, daysInMonth));
6628
+ return date;
6544
6629
  }
6545
6630
 
6546
6631
  /**
6547
- * @name subDays
6548
- * @category Day Helpers
6549
- * @summary Subtract the specified number of days from the given date.
6632
+ * @name setYear
6633
+ * @category Year Helpers
6634
+ * @summary Set the year to the given date.
6550
6635
  *
6551
6636
  * @description
6552
- * Subtract the specified number of days from the given date.
6637
+ * Set the year to the given date.
6553
6638
  *
6554
6639
  * @param {Date|Number} date - the date to be changed
6555
- * @param {Number} amount - the amount of days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
6556
- * @returns {Date} the new date with the days subtracted
6640
+ * @param {Number} year - the year of the new date
6641
+ * @returns {Date} the new date with the year set
6557
6642
  * @throws {TypeError} 2 arguments required
6558
6643
  *
6559
6644
  * @example
6560
- * // Subtract 10 days from 1 September 2014:
6561
- * const result = subDays(new Date(2014, 8, 1), 10)
6562
- * //=> Fri Aug 22 2014 00:00:00
6645
+ * // Set year 2013 to 1 September 2014:
6646
+ * const result = setYear(new Date(2014, 8, 1), 2013)
6647
+ * //=> Sun Sep 01 2013 00:00:00
6563
6648
  */
6564
- function subDays(dirtyDate, dirtyAmount) {
6649
+ function setYear(dirtyDate, dirtyYear) {
6565
6650
  requiredArgs(2, arguments);
6566
- var amount = toInteger(dirtyAmount);
6567
- return addDays(dirtyDate, -amount);
6651
+ var date = toDate(dirtyDate);
6652
+ var year = toInteger(dirtyYear);
6653
+
6654
+ // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date
6655
+ if (isNaN(date.getTime())) {
6656
+ return new Date(NaN);
6657
+ }
6658
+ date.setFullYear(year);
6659
+ return date;
6660
+ }
6661
+
6662
+ var parseGuests = function (_a) {
6663
+ var guestLabel = _a.guestLabel, guestsLabel = _a.guestsLabel, guestsPlaceholder = _a.guestsPlaceholder, ageCategoryCounts = _a.ageCategoryCounts, ageCategories = _a.ageCategories;
6664
+ var parsedData = Object.entries(ageCategoryCounts).reduce(function (acc, _a) {
6665
+ var _b = __read(_a, 2), key = _b[0], value = _b[1];
6666
+ var parts = key.split('-');
6667
+ if (parts.length < 2)
6668
+ return acc;
6669
+ var ageCategoryId = parts[1];
6670
+ var ageCategory = ageCategories === null || ageCategories === void 0 ? void 0 : ageCategories.find(function (c) { return c.id === ageCategoryId; });
6671
+ if (ageCategory && value) {
6672
+ return {
6673
+ total: acc.total + value,
6674
+ html: __spreadArray$1(__spreadArray$1([], __read(acc.html), false), ["".concat(value)], false),
6675
+ };
6676
+ }
6677
+ return acc;
6678
+ }, { total: 0, html: [] });
6679
+ if (!parsedData.total) {
6680
+ return {
6681
+ content: guestsPlaceholder,
6682
+ data: parsedData,
6683
+ };
6684
+ }
6685
+ var breakdown = parsedData.html.length > 1 ? parsedData.html.join(' + ') : null;
6686
+ return {
6687
+ content: (React__default.createElement(React__default.Fragment, null,
6688
+ React__default.createElement("span", { className: "will-guest-count" }, parsedData.total),
6689
+ ' ',
6690
+ parsedData.total > 1 ? guestsLabel : guestLabel,
6691
+ breakdown && React__default.createElement(React__default.Fragment, null,
6692
+ " \u00A0 ( ",
6693
+ breakdown,
6694
+ " )"))),
6695
+ data: parsedData,
6696
+ };
6697
+ };
6698
+
6699
+ var parseLocations = function (_a) {
6700
+ var selectedLocations = _a.selectedLocations, locationsPlaceholder = _a.locationsPlaceholder, _b = _a.locationsSelectedLabel, locationsSelectedLabel = _b === void 0 ? 'locations' : _b;
6701
+ if (!selectedLocations.length) {
6702
+ return locationsPlaceholder;
6703
+ }
6704
+ if (selectedLocations.length === 1) {
6705
+ var singleSelection = selectedLocations[0].label;
6706
+ if (!singleSelection) {
6707
+ return locationsPlaceholder;
6708
+ }
6709
+ return singleSelection;
6710
+ }
6711
+ return "".concat(selectedLocations.length, " ").concat(locationsSelectedLabel);
6712
+ };
6713
+
6714
+ var ageCategoryRules = function (_a) {
6715
+ var ageCategoryCounts = _a.ageCategoryCounts, ageCategories = _a.ageCategories;
6716
+ if (ageCategories === null || ageCategories === void 0 ? void 0 : ageCategories.length) {
6717
+ ageCategories === null || ageCategories === void 0 ? void 0 : ageCategories.map(function (a) {
6718
+ if (a.minVal) {
6719
+ var ageCategory = ageCategoryCounts["guests-".concat(a.id)];
6720
+ if (!ageCategory) {
6721
+ ageCategoryCounts["guests-".concat(a.id)] = a.minVal;
6722
+ }
6723
+ }
6724
+ });
6725
+ }
6726
+ return Object.entries(ageCategoryCounts).length
6727
+ ? JSON.stringify(ageCategoryCounts)
6728
+ : '';
6729
+ };
6730
+
6731
+ var useFilterActions = function (_a) {
6732
+ var tabs = _a.tabs, calendarRange = _a.calendarRange, ageCategoryCounts = _a.ageCategoryCounts, ageCategories = _a.ageCategories, selectedLocations = _a.selectedLocations, selectedPath = _a.selectedPath, redirectUrl = _a.redirectUrl, setSelectedPath = _a.setSelectedPath, setAgeCategoryCounts = _a.setAgeCategoryCounts, setSelectedFilter = _a.setSelectedFilter, setCalendarRange = _a.setCalendarRange, onSubmit = _a.onSubmit, setInnerLoading = _a.setInnerLoading;
6733
+ useEffect(function () {
6734
+ if (typeof window === 'undefined')
6735
+ return;
6736
+ var defaultTab = (tabs === null || tabs === void 0 ? void 0 : tabs.length) === 1 ? tabs[0] : tabs === null || tabs === void 0 ? void 0 : tabs.find(function (tab) { return tab.default; });
6737
+ var paths = [Pages.EVENTS, Pages.ROOMS, Pages.SALES];
6738
+ var currentPath = paths.find(function (path) { return window.location.pathname.includes(path); }) ||
6739
+ (defaultTab === null || defaultTab === void 0 ? void 0 : defaultTab.path) ||
6740
+ Pages.EVENTS;
6741
+ setSelectedPath(currentPath);
6742
+ }, [tabs]);
6743
+ var updateGuestsCount = function (id, newCount) {
6744
+ setAgeCategoryCounts(function (prev) {
6745
+ var _a;
6746
+ return (__assign$2(__assign$2({}, prev), (_a = {}, _a[id] = newCount, _a)));
6747
+ });
6748
+ };
6749
+ var handleSelectedFilter = function (id) {
6750
+ setSelectedFilter(id);
6751
+ };
6752
+ var handleSubmit = function () {
6753
+ var e_1, _a;
6754
+ if (typeof window === 'undefined')
6755
+ return;
6756
+ var newParams = {
6757
+ startDate: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from)
6758
+ ? format(calendarRange.from, 'yyyy-MM-dd')
6759
+ : '',
6760
+ endDate: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) ? format(calendarRange.to, 'yyyy-MM-dd') : '',
6761
+ ageCategoryCounts: ageCategoryRules({
6762
+ ageCategoryCounts: ageCategoryCounts,
6763
+ ageCategories: ageCategories,
6764
+ }),
6765
+ selectedLocations: selectedLocations
6766
+ .map(function (l) { return l.id.toString(); })
6767
+ .join(','),
6768
+ };
6769
+ var querySearchParams = new URLSearchParams();
6770
+ try {
6771
+ for (var _b = __values(Object.entries(newParams)), _c = _b.next(); !_c.done; _c = _b.next()) {
6772
+ var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
6773
+ if (!value)
6774
+ continue;
6775
+ if (key === 'selectedLocations' && selectedLocations.length) {
6776
+ selectedLocations.forEach(function (location) {
6777
+ return querySearchParams.append('locationId', location.id.toString());
6778
+ });
6779
+ }
6780
+ else {
6781
+ querySearchParams.append(key, value.toString());
6782
+ }
6783
+ }
6784
+ }
6785
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
6786
+ finally {
6787
+ try {
6788
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
6789
+ }
6790
+ finally { if (e_1) throw e_1.error; }
6791
+ }
6792
+ setSelectedFilter(false);
6793
+ if (onSubmit && window.location.href.includes(selectedPath)) {
6794
+ onSubmit(newParams);
6795
+ return;
6796
+ }
6797
+ var paramString = querySearchParams.toString();
6798
+ var path = "".concat(redirectUrl).concat(selectedPath);
6799
+ setInnerLoading(true);
6800
+ window.location.href = paramString ? "".concat(path, "?").concat(paramString) : path;
6801
+ };
6802
+ var handleResetFilters = function () {
6803
+ setAgeCategoryCounts({});
6804
+ setCalendarRange(undefined);
6805
+ };
6806
+ return {
6807
+ updateGuestsCount: updateGuestsCount,
6808
+ handleSelectedFilter: handleSelectedFilter,
6809
+ handleSubmit: handleSubmit,
6810
+ handleResetFilters: handleResetFilters,
6811
+ };
6812
+ };
6813
+
6814
+ var useFilterUi = function (selectedFilter) {
6815
+ var buttonRefs = useRef({});
6816
+ var panelRef = useRef(null);
6817
+ var previouslyFocusedButtonRef = useRef(null);
6818
+ var _a = useScrollInToView({ selectedFilter: selectedFilter }), isMobile = _a.isMobile, targetFilterBarRef = _a.targetFilterBarRef;
6819
+ return {
6820
+ previouslyFocusedButtonRef: previouslyFocusedButtonRef,
6821
+ isMobile: isMobile,
6822
+ targetFilterBarRef: targetFilterBarRef,
6823
+ panelRef: panelRef,
6824
+ buttonRefs: buttonRefs,
6825
+ };
6826
+ };
6827
+
6828
+ var usePanelPosition = function (_a) {
6829
+ var selectedFilter = _a.selectedFilter, panelRef = _a.panelRef, targetFilterBarRef = _a.targetFilterBarRef, buttonRefs = _a.buttonRefs, isMobile = _a.isMobile;
6830
+ var _b = __read(useState({}), 2), localStyles = _b[0], setLocalStyles = _b[1];
6831
+ useEffect(function () {
6832
+ if (!selectedFilter || typeof selectedFilter !== 'string' || isMobile) {
6833
+ setLocalStyles({});
6834
+ return;
6835
+ }
6836
+ var timeoutId = null;
6837
+ var calculate = function () {
6838
+ var panel = panelRef.current;
6839
+ var container = targetFilterBarRef.current;
6840
+ var button = buttonRefs.current[selectedFilter];
6841
+ if (!panel || !container || !button)
6842
+ return;
6843
+ var panelRect = panel.getBoundingClientRect();
6844
+ if (panelRect.width === 0) {
6845
+ timeoutId = window.setTimeout(calculate, 10);
6846
+ return;
6847
+ }
6848
+ var containerRect = container.getBoundingClientRect();
6849
+ var buttonRect = button.getBoundingClientRect();
6850
+ var buttonLeft = buttonRect.left - containerRect.left;
6851
+ var left = Math.min(buttonLeft, Math.max(containerRect.width - panelRect.width, 0));
6852
+ setLocalStyles({ left: left });
6853
+ };
6854
+ calculate();
6855
+ return function () {
6856
+ if (timeoutId)
6857
+ clearTimeout(timeoutId);
6858
+ };
6859
+ }, [selectedFilter, panelRef, targetFilterBarRef, buttonRefs, isMobile]);
6860
+ return { localStyles: localStyles };
6861
+ };
6862
+
6863
+ var FilterBarContext = createContext(undefined);
6864
+ var FilterBarProvider = function (_a) {
6865
+ var children = _a.children, language = _a.language, ageCategories = _a.ageCategories, redirectUrl = _a.redirectUrl, palette = _a.palette, onSubmit = _a.onSubmit, fullWidth = _a.fullWidth, disableCalendarDates = _a.disableCalendarDates, mode = _a.mode, tabs = _a.tabs, outerLoading = _a.outerLoading, locations = _a.locations;
6866
+ var _b = useFilterState({ locations: locations }), selectedPath = _b.selectedPath, selectedFilter = _b.selectedFilter, calendarRange = _b.calendarRange, innerLoading = _b.innerLoading, categories = _b.categories, ageCategoryCounts = _b.ageCategoryCounts, selectedLocations = _b.selectedLocations, setSelectedLocations = _b.setSelectedLocations, setCalendarRange = _b.setCalendarRange, setAgeCategoryCounts = _b.setAgeCategoryCounts, setCategories = _b.setCategories, setSelectedPath = _b.setSelectedPath, setSelectedFilter = _b.setSelectedFilter, setInnerLoading = _b.setInnerLoading;
6867
+ var filterActions = useFilterActions({
6868
+ tabs: tabs,
6869
+ ageCategoryCounts: ageCategoryCounts,
6870
+ ageCategories: ageCategories,
6871
+ selectedLocations: selectedLocations,
6872
+ selectedPath: selectedPath,
6873
+ redirectUrl: redirectUrl,
6874
+ setSelectedPath: setSelectedPath,
6875
+ setAgeCategoryCounts: setAgeCategoryCounts,
6876
+ setSelectedFilter: setSelectedFilter,
6877
+ setCalendarRange: setCalendarRange,
6878
+ onSubmit: onSubmit,
6879
+ setInnerLoading: setInnerLoading,
6880
+ });
6881
+ var filterUi = useFilterUi(selectedFilter);
6882
+ var contextValue = useMemo(function () { return (__assign$2(__assign$2(__assign$2({ selectedFilter: selectedFilter, ageCategoryCounts: ageCategoryCounts, categories: categories, calendarRange: calendarRange, selectedPath: selectedPath, innerLoading: innerLoading, selectedLocations: selectedLocations, setSelectedLocations: setSelectedLocations, setCalendarRange: setCalendarRange, setSelectedFilter: setSelectedFilter, setAgeCategoryCounts: setAgeCategoryCounts, setCategories: setCategories, setSelectedPath: setSelectedPath }, filterActions), { language: language, ageCategories: ageCategories, redirectUrl: redirectUrl, palette: palette, onSubmit: onSubmit, fullWidth: fullWidth, disableCalendarDates: disableCalendarDates, mode: mode, tabs: tabs, outerLoading: outerLoading, locations: locations }), filterUi)); }, [
6883
+ selectedFilter,
6884
+ ageCategoryCounts,
6885
+ categories,
6886
+ calendarRange,
6887
+ selectedPath,
6888
+ innerLoading,
6889
+ selectedLocations,
6890
+ language,
6891
+ ageCategories,
6892
+ redirectUrl,
6893
+ palette,
6894
+ onSubmit,
6895
+ fullWidth,
6896
+ disableCalendarDates,
6897
+ mode,
6898
+ tabs,
6899
+ outerLoading,
6900
+ locations,
6901
+ filterUi.isMobile,
6902
+ filterUi.targetFilterBarRef,
6903
+ ]);
6904
+ return (React__default.createElement(FilterBarContext.Provider, { value: contextValue }, children));
6905
+ };
6906
+ var useFilterBar = function () {
6907
+ var context = useContext(FilterBarContext);
6908
+ if (!context) {
6909
+ throw new Error('useFilterBar must be used within FilterBarProvider');
6910
+ }
6911
+ return context;
6912
+ };
6913
+
6914
+ var DefaultContext = {
6915
+ color: undefined,
6916
+ size: undefined,
6917
+ className: undefined,
6918
+ style: undefined,
6919
+ attr: undefined
6920
+ };
6921
+ var IconContext = React__default.createContext && React__default.createContext(DefaultContext);
6922
+
6923
+ var __assign$1 = undefined && undefined.__assign || function () {
6924
+ __assign$1 = Object.assign || function (t) {
6925
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
6926
+ s = arguments[i];
6927
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
6928
+ }
6929
+ return t;
6930
+ };
6931
+ return __assign$1.apply(this, arguments);
6932
+ };
6933
+ var __rest$1 = undefined && undefined.__rest || function (s, e) {
6934
+ var t = {};
6935
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
6936
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
6937
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
6938
+ }
6939
+ return t;
6940
+ };
6941
+ function Tree2Element(tree) {
6942
+ return tree && tree.map(function (node, i) {
6943
+ return React__default.createElement(node.tag, __assign$1({
6944
+ key: i
6945
+ }, node.attr), Tree2Element(node.child));
6946
+ });
6947
+ }
6948
+ function GenIcon(data) {
6949
+ // eslint-disable-next-line react/display-name
6950
+ return function (props) {
6951
+ return React__default.createElement(IconBase, __assign$1({
6952
+ attr: __assign$1({}, data.attr)
6953
+ }, props), Tree2Element(data.child));
6954
+ };
6955
+ }
6956
+ function IconBase(props) {
6957
+ var elem = function (conf) {
6958
+ var attr = props.attr,
6959
+ size = props.size,
6960
+ title = props.title,
6961
+ svgProps = __rest$1(props, ["attr", "size", "title"]);
6962
+ var computedSize = size || conf.size || "1em";
6963
+ var className;
6964
+ if (conf.className) className = conf.className;
6965
+ if (props.className) className = (className ? className + " " : "") + props.className;
6966
+ return React__default.createElement("svg", __assign$1({
6967
+ stroke: "currentColor",
6968
+ fill: "currentColor",
6969
+ strokeWidth: "0"
6970
+ }, conf.attr, attr, svgProps, {
6971
+ className: className,
6972
+ style: __assign$1(__assign$1({
6973
+ color: props.color || conf.color
6974
+ }, conf.style), props.style),
6975
+ height: computedSize,
6976
+ width: computedSize,
6977
+ xmlns: "http://www.w3.org/2000/svg"
6978
+ }), title && React__default.createElement("title", null, title), props.children);
6979
+ };
6980
+ return IconContext !== undefined ? React__default.createElement(IconContext.Consumer, null, function (conf) {
6981
+ return elem(conf);
6982
+ }) : elem(DefaultContext);
6568
6983
  }
6569
6984
 
6570
- /**
6571
- * @name setMonth
6572
- * @category Month Helpers
6573
- * @summary Set the month to the given date.
6574
- *
6575
- * @description
6576
- * Set the month to the given date.
6577
- *
6578
- * @param {Date|Number} date - the date to be changed
6579
- * @param {Number} month - the month of the new date
6580
- * @returns {Date} the new date with the month set
6581
- * @throws {TypeError} 2 arguments required
6582
- *
6583
- * @example
6584
- * // Set February to 1 September 2014:
6585
- * const result = setMonth(new Date(2014, 8, 1), 1)
6586
- * //=> Sat Feb 01 2014 00:00:00
6587
- */
6588
- function setMonth(dirtyDate, dirtyMonth) {
6589
- requiredArgs(2, arguments);
6590
- var date = toDate(dirtyDate);
6591
- var month = toInteger(dirtyMonth);
6592
- var year = date.getFullYear();
6593
- var day = date.getDate();
6594
- var dateWithDesiredMonth = new Date(0);
6595
- dateWithDesiredMonth.setFullYear(year, month, 15);
6596
- dateWithDesiredMonth.setHours(0, 0, 0, 0);
6597
- var daysInMonth = getDaysInMonth(dateWithDesiredMonth);
6598
- // Set the last day of the new month
6599
- // if the original date was the last day of the longer month
6600
- date.setMonth(month, Math.min(day, daysInMonth));
6601
- return date;
6985
+ // THIS FILE IS AUTO GENERATED
6986
+ function FaSearch (props) {
6987
+ return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 512 512"},"child":[{"tag":"path","attr":{"d":"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"}}]})(props);
6988
+ }function FaSpinner (props) {
6989
+ return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 512 512"},"child":[{"tag":"path","attr":{"d":"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"}}]})(props);
6602
6990
  }
6603
6991
 
6604
- /**
6605
- * @name setYear
6606
- * @category Year Helpers
6607
- * @summary Set the year to the given date.
6608
- *
6609
- * @description
6610
- * Set the year to the given date.
6611
- *
6612
- * @param {Date|Number} date - the date to be changed
6613
- * @param {Number} year - the year of the new date
6614
- * @returns {Date} the new date with the year set
6615
- * @throws {TypeError} 2 arguments required
6616
- *
6617
- * @example
6618
- * // Set year 2013 to 1 September 2014:
6619
- * const result = setYear(new Date(2014, 8, 1), 2013)
6620
- * //=> Sun Sep 01 2013 00:00:00
6621
- */
6622
- function setYear(dirtyDate, dirtyYear) {
6623
- requiredArgs(2, arguments);
6624
- var date = toDate(dirtyDate);
6625
- var year = toInteger(dirtyYear);
6992
+ var css_248z$g = ".will-filter-bar-submit-button {\n width: auto;\n height: auto;\n padding: 10px 20px;\n border-radius: 20px;\n cursor: pointer;\n border: none;\n white-space: nowrap;\n text-transform: uppercase;\n font-size: 12px;\n display: flex;\n align-items: center;\n user-select: none;\n}\n\n/* Submit button variants */\n.will-filter-bar-submit-button.default {\n background-color: var(--will-primary);\n color: var(--will-white);\n}\n\n.will-filter-bar-submit-button.text {\n background-color: transparent;\n color: var(--will-black);\n text-decoration: underline;\n font-weight: 500;\n font-size: 15px;\n padding: 0 10px;\n}\n\n.will-filter-bar-submit-button span {\n margin-right: 10px;\n display: flex;\n}\n\nbutton.will-filter-bar-submit-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n\n@media (max-width: 960px) {\n .will-filter-bar-submit-button {\n justify-content: center;\n \n }\n}\n\n/* --- */\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n";
6993
+ styleInject(css_248z$g);
6626
6994
 
6627
- // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date
6628
- if (isNaN(date.getTime())) {
6629
- return new Date(NaN);
6630
- }
6631
- date.setFullYear(year);
6632
- return date;
6995
+ var SubmitButton = function (_a) {
6996
+ var onClick = _a.onClick, startIcon = _a.startIcon, label = _a.label, disabled = _a.disabled, isLoading = _a.isLoading, variant = _a.variant;
6997
+ return (React__default.createElement("button", { className: "will-filter-bar-submit-button ".concat(variant || 'default'), onClick: onClick, disabled: disabled || isLoading },
6998
+ isLoading ? (React__default.createElement("span", null, React__default.createElement(FaSpinner, { style: { animation: 'spin 1s linear infinite' } }))) : (startIcon && React__default.createElement("span", null, startIcon)),
6999
+ label || 'Label'));
7000
+ };
7001
+
7002
+ // THIS FILE IS AUTO GENERATED
7003
+ function IoIosCloseCircleOutline (props) {
7004
+ return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 512 512"},"child":[{"tag":"path","attr":{"d":"M331.3 308.7L278.6 256l52.7-52.7c6.2-6.2 6.2-16.4 0-22.6-6.2-6.2-16.4-6.2-22.6 0L256 233.4l-52.7-52.7c-6.2-6.2-15.6-7.1-22.6 0-7.1 7.1-6 16.6 0 22.6l52.7 52.7-52.7 52.7c-6.7 6.7-6.4 16.3 0 22.6 6.4 6.4 16.4 6.2 22.6 0l52.7-52.7 52.7 52.7c6.2 6.2 16.4 6.2 22.6 0 6.3-6.2 6.3-16.4 0-22.6z"}},{"tag":"path","attr":{"d":"M256 76c48.1 0 93.3 18.7 127.3 52.7S436 207.9 436 256s-18.7 93.3-52.7 127.3S304.1 436 256 436c-48.1 0-93.3-18.7-127.3-52.7S76 304.1 76 256s18.7-93.3 52.7-127.3S207.9 76 256 76m0-28C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48z"}}]})(props);
6633
7005
  }
6634
7006
 
7007
+ var css_248z$f = ".will-filter-bar-close-button {\n width: auto;\n height: auto;\n /* background-color: var(--will-grey); */\n color: var(--will-grey);\n padding: 2px 7px;\n border-radius: 50%;\n cursor: pointer;\n border: none;\n display: flex;\n align-items: center;\n font-size: 23px;\n /* display: none; */\n\n position: absolute;\n top: 10px;\n right: 10px;\n\n min-height: 35px;\n}\n\n@media (max-width: 960px) {\n .will-filter-bar-close-button {\n top: 10px;\n right: 10px;\n\n border-radius: 25px;\n margin-left:0;\n \n display: flex;\n justify-content: center;\n }\n}\n";
7008
+ styleInject(css_248z$f);
7009
+
7010
+ var CloseButton = function (_a) {
7011
+ var handleClose = _a.handleClose;
7012
+ return (React__default.createElement("button", { className: "will-filter-bar-close-button", onClick: handleClose },
7013
+ React__default.createElement(IoIosCloseCircleOutline, null)));
7014
+ };
7015
+
6635
7016
  function futureSeconds(text) {
6636
7017
  return text.replace(/sekuntia?/, 'sekunnin');
6637
7018
  }
@@ -7320,7 +7701,7 @@ function DayPickerProvider(props) {
7320
7701
  onSelect = initialProps.onSelect;
7321
7702
  }
7322
7703
  var value = __assign(__assign(__assign({}, defaultContextValues), initialProps), { captionLayout: captionLayout, classNames: __assign(__assign({}, defaultContextValues.classNames), initialProps.classNames), components: __assign({}, initialProps.components), formatters: __assign(__assign({}, defaultContextValues.formatters), initialProps.formatters), fromDate: fromDate, labels: __assign(__assign({}, defaultContextValues.labels), initialProps.labels), mode: initialProps.mode || defaultContextValues.mode, modifiers: __assign(__assign({}, defaultContextValues.modifiers), initialProps.modifiers), modifiersClassNames: __assign(__assign({}, defaultContextValues.modifiersClassNames), initialProps.modifiersClassNames), onSelect: onSelect, styles: __assign(__assign({}, defaultContextValues.styles), initialProps.styles), toDate: toDate });
7323
- return (React__default__default.createElement(DayPickerContext.Provider, { value: value }, props.children));
7704
+ return (React__default.createElement(DayPickerContext.Provider, { value: value }, props.children));
7324
7705
  }
7325
7706
  /**
7326
7707
  * Hook to access the {@link DayPickerContextValue}.
@@ -7339,15 +7720,15 @@ function useDayPicker() {
7339
7720
  /** Render the caption for the displayed month. This component is used when `captionLayout="buttons"`. */
7340
7721
  function CaptionLabel(props) {
7341
7722
  var _a = useDayPicker(), locale = _a.locale, classNames = _a.classNames, styles = _a.styles, formatCaption = _a.formatters.formatCaption;
7342
- return (React__default__default.createElement("div", { className: classNames.caption_label, style: styles.caption_label, "aria-live": "polite", role: "presentation", id: props.id }, formatCaption(props.displayMonth, { locale: locale })));
7723
+ return (React__default.createElement("div", { className: classNames.caption_label, style: styles.caption_label, "aria-live": "polite", role: "presentation", id: props.id }, formatCaption(props.displayMonth, { locale: locale })));
7343
7724
  }
7344
7725
 
7345
7726
  /**
7346
7727
  * Render the icon in the styled drop-down.
7347
7728
  */
7348
7729
  function IconDropdown(props) {
7349
- return (React__default__default.createElement("svg", __assign({ width: "8px", height: "8px", viewBox: "0 0 120 120", "data-testid": "iconDropdown" }, props),
7350
- React__default__default.createElement("path", { d: "M4.22182541,48.2218254 C8.44222828,44.0014225 15.2388494,43.9273804 19.5496459,47.9996989 L19.7781746,48.2218254 L60,88.443 L100.221825,48.2218254 C104.442228,44.0014225 111.238849,43.9273804 115.549646,47.9996989 L115.778175,48.2218254 C119.998577,52.4422283 120.07262,59.2388494 116.000301,63.5496459 L115.778175,63.7781746 L67.7781746,111.778175 C63.5577717,115.998577 56.7611506,116.07262 52.4503541,112.000301 L52.2218254,111.778175 L4.22182541,63.7781746 C-0.0739418023,59.4824074 -0.0739418023,52.5175926 4.22182541,48.2218254 Z", fill: "currentColor", fillRule: "nonzero" })));
7730
+ return (React__default.createElement("svg", __assign({ width: "8px", height: "8px", viewBox: "0 0 120 120", "data-testid": "iconDropdown" }, props),
7731
+ React__default.createElement("path", { d: "M4.22182541,48.2218254 C8.44222828,44.0014225 15.2388494,43.9273804 19.5496459,47.9996989 L19.7781746,48.2218254 L60,88.443 L100.221825,48.2218254 C104.442228,44.0014225 111.238849,43.9273804 115.549646,47.9996989 L115.778175,48.2218254 C119.998577,52.4422283 120.07262,59.2388494 116.000301,63.5496459 L115.778175,63.7781746 L67.7781746,111.778175 C63.5577717,115.998577 56.7611506,116.07262 52.4503541,112.000301 L52.2218254,111.778175 L4.22182541,63.7781746 C-0.0739418023,59.4824074 -0.0739418023,52.5175926 4.22182541,48.2218254 Z", fill: "currentColor", fillRule: "nonzero" })));
7351
7732
  }
7352
7733
 
7353
7734
  /**
@@ -7359,12 +7740,12 @@ function Dropdown(props) {
7359
7740
  var onChange = props.onChange, value = props.value, children = props.children, caption = props.caption, className = props.className, style = props.style;
7360
7741
  var dayPicker = useDayPicker();
7361
7742
  var IconDropdownComponent = (_b = (_a = dayPicker.components) === null || _a === void 0 ? void 0 : _a.IconDropdown) !== null && _b !== void 0 ? _b : IconDropdown;
7362
- return (React__default__default.createElement("div", { className: className, style: style },
7363
- React__default__default.createElement("span", { className: dayPicker.classNames.vhidden }, props['aria-label']),
7364
- React__default__default.createElement("select", { name: props.name, "aria-label": props['aria-label'], className: dayPicker.classNames.dropdown, style: dayPicker.styles.dropdown, value: value, onChange: onChange }, children),
7365
- React__default__default.createElement("div", { className: dayPicker.classNames.caption_label, style: dayPicker.styles.caption_label, "aria-hidden": "true" },
7743
+ return (React__default.createElement("div", { className: className, style: style },
7744
+ React__default.createElement("span", { className: dayPicker.classNames.vhidden }, props['aria-label']),
7745
+ React__default.createElement("select", { name: props.name, "aria-label": props['aria-label'], className: dayPicker.classNames.dropdown, style: dayPicker.styles.dropdown, value: value, onChange: onChange }, children),
7746
+ React__default.createElement("div", { className: dayPicker.classNames.caption_label, style: dayPicker.styles.caption_label, "aria-hidden": "true" },
7366
7747
  caption,
7367
- React__default__default.createElement(IconDropdownComponent, { className: dayPicker.classNames.dropdown_icon, style: dayPicker.styles.dropdown_icon }))));
7748
+ React__default.createElement(IconDropdownComponent, { className: dayPicker.classNames.dropdown_icon, style: dayPicker.styles.dropdown_icon }))));
7368
7749
  }
7369
7750
 
7370
7751
  /** Render the dropdown to navigate between months. */
@@ -7373,9 +7754,9 @@ function MonthsDropdown(props) {
7373
7754
  var _b = useDayPicker(), fromDate = _b.fromDate, toDate = _b.toDate, styles = _b.styles, locale = _b.locale, formatMonthCaption = _b.formatters.formatMonthCaption, classNames = _b.classNames, components = _b.components, labelMonthDropdown = _b.labels.labelMonthDropdown;
7374
7755
  // Dropdown should appear only when both from/toDate is set
7375
7756
  if (!fromDate)
7376
- return React__default__default.createElement(React__default__default.Fragment, null);
7757
+ return React__default.createElement(React__default.Fragment, null);
7377
7758
  if (!toDate)
7378
- return React__default__default.createElement(React__default__default.Fragment, null);
7759
+ return React__default.createElement(React__default.Fragment, null);
7379
7760
  var dropdownMonths = [];
7380
7761
  if (isSameYear(fromDate, toDate)) {
7381
7762
  // only display the months included in the range
@@ -7397,7 +7778,7 @@ function MonthsDropdown(props) {
7397
7778
  props.onChange(newMonth);
7398
7779
  };
7399
7780
  var DropdownComponent = (_a = components === null || components === void 0 ? void 0 : components.Dropdown) !== null && _a !== void 0 ? _a : Dropdown;
7400
- return (React__default__default.createElement(DropdownComponent, { name: "months", "aria-label": labelMonthDropdown(), className: classNames.dropdown_month, style: styles.dropdown_month, onChange: handleChange, value: props.displayMonth.getMonth(), caption: formatMonthCaption(props.displayMonth, { locale: locale }) }, dropdownMonths.map(function (m) { return (React__default__default.createElement("option", { key: m.getMonth(), value: m.getMonth() }, formatMonthCaption(m, { locale: locale }))); })));
7781
+ return (React__default.createElement(DropdownComponent, { name: "months", "aria-label": labelMonthDropdown(), className: classNames.dropdown_month, style: styles.dropdown_month, onChange: handleChange, value: props.displayMonth.getMonth(), caption: formatMonthCaption(props.displayMonth, { locale: locale }) }, dropdownMonths.map(function (m) { return (React__default.createElement("option", { key: m.getMonth(), value: m.getMonth() }, formatMonthCaption(m, { locale: locale }))); })));
7401
7782
  }
7402
7783
 
7403
7784
  /**
@@ -7411,9 +7792,9 @@ function YearsDropdown(props) {
7411
7792
  var years = [];
7412
7793
  // Dropdown should appear only when both from/toDate is set
7413
7794
  if (!fromDate)
7414
- return React__default__default.createElement(React__default__default.Fragment, null);
7795
+ return React__default.createElement(React__default.Fragment, null);
7415
7796
  if (!toDate)
7416
- return React__default__default.createElement(React__default__default.Fragment, null);
7797
+ return React__default.createElement(React__default.Fragment, null);
7417
7798
  var fromYear = fromDate.getFullYear();
7418
7799
  var toYear = toDate.getFullYear();
7419
7800
  for (var year = fromYear; year <= toYear; year++) {
@@ -7424,7 +7805,7 @@ function YearsDropdown(props) {
7424
7805
  props.onChange(newMonth);
7425
7806
  };
7426
7807
  var DropdownComponent = (_a = components === null || components === void 0 ? void 0 : components.Dropdown) !== null && _a !== void 0 ? _a : Dropdown;
7427
- return (React__default__default.createElement(DropdownComponent, { name: "years", "aria-label": labelYearDropdown(), className: classNames.dropdown_year, style: styles.dropdown_year, onChange: handleChange, value: displayMonth.getFullYear(), caption: formatYearCaption(displayMonth, { locale: locale }) }, years.map(function (year) { return (React__default__default.createElement("option", { key: year.getFullYear(), value: year.getFullYear() }, formatYearCaption(year, { locale: locale }))); })));
7808
+ return (React__default.createElement(DropdownComponent, { name: "years", "aria-label": labelYearDropdown(), className: classNames.dropdown_year, style: styles.dropdown_year, onChange: handleChange, value: displayMonth.getFullYear(), caption: formatYearCaption(displayMonth, { locale: locale }) }, years.map(function (year) { return (React__default.createElement("option", { key: year.getFullYear(), value: year.getFullYear() }, formatYearCaption(year, { locale: locale }))); })));
7428
7809
  }
7429
7810
 
7430
7811
  /**
@@ -7588,7 +7969,7 @@ function NavigationProvider(props) {
7588
7969
  nextMonth: nextMonth,
7589
7970
  isDateDisplayed: isDateDisplayed
7590
7971
  };
7591
- return (React__default__default.createElement(NavigationContext.Provider, { value: value }, props.children));
7972
+ return (React__default.createElement(NavigationContext.Provider, { value: value }, props.children));
7592
7973
  }
7593
7974
  /**
7594
7975
  * Hook to access the {@link NavigationContextValue}. Use this hook to navigate
@@ -7615,27 +7996,27 @@ function CaptionDropdowns(props) {
7615
7996
  goToMonth(newMonth);
7616
7997
  };
7617
7998
  var CaptionLabelComponent = (_a = components === null || components === void 0 ? void 0 : components.CaptionLabel) !== null && _a !== void 0 ? _a : CaptionLabel;
7618
- var captionLabel = (React__default__default.createElement(CaptionLabelComponent, { id: props.id, displayMonth: props.displayMonth }));
7619
- return (React__default__default.createElement("div", { className: classNames.caption_dropdowns, style: styles.caption_dropdowns },
7620
- React__default__default.createElement("div", { className: classNames.vhidden }, captionLabel),
7621
- React__default__default.createElement(MonthsDropdown, { onChange: handleMonthChange, displayMonth: props.displayMonth }),
7622
- React__default__default.createElement(YearsDropdown, { onChange: handleMonthChange, displayMonth: props.displayMonth })));
7999
+ var captionLabel = (React__default.createElement(CaptionLabelComponent, { id: props.id, displayMonth: props.displayMonth }));
8000
+ return (React__default.createElement("div", { className: classNames.caption_dropdowns, style: styles.caption_dropdowns },
8001
+ React__default.createElement("div", { className: classNames.vhidden }, captionLabel),
8002
+ React__default.createElement(MonthsDropdown, { onChange: handleMonthChange, displayMonth: props.displayMonth }),
8003
+ React__default.createElement(YearsDropdown, { onChange: handleMonthChange, displayMonth: props.displayMonth })));
7623
8004
  }
7624
8005
 
7625
8006
  /**
7626
8007
  * Render the "previous month" button in the navigation.
7627
8008
  */
7628
8009
  function IconLeft(props) {
7629
- return (React__default__default.createElement("svg", __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props),
7630
- React__default__default.createElement("path", { d: "M69.490332,3.34314575 C72.6145263,0.218951416 77.6798462,0.218951416 80.8040405,3.34314575 C83.8617626,6.40086786 83.9268205,11.3179931 80.9992143,14.4548388 L80.8040405,14.6568542 L35.461,60 L80.8040405,105.343146 C83.8617626,108.400868 83.9268205,113.317993 80.9992143,116.454839 L80.8040405,116.656854 C77.7463184,119.714576 72.8291931,119.779634 69.6923475,116.852028 L69.490332,116.656854 L18.490332,65.6568542 C15.4326099,62.5991321 15.367552,57.6820069 18.2951583,54.5451612 L18.490332,54.3431458 L69.490332,3.34314575 Z", fill: "currentColor", fillRule: "nonzero" })));
8010
+ return (React__default.createElement("svg", __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props),
8011
+ React__default.createElement("path", { d: "M69.490332,3.34314575 C72.6145263,0.218951416 77.6798462,0.218951416 80.8040405,3.34314575 C83.8617626,6.40086786 83.9268205,11.3179931 80.9992143,14.4548388 L80.8040405,14.6568542 L35.461,60 L80.8040405,105.343146 C83.8617626,108.400868 83.9268205,113.317993 80.9992143,116.454839 L80.8040405,116.656854 C77.7463184,119.714576 72.8291931,119.779634 69.6923475,116.852028 L69.490332,116.656854 L18.490332,65.6568542 C15.4326099,62.5991321 15.367552,57.6820069 18.2951583,54.5451612 L18.490332,54.3431458 L69.490332,3.34314575 Z", fill: "currentColor", fillRule: "nonzero" })));
7631
8012
  }
7632
8013
 
7633
8014
  /**
7634
8015
  * Render the "next month" button in the navigation.
7635
8016
  */
7636
8017
  function IconRight(props) {
7637
- return (React__default__default.createElement("svg", __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props),
7638
- React__default__default.createElement("path", { d: "M49.8040405,3.34314575 C46.6798462,0.218951416 41.6145263,0.218951416 38.490332,3.34314575 C35.4326099,6.40086786 35.367552,11.3179931 38.2951583,14.4548388 L38.490332,14.6568542 L83.8333725,60 L38.490332,105.343146 C35.4326099,108.400868 35.367552,113.317993 38.2951583,116.454839 L38.490332,116.656854 C41.5480541,119.714576 46.4651794,119.779634 49.602025,116.852028 L49.8040405,116.656854 L100.804041,65.6568542 C103.861763,62.5991321 103.926821,57.6820069 100.999214,54.5451612 L100.804041,54.3431458 L49.8040405,3.34314575 Z", fill: "currentColor" })));
8018
+ return (React__default.createElement("svg", __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props),
8019
+ React__default.createElement("path", { d: "M49.8040405,3.34314575 C46.6798462,0.218951416 41.6145263,0.218951416 38.490332,3.34314575 C35.4326099,6.40086786 35.367552,11.3179931 38.2951583,14.4548388 L38.490332,14.6568542 L83.8333725,60 L38.490332,105.343146 C35.4326099,108.400868 35.367552,113.317993 38.2951583,116.454839 L38.490332,116.656854 C41.5480541,119.714576 46.4651794,119.779634 49.602025,116.852028 L49.8040405,116.656854 L100.804041,65.6568542 C103.861763,62.5991321 103.926821,57.6820069 100.999214,54.5451612 L100.804041,54.3431458 L49.8040405,3.34314575 Z", fill: "currentColor" })));
7639
8020
  }
7640
8021
 
7641
8022
  /** Render a button HTML element applying the reset class name. */
@@ -7650,7 +8031,7 @@ var Button = forwardRef(function (props, ref) {
7650
8031
  if (props.style) {
7651
8032
  Object.assign(style, props.style);
7652
8033
  }
7653
- return (React__default__default.createElement("button", __assign({}, props, { ref: ref, type: "button", className: className, style: style })));
8034
+ return (React__default.createElement("button", __assign({}, props, { ref: ref, type: "button", className: className, style: style })));
7654
8035
  });
7655
8036
 
7656
8037
  /** A component rendering the navigation buttons or the drop-downs. */
@@ -7658,7 +8039,7 @@ function Navigation(props) {
7658
8039
  var _a, _b;
7659
8040
  var _c = useDayPicker(), dir = _c.dir, locale = _c.locale, classNames = _c.classNames, styles = _c.styles, _d = _c.labels, labelPrevious = _d.labelPrevious, labelNext = _d.labelNext, components = _c.components;
7660
8041
  if (!props.nextMonth && !props.previousMonth) {
7661
- return React__default__default.createElement(React__default__default.Fragment, null);
8042
+ return React__default.createElement(React__default.Fragment, null);
7662
8043
  }
7663
8044
  var previousLabel = labelPrevious(props.previousMonth, { locale: locale });
7664
8045
  var previousClassName = [
@@ -7672,9 +8053,9 @@ function Navigation(props) {
7672
8053
  ].join(' ');
7673
8054
  var IconRightComponent = (_a = components === null || components === void 0 ? void 0 : components.IconRight) !== null && _a !== void 0 ? _a : IconRight;
7674
8055
  var IconLeftComponent = (_b = components === null || components === void 0 ? void 0 : components.IconLeft) !== null && _b !== void 0 ? _b : IconLeft;
7675
- return (React__default__default.createElement("div", { className: classNames.nav, style: styles.nav },
7676
- !props.hidePrevious && (React__default__default.createElement(Button, { name: "previous-month", "aria-label": previousLabel, className: previousClassName, style: styles.nav_button_previous, disabled: !props.previousMonth, onClick: props.onPreviousClick }, dir === 'rtl' ? (React__default__default.createElement(IconRightComponent, { className: classNames.nav_icon, style: styles.nav_icon })) : (React__default__default.createElement(IconLeftComponent, { className: classNames.nav_icon, style: styles.nav_icon })))),
7677
- !props.hideNext && (React__default__default.createElement(Button, { name: "next-month", "aria-label": nextLabel, className: nextClassName, style: styles.nav_button_next, disabled: !props.nextMonth, onClick: props.onNextClick }, dir === 'rtl' ? (React__default__default.createElement(IconLeftComponent, { className: classNames.nav_icon, style: styles.nav_icon })) : (React__default__default.createElement(IconRightComponent, { className: classNames.nav_icon, style: styles.nav_icon }))))));
8056
+ return (React__default.createElement("div", { className: classNames.nav, style: styles.nav },
8057
+ !props.hidePrevious && (React__default.createElement(Button, { name: "previous-month", "aria-label": previousLabel, className: previousClassName, style: styles.nav_button_previous, disabled: !props.previousMonth, onClick: props.onPreviousClick }, dir === 'rtl' ? (React__default.createElement(IconRightComponent, { className: classNames.nav_icon, style: styles.nav_icon })) : (React__default.createElement(IconLeftComponent, { className: classNames.nav_icon, style: styles.nav_icon })))),
8058
+ !props.hideNext && (React__default.createElement(Button, { name: "next-month", "aria-label": nextLabel, className: nextClassName, style: styles.nav_button_next, disabled: !props.nextMonth, onClick: props.onNextClick }, dir === 'rtl' ? (React__default.createElement(IconLeftComponent, { className: classNames.nav_icon, style: styles.nav_icon })) : (React__default.createElement(IconRightComponent, { className: classNames.nav_icon, style: styles.nav_icon }))))));
7678
8059
  }
7679
8060
 
7680
8061
  /**
@@ -7700,7 +8081,7 @@ function CaptionNavigation(props) {
7700
8081
  return;
7701
8082
  goToMonth(nextMonth);
7702
8083
  };
7703
- return (React__default__default.createElement(Navigation, { displayMonth: props.displayMonth, hideNext: hideNext, hidePrevious: hidePrevious, nextMonth: nextMonth, previousMonth: previousMonth, onPreviousClick: handlePreviousClick, onNextClick: handleNextClick }));
8084
+ return (React__default.createElement(Navigation, { displayMonth: props.displayMonth, hideNext: hideNext, hidePrevious: hidePrevious, nextMonth: nextMonth, previousMonth: previousMonth, onPreviousClick: handlePreviousClick, onNextClick: handleNextClick }));
7704
8085
  }
7705
8086
 
7706
8087
  /**
@@ -7713,22 +8094,22 @@ function Caption(props) {
7713
8094
  var CaptionLabelComponent = (_a = components === null || components === void 0 ? void 0 : components.CaptionLabel) !== null && _a !== void 0 ? _a : CaptionLabel;
7714
8095
  var caption;
7715
8096
  if (disableNavigation) {
7716
- caption = (React__default__default.createElement(CaptionLabelComponent, { id: props.id, displayMonth: props.displayMonth }));
8097
+ caption = (React__default.createElement(CaptionLabelComponent, { id: props.id, displayMonth: props.displayMonth }));
7717
8098
  }
7718
8099
  else if (captionLayout === 'dropdown') {
7719
- caption = (React__default__default.createElement(CaptionDropdowns, { displayMonth: props.displayMonth, id: props.id }));
8100
+ caption = (React__default.createElement(CaptionDropdowns, { displayMonth: props.displayMonth, id: props.id }));
7720
8101
  }
7721
8102
  else if (captionLayout === 'dropdown-buttons') {
7722
- caption = (React__default__default.createElement(React__default__default.Fragment, null,
7723
- React__default__default.createElement(CaptionDropdowns, { displayMonth: props.displayMonth, id: props.id }),
7724
- React__default__default.createElement(CaptionNavigation, { displayMonth: props.displayMonth, id: props.id })));
8103
+ caption = (React__default.createElement(React__default.Fragment, null,
8104
+ React__default.createElement(CaptionDropdowns, { displayMonth: props.displayMonth, id: props.id }),
8105
+ React__default.createElement(CaptionNavigation, { displayMonth: props.displayMonth, id: props.id })));
7725
8106
  }
7726
8107
  else {
7727
- caption = (React__default__default.createElement(React__default__default.Fragment, null,
7728
- React__default__default.createElement(CaptionLabelComponent, { id: props.id, displayMonth: props.displayMonth }),
7729
- React__default__default.createElement(CaptionNavigation, { displayMonth: props.displayMonth, id: props.id })));
8108
+ caption = (React__default.createElement(React__default.Fragment, null,
8109
+ React__default.createElement(CaptionLabelComponent, { id: props.id, displayMonth: props.displayMonth }),
8110
+ React__default.createElement(CaptionNavigation, { displayMonth: props.displayMonth, id: props.id })));
7730
8111
  }
7731
- return (React__default__default.createElement("div", { className: classNames.caption, style: styles.caption }, caption));
8112
+ return (React__default.createElement("div", { className: classNames.caption, style: styles.caption }, caption));
7732
8113
  }
7733
8114
 
7734
8115
  /** Render the Footer component (empty as default).*/
@@ -7736,10 +8117,10 @@ function Caption(props) {
7736
8117
  function Footer$1(props) {
7737
8118
  var _a = useDayPicker(), footer = _a.footer, styles = _a.styles, tfoot = _a.classNames.tfoot;
7738
8119
  if (!footer)
7739
- return React__default__default.createElement(React__default__default.Fragment, null);
7740
- return (React__default__default.createElement("tfoot", { className: tfoot, style: styles.tfoot },
7741
- React__default__default.createElement("tr", null,
7742
- React__default__default.createElement("td", { colSpan: 8 }, footer))));
8120
+ return React__default.createElement(React__default.Fragment, null);
8121
+ return (React__default.createElement("tfoot", { className: tfoot, style: styles.tfoot },
8122
+ React__default.createElement("tr", null,
8123
+ React__default.createElement("td", { colSpan: 8 }, footer))));
7743
8124
  }
7744
8125
 
7745
8126
  /**
@@ -7768,9 +8149,9 @@ ISOWeek) {
7768
8149
  function HeadRow() {
7769
8150
  var _a = useDayPicker(), classNames = _a.classNames, styles = _a.styles, showWeekNumber = _a.showWeekNumber, locale = _a.locale, weekStartsOn = _a.weekStartsOn, ISOWeek = _a.ISOWeek, formatWeekdayName = _a.formatters.formatWeekdayName, labelWeekday = _a.labels.labelWeekday;
7770
8151
  var weekdays = getWeekdays(locale, weekStartsOn, ISOWeek);
7771
- return (React__default__default.createElement("tr", { style: styles.head_row, className: classNames.head_row },
7772
- showWeekNumber && (React__default__default.createElement("td", { style: styles.head_cell, className: classNames.head_cell })),
7773
- weekdays.map(function (weekday, i) { return (React__default__default.createElement("th", { key: i, scope: "col", className: classNames.head_cell, style: styles.head_cell, "aria-label": labelWeekday(weekday, { locale: locale }) }, formatWeekdayName(weekday, { locale: locale }))); })));
8152
+ return (React__default.createElement("tr", { style: styles.head_row, className: classNames.head_row },
8153
+ showWeekNumber && (React__default.createElement("td", { style: styles.head_cell, className: classNames.head_cell })),
8154
+ weekdays.map(function (weekday, i) { return (React__default.createElement("th", { key: i, scope: "col", className: classNames.head_cell, style: styles.head_cell, "aria-label": labelWeekday(weekday, { locale: locale }) }, formatWeekdayName(weekday, { locale: locale }))); })));
7774
8155
  }
7775
8156
 
7776
8157
  /** Render the table head. */
@@ -7778,14 +8159,14 @@ function Head() {
7778
8159
  var _a;
7779
8160
  var _b = useDayPicker(), classNames = _b.classNames, styles = _b.styles, components = _b.components;
7780
8161
  var HeadRowComponent = (_a = components === null || components === void 0 ? void 0 : components.HeadRow) !== null && _a !== void 0 ? _a : HeadRow;
7781
- return (React__default__default.createElement("thead", { style: styles.head, className: classNames.head },
7782
- React__default__default.createElement(HeadRowComponent, null)));
8162
+ return (React__default.createElement("thead", { style: styles.head, className: classNames.head },
8163
+ React__default.createElement(HeadRowComponent, null)));
7783
8164
  }
7784
8165
 
7785
8166
  /** Render the content of the day cell. */
7786
8167
  function DayContent(props) {
7787
8168
  var _a = useDayPicker(), locale = _a.locale, formatDay = _a.formatters.formatDay;
7788
- return React__default__default.createElement(React__default__default.Fragment, null, formatDay(props.date, { locale: locale }));
8169
+ return React__default.createElement(React__default.Fragment, null, formatDay(props.date, { locale: locale }));
7789
8170
  }
7790
8171
 
7791
8172
  /**
@@ -7804,9 +8185,9 @@ function SelectMultipleProvider(props) {
7804
8185
  disabled: []
7805
8186
  }
7806
8187
  };
7807
- return (React__default__default.createElement(SelectMultipleContext.Provider, { value: emptyContextValue }, props.children));
8188
+ return (React__default.createElement(SelectMultipleContext.Provider, { value: emptyContextValue }, props.children));
7808
8189
  }
7809
- return (React__default__default.createElement(SelectMultipleProviderInternal, { initialProps: props.initialProps, children: props.children }));
8190
+ return (React__default.createElement(SelectMultipleProviderInternal, { initialProps: props.initialProps, children: props.children }));
7810
8191
  }
7811
8192
  function SelectMultipleProviderInternal(_a) {
7812
8193
  var initialProps = _a.initialProps, children = _a.children;
@@ -7851,7 +8232,7 @@ function SelectMultipleProviderInternal(_a) {
7851
8232
  onDayClick: onDayClick,
7852
8233
  modifiers: modifiers
7853
8234
  };
7854
- return (React__default__default.createElement(SelectMultipleContext.Provider, { value: contextValue }, children));
8235
+ return (React__default.createElement(SelectMultipleContext.Provider, { value: contextValue }, children));
7855
8236
  }
7856
8237
  /**
7857
8238
  * Hook to access the {@link SelectMultipleContextValue}.
@@ -7920,9 +8301,9 @@ function SelectRangeProvider(props) {
7920
8301
  disabled: []
7921
8302
  }
7922
8303
  };
7923
- return (React__default__default.createElement(SelectRangeContext.Provider, { value: emptyContextValue }, props.children));
8304
+ return (React__default.createElement(SelectRangeContext.Provider, { value: emptyContextValue }, props.children));
7924
8305
  }
7925
- return (React__default__default.createElement(SelectRangeProviderInternal, { initialProps: props.initialProps, children: props.children }));
8306
+ return (React__default.createElement(SelectRangeProviderInternal, { initialProps: props.initialProps, children: props.children }));
7926
8307
  }
7927
8308
  function SelectRangeProviderInternal(_a) {
7928
8309
  var initialProps = _a.initialProps, children = _a.children;
@@ -7993,7 +8374,7 @@ function SelectRangeProviderInternal(_a) {
7993
8374
  });
7994
8375
  }
7995
8376
  }
7996
- return (React__default__default.createElement(SelectRangeContext.Provider, { value: { selected: selected, onDayClick: onDayClick, modifiers: modifiers } }, children));
8377
+ return (React__default.createElement(SelectRangeContext.Provider, { value: { selected: selected, onDayClick: onDayClick, modifiers: modifiers } }, children));
7997
8378
  }
7998
8379
  /**
7999
8380
  * Hook to access the {@link SelectRangeContextValue}.
@@ -8093,7 +8474,7 @@ function ModifiersProvider(props) {
8093
8474
  var internalModifiers = getInternalModifiers(dayPicker, selectMultiple, selectRange);
8094
8475
  var customModifiers = getCustomModifiers(dayPicker.modifiers);
8095
8476
  var modifiers = __assign(__assign({}, internalModifiers), customModifiers);
8096
- return (React__default__default.createElement(ModifiersContext.Provider, { value: modifiers }, props.children));
8477
+ return (React__default.createElement(ModifiersContext.Provider, { value: modifiers }, props.children));
8097
8478
  }
8098
8479
  /**
8099
8480
  * Return the modifiers used by DayPicker.
@@ -8391,7 +8772,7 @@ function FocusProvider(props) {
8391
8772
  focusStartOfWeek: function () { return moveFocus('startOfWeek', 'before'); },
8392
8773
  focusEndOfWeek: function () { return moveFocus('endOfWeek', 'after'); }
8393
8774
  };
8394
- return (React__default__default.createElement(FocusContext.Provider, { value: value }, props.children));
8775
+ return (React__default.createElement(FocusContext.Provider, { value: value }, props.children));
8395
8776
  }
8396
8777
  /**
8397
8778
  * Hook to access the {@link FocusContextValue}. Use this hook to handle the
@@ -8439,9 +8820,9 @@ function SelectSingleProvider(props) {
8439
8820
  var emptyContextValue = {
8440
8821
  selected: undefined
8441
8822
  };
8442
- return (React__default__default.createElement(SelectSingleContext.Provider, { value: emptyContextValue }, props.children));
8823
+ return (React__default.createElement(SelectSingleContext.Provider, { value: emptyContextValue }, props.children));
8443
8824
  }
8444
- return (React__default__default.createElement(SelectSingleProviderInternal, { initialProps: props.initialProps, children: props.children }));
8825
+ return (React__default.createElement(SelectSingleProviderInternal, { initialProps: props.initialProps, children: props.children }));
8445
8826
  }
8446
8827
  function SelectSingleProviderInternal(_a) {
8447
8828
  var initialProps = _a.initialProps, children = _a.children;
@@ -8458,7 +8839,7 @@ function SelectSingleProviderInternal(_a) {
8458
8839
  selected: initialProps.selected,
8459
8840
  onDayClick: onDayClick
8460
8841
  };
8461
- return (React__default__default.createElement(SelectSingleContext.Provider, { value: contextValue }, children));
8842
+ return (React__default.createElement(SelectSingleContext.Provider, { value: contextValue }, children));
8462
8843
  }
8463
8844
  /**
8464
8845
  * Hook to access the {@link SelectSingleContextValue}.
@@ -8728,7 +9109,7 @@ buttonRef) {
8728
9109
  var isHidden = Boolean((activeModifiers.outside && !dayPicker.showOutsideDays) ||
8729
9110
  activeModifiers.hidden);
8730
9111
  var DayContentComponent = (_c = (_b = dayPicker.components) === null || _b === void 0 ? void 0 : _b.DayContent) !== null && _c !== void 0 ? _c : DayContent;
8731
- var children = (React__default__default.createElement(DayContentComponent, { date: day, displayMonth: displayMonth, activeModifiers: activeModifiers }));
9112
+ var children = (React__default.createElement(DayContentComponent, { date: day, displayMonth: displayMonth, activeModifiers: activeModifiers }));
8732
9113
  var divProps = {
8733
9114
  style: style,
8734
9115
  className: className,
@@ -8759,12 +9140,12 @@ function Day(props) {
8759
9140
  var buttonRef = useRef(null);
8760
9141
  var dayRender = useDayRender(props.date, props.displayMonth, buttonRef);
8761
9142
  if (dayRender.isHidden) {
8762
- return React__default__default.createElement("div", { role: "gridcell" });
9143
+ return React__default.createElement("div", { role: "gridcell" });
8763
9144
  }
8764
9145
  if (!dayRender.isButton) {
8765
- return React__default__default.createElement("div", __assign({}, dayRender.divProps));
9146
+ return React__default.createElement("div", __assign({}, dayRender.divProps));
8766
9147
  }
8767
- return React__default__default.createElement(Button, __assign({ name: "day", ref: buttonRef }, dayRender.buttonProps));
9148
+ return React__default.createElement(Button, __assign({ name: "day", ref: buttonRef }, dayRender.buttonProps));
8768
9149
  }
8769
9150
 
8770
9151
  /**
@@ -8776,13 +9157,13 @@ function WeekNumber(props) {
8776
9157
  var _a = useDayPicker(), onWeekNumberClick = _a.onWeekNumberClick, styles = _a.styles, classNames = _a.classNames, locale = _a.locale, labelWeekNumber = _a.labels.labelWeekNumber, formatWeekNumber = _a.formatters.formatWeekNumber;
8777
9158
  var content = formatWeekNumber(Number(weekNumber), { locale: locale });
8778
9159
  if (!onWeekNumberClick) {
8779
- return (React__default__default.createElement("span", { className: classNames.weeknumber, style: styles.weeknumber }, content));
9160
+ return (React__default.createElement("span", { className: classNames.weeknumber, style: styles.weeknumber }, content));
8780
9161
  }
8781
9162
  var label = labelWeekNumber(Number(weekNumber), { locale: locale });
8782
9163
  var handleClick = function (e) {
8783
9164
  onWeekNumberClick(weekNumber, dates, e);
8784
9165
  };
8785
- return (React__default__default.createElement(Button, { name: "week-number", "aria-label": label, className: classNames.weeknumber, style: styles.weeknumber, onClick: handleClick }, content));
9166
+ return (React__default.createElement(Button, { name: "week-number", "aria-label": label, className: classNames.weeknumber, style: styles.weeknumber, onClick: handleClick }, content));
8786
9167
  }
8787
9168
 
8788
9169
  /** Render a row in the calendar, with the days and the week number. */
@@ -8793,13 +9174,13 @@ function Row(props) {
8793
9174
  var WeeknumberComponent = (_b = components === null || components === void 0 ? void 0 : components.WeekNumber) !== null && _b !== void 0 ? _b : WeekNumber;
8794
9175
  var weekNumberCell;
8795
9176
  if (showWeekNumber) {
8796
- weekNumberCell = (React__default__default.createElement("td", { className: classNames.cell, style: styles.cell },
8797
- React__default__default.createElement(WeeknumberComponent, { number: props.weekNumber, dates: props.dates })));
9177
+ weekNumberCell = (React__default.createElement("td", { className: classNames.cell, style: styles.cell },
9178
+ React__default.createElement(WeeknumberComponent, { number: props.weekNumber, dates: props.dates })));
8798
9179
  }
8799
- return (React__default__default.createElement("tr", { className: classNames.row, style: styles.row },
9180
+ return (React__default.createElement("tr", { className: classNames.row, style: styles.row },
8800
9181
  weekNumberCell,
8801
- props.dates.map(function (date) { return (React__default__default.createElement("td", { className: classNames.cell, style: styles.cell, key: getUnixTime(date), role: "presentation" },
8802
- React__default__default.createElement(DayComponent, { displayMonth: props.displayMonth, date: date }))); })));
9182
+ props.dates.map(function (date) { return (React__default.createElement("td", { className: classNames.cell, style: styles.cell, key: getUnixTime(date), role: "presentation" },
9183
+ React__default.createElement(DayComponent, { displayMonth: props.displayMonth, date: date }))); })));
8803
9184
  }
8804
9185
 
8805
9186
  /** Return the weeks between two dates. */
@@ -8867,10 +9248,10 @@ function Table(props) {
8867
9248
  var HeadComponent = (_a = components === null || components === void 0 ? void 0 : components.Head) !== null && _a !== void 0 ? _a : Head;
8868
9249
  var RowComponent = (_b = components === null || components === void 0 ? void 0 : components.Row) !== null && _b !== void 0 ? _b : Row;
8869
9250
  var FooterComponent = (_c = components === null || components === void 0 ? void 0 : components.Footer) !== null && _c !== void 0 ? _c : Footer$1;
8870
- return (React__default__default.createElement("table", { id: props.id, className: classNames.table, style: styles.table, role: "grid", "aria-labelledby": props['aria-labelledby'] },
8871
- !hideHead && React__default__default.createElement(HeadComponent, null),
8872
- React__default__default.createElement("tbody", { className: classNames.tbody, style: styles.tbody, role: "rowgroup" }, weeks.map(function (week) { return (React__default__default.createElement(RowComponent, { displayMonth: props.displayMonth, key: week.weekNumber, dates: week.dates, weekNumber: week.weekNumber })); })),
8873
- React__default__default.createElement(FooterComponent, { displayMonth: props.displayMonth })));
9251
+ return (React__default.createElement("table", { id: props.id, className: classNames.table, style: styles.table, role: "grid", "aria-labelledby": props['aria-labelledby'] },
9252
+ !hideHead && React__default.createElement(HeadComponent, null),
9253
+ React__default.createElement("tbody", { className: classNames.tbody, style: styles.tbody, role: "rowgroup" }, weeks.map(function (week) { return (React__default.createElement(RowComponent, { displayMonth: props.displayMonth, key: week.weekNumber, dates: week.dates, weekNumber: week.weekNumber })); })),
9254
+ React__default.createElement(FooterComponent, { displayMonth: props.displayMonth })));
8874
9255
  }
8875
9256
 
8876
9257
  /*
@@ -8914,8 +9295,8 @@ function canUseDOM() {
8914
9295
  * @param deps
8915
9296
  */
8916
9297
  var useIsomorphicLayoutEffect = canUseDOM()
8917
- ? React__default.useLayoutEffect
8918
- : React__default.useEffect;
9298
+ ? React.useLayoutEffect
9299
+ : React.useEffect;
8919
9300
  var serverHandoffComplete = false;
8920
9301
  var id = 0;
8921
9302
  function genId() {
@@ -8928,7 +9309,7 @@ function useId(providedId) {
8928
9309
  // If this instance isn't part of the initial render, we don't have to do the
8929
9310
  // double render/patch-up dance. We can just generate the ID and return it.
8930
9311
  var initialId = providedId !== null && providedId !== void 0 ? providedId : (serverHandoffComplete ? genId() : null);
8931
- var _b = React__default.useState(initialId), id = _b[0], setId = _b[1];
9312
+ var _b = React.useState(initialId), id = _b[0], setId = _b[1];
8932
9313
  useIsomorphicLayoutEffect(function () {
8933
9314
  if (id === null) {
8934
9315
  // Patch the ID after render. We do this in `useLayoutEffect` to avoid any
@@ -8939,7 +9320,7 @@ function useId(providedId) {
8939
9320
  }
8940
9321
  // eslint-disable-next-line react-hooks/exhaustive-deps
8941
9322
  }, []);
8942
- React__default.useEffect(function () {
9323
+ React.useEffect(function () {
8943
9324
  if (serverHandoffComplete === false) {
8944
9325
  // Flag all future uses of `useId` to skip the update dance. This is in
8945
9326
  // `useEffect` because it goes after `useLayoutEffect`, ensuring we don't
@@ -8982,9 +9363,9 @@ function Month(props) {
8982
9363
  style = __assign(__assign({}, style), styles.caption_between);
8983
9364
  }
8984
9365
  var CaptionComponent = (_b = components === null || components === void 0 ? void 0 : components.Caption) !== null && _b !== void 0 ? _b : Caption;
8985
- return (React__default__default.createElement("div", { key: props.displayIndex, className: className.join(' '), style: style },
8986
- React__default__default.createElement(CaptionComponent, { id: captionId, displayMonth: props.displayMonth }),
8987
- React__default__default.createElement(Table, { id: tableId, "aria-labelledby": captionId, displayMonth: props.displayMonth })));
9366
+ return (React__default.createElement("div", { key: props.displayIndex, className: className.join(' '), style: style },
9367
+ React__default.createElement(CaptionComponent, { id: captionId, displayMonth: props.displayMonth }),
9368
+ React__default.createElement(Table, { id: tableId, "aria-labelledby": captionId, displayMonth: props.displayMonth })));
8988
9369
  }
8989
9370
 
8990
9371
  /** Render the container with the months according to the number of months to display. */
@@ -9026,20 +9407,20 @@ function Root(_a) {
9026
9407
  var _a;
9027
9408
  return __assign(__assign({}, attrs), (_a = {}, _a[key] = initialProps[key], _a));
9028
9409
  }, {});
9029
- return (React__default__default.createElement("div", __assign({ className: classNames.join(' '), style: style, dir: dayPicker.dir, id: dayPicker.id }, dataAttributes),
9030
- React__default__default.createElement("div", { className: dayPicker.classNames.months, style: dayPicker.styles.months }, navigation.displayMonths.map(function (month, i) { return (React__default__default.createElement(Month, { key: i, displayIndex: i, displayMonth: month })); }))));
9410
+ return (React__default.createElement("div", __assign({ className: classNames.join(' '), style: style, dir: dayPicker.dir, id: dayPicker.id }, dataAttributes),
9411
+ React__default.createElement("div", { className: dayPicker.classNames.months, style: dayPicker.styles.months }, navigation.displayMonths.map(function (month, i) { return (React__default.createElement(Month, { key: i, displayIndex: i, displayMonth: month })); }))));
9031
9412
  }
9032
9413
 
9033
9414
  /** Provide the value for all the context providers. */
9034
9415
  function RootProvider(props) {
9035
9416
  var children = props.children, initialProps = __rest(props, ["children"]);
9036
- return (React__default__default.createElement(DayPickerProvider, { initialProps: initialProps },
9037
- React__default__default.createElement(NavigationProvider, null,
9038
- React__default__default.createElement(SelectSingleProvider, { initialProps: initialProps },
9039
- React__default__default.createElement(SelectMultipleProvider, { initialProps: initialProps },
9040
- React__default__default.createElement(SelectRangeProvider, { initialProps: initialProps },
9041
- React__default__default.createElement(ModifiersProvider, null,
9042
- React__default__default.createElement(FocusProvider, null, children))))))));
9417
+ return (React__default.createElement(DayPickerProvider, { initialProps: initialProps },
9418
+ React__default.createElement(NavigationProvider, null,
9419
+ React__default.createElement(SelectSingleProvider, { initialProps: initialProps },
9420
+ React__default.createElement(SelectMultipleProvider, { initialProps: initialProps },
9421
+ React__default.createElement(SelectRangeProvider, { initialProps: initialProps },
9422
+ React__default.createElement(ModifiersProvider, null,
9423
+ React__default.createElement(FocusProvider, null, children))))))));
9043
9424
  }
9044
9425
 
9045
9426
  /**
@@ -9130,8 +9511,8 @@ function RootProvider(props) {
9130
9511
  * ```
9131
9512
  */
9132
9513
  function DayPicker(props) {
9133
- return (React__default__default.createElement(RootProvider, __assign({}, props),
9134
- React__default__default.createElement(Root, { initialProps: props })));
9514
+ return (React__default.createElement(RootProvider, __assign({}, props),
9515
+ React__default.createElement(Root, { initialProps: props })));
9135
9516
  }
9136
9517
 
9137
9518
  var reactResponsive$1 = {exports: {}};
@@ -9145,7 +9526,7 @@ function requireReactResponsive () {
9145
9526
  hasRequiredReactResponsive = 1;
9146
9527
  (function (module, exports) {
9147
9528
  (function webpackUniversalModuleDefinition(root, factory) {
9148
- module.exports = factory(React__default__default);
9529
+ module.exports = factory(React__default);
9149
9530
  })(reactResponsive, (__WEBPACK_EXTERNAL_MODULE_react__) => {
9150
9531
  return /******/ (() => { // webpackBootstrap
9151
9532
  /******/ var __webpack_modules__ = ({
@@ -10974,15 +11355,19 @@ var IconsSvg = function (_a) {
10974
11355
  var fill = _a.fill, size = _a.size, icon = _a.icon;
10975
11356
  switch (icon) {
10976
11357
  case 'spinner':
10977
- return (jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "".concat(size || 25), height: "".concat(size || 25), viewBox: "0 0 24 24", children: [jsx("style", { children: "\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 " }), jsx("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 }), jsx("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 })] }));
11358
+ return (React__default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "".concat(size || 25), height: "".concat(size || 25), viewBox: "0 0 24 24" },
11359
+ React__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 "),
11360
+ React__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 }),
11361
+ React__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 })));
10978
11362
  case 'warning':
10979
- return (jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "".concat(size || 25), height: "".concat(size || 25), className: "svg-icon", style: {
11363
+ return (React__default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "".concat(size || 25), height: "".concat(size || 25), className: "svg-icon", style: {
10980
11364
  verticalAlign: 'middle',
10981
11365
  fill: fill,
10982
11366
  overflow: 'hidden',
10983
11367
  minWidth: '25px',
10984
11368
  minHeight: '25px',
10985
- }, viewBox: "0 0 1024 1024", version: "1.1", children: jsx("path", { d: "M42.666667 896h938.666666L512 85.333333 42.666667 896z m512-128h-85.333334v-85.333333h85.333334v85.333333z m0-170.666667h-85.333334v-170.666666h85.333334v170.666666z" }) }));
11369
+ }, viewBox: "0 0 1024 1024", version: "1.1" },
11370
+ React__default.createElement("path", { d: "M42.666667 896h938.666666L512 85.333333 42.666667 896z m512-128h-85.333334v-85.333333h85.333334v85.333333z m0-170.666667h-85.333334v-170.666666h85.333334v170.666666z" })));
10986
11371
  default:
10987
11372
  return null;
10988
11373
  }
@@ -11221,728 +11606,423 @@ var handleCalendarModifiers = function (_a) {
11221
11606
  : [])), false),
11222
11607
  checkOutOnly: __spreadArray$1([], __read(((findLastPossibleRangeContextCheckOut === null || findLastPossibleRangeContextCheckOut === void 0 ? void 0 : findLastPossibleRangeContextCheckOut.checkIn) &&
11223
11608
  findLastPossibleRangeContextCheckOut.lastCheckOut
11224
- ? [
11225
- {
11226
- from: addDays(findLastPossibleRangeContextCheckOut.checkIn, 1),
11227
- to: findLastPossibleRangeContextCheckOut.lastCheckOut,
11228
- },
11229
- ]
11230
- : [])), false),
11231
- };
11232
- };
11233
-
11234
- var handleRangeContextDisabledDates = function (_a) {
11235
- var rangeContext = _a.rangeContext, availableDates = _a.availableDates, calendarRange = _a.calendarRange;
11236
- var findFirstPossibleRangeContextCheckIn;
11237
- var findLastPossibleRangeContextCheckOut;
11238
- var firstPossibleRangeContextCheckIn = [];
11239
- var lastPossibleRangeContextCheckOut = [];
11240
- // Parse data
11241
- var rangeContextFrom = (rangeContext === null || rangeContext === void 0 ? void 0 : rangeContext.from) && endOfDay(rangeContext.from);
11242
- var rangeContextTo = (rangeContext === null || rangeContext === void 0 ? void 0 : rangeContext.to) && endOfDay(rangeContext.to);
11243
- var calendarRangeFrom = (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) && endOfDay(calendarRange.from);
11244
- if (rangeContext && (availableDates === null || availableDates === void 0 ? void 0 : availableDates.length)) {
11245
- // Find the first possible check-in after the last date gap till the range context
11246
- findFirstPossibleRangeContextCheckIn = availableDates === null || availableDates === void 0 ? void 0 : availableDates.find(function (date) {
11247
- return rangeContextFrom &&
11248
- endOfDay(date.checkIn) < rangeContextFrom &&
11249
- endOfDay(date.lastCheckOut) >= rangeContextFrom;
11250
- });
11251
- if (findFirstPossibleRangeContextCheckIn === null || findFirstPossibleRangeContextCheckIn === void 0 ? void 0 : findFirstPossibleRangeContextCheckIn.checkIn) {
11252
- firstPossibleRangeContextCheckIn.push({
11253
- before: findFirstPossibleRangeContextCheckIn.checkIn,
11254
- });
11255
- }
11256
- // Find the last possible checkout before the first date gap till the range context
11257
- findLastPossibleRangeContextCheckOut = availableDates === null || availableDates === void 0 ? void 0 : availableDates.find(function (date) {
11258
- return rangeContextTo && isEqual(rangeContextTo, endOfDay(date.checkIn));
11259
- });
11260
- if (findLastPossibleRangeContextCheckOut === null || findLastPossibleRangeContextCheckOut === void 0 ? void 0 : findLastPossibleRangeContextCheckOut.checkIn) {
11261
- lastPossibleRangeContextCheckOut.push({
11262
- after: findLastPossibleRangeContextCheckOut.lastCheckOut,
11263
- });
11264
- }
11265
- }
11266
- // Get possible check-out dates for current check-in
11267
- var currentSelectionAvailability = availableDates === null || availableDates === void 0 ? void 0 : availableDates.find(function (date) {
11268
- return calendarRangeFrom
11269
- ? isEqual(endOfDay(date.checkIn), calendarRangeFrom)
11270
- : false;
11271
- });
11272
- return {
11273
- findFirstPossibleRangeContextCheckIn: findFirstPossibleRangeContextCheckIn,
11274
- findLastPossibleRangeContextCheckOut: findLastPossibleRangeContextCheckOut,
11275
- firstPossibleRangeContextCheckIn: firstPossibleRangeContextCheckIn,
11276
- lastPossibleRangeContextCheckOut: lastPossibleRangeContextCheckOut,
11277
- currentSelectionAvailability: currentSelectionAvailability,
11278
- };
11279
- };
11280
-
11281
- // Case: If the selected dates do not overlap with the rangeContext during continuous selection,
11282
- // set setCalendarHasError to true. This will display an error message and
11283
- // prevent the submission of the selected dates.
11284
- var checkForContinuousSelection = function (_a) {
11285
- var setCalendarHasError = _a.setCalendarHasError, rangeContext = _a.rangeContext, calendarRange = _a.calendarRange, calendarHasError = _a.calendarHasError, disabledDates = _a.disabledDates;
11286
- var calendarRangeFrom = (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) && endOfDay(calendarRange.from);
11287
- var calendarRangeTo = (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) && endOfDay(calendarRange.to);
11288
- var rangeContextFrom = (rangeContext === null || rangeContext === void 0 ? void 0 : rangeContext.from) && endOfDay(rangeContext.from);
11289
- var rangeContextTo = (rangeContext === null || rangeContext === void 0 ? void 0 : rangeContext.to) && endOfDay(rangeContext.to);
11290
- // Checking if rangeFrom is equal to or before rangeContextTo
11291
- var startIsEqualOrBeforeRangeContextEnd = calendarRangeFrom && rangeContextTo
11292
- ? isBefore(calendarRangeFrom, rangeContextTo) ||
11293
- isEqual(calendarRangeFrom, rangeContextTo)
11294
- : null;
11295
- // Checking if rangeTo is equal to or after rangeContextFrom
11296
- var endIsEqualOrAfterRangeContextStart = calendarRangeTo && rangeContextFrom && rangeContextTo
11297
- ? isAfter(calendarRangeTo, rangeContextFrom) ||
11298
- isEqual(calendarRangeTo, rangeContextFrom)
11299
- : null;
11300
- // Check if selection overlapping unavailable dates
11301
- var selectionOverlappingUnavailableDate = disabledDates === null || disabledDates === void 0 ? void 0 : disabledDates.find(function (range) {
11302
- var rangeFrom = endOfDay(range.from);
11303
- var rangeTo = endOfDay(range.to);
11304
- return (rangeContextFrom &&
11305
- rangeContextTo &&
11306
- areIntervalsOverlapping({ start: rangeContextFrom, end: rangeContextTo }, { start: rangeFrom, end: rangeTo }) &&
11307
- calendarRangeFrom &&
11308
- calendarRangeTo &&
11309
- areIntervalsOverlapping({ start: calendarRangeFrom, end: calendarRangeTo }, { start: rangeFrom, end: rangeTo }));
11310
- });
11311
- useEffect(function () {
11312
- if ((rangeContext &&
11313
- calendarRangeFrom &&
11314
- !startIsEqualOrBeforeRangeContextEnd) ||
11315
- (rangeContext &&
11316
- calendarRangeTo &&
11317
- !endIsEqualOrAfterRangeContextStart) ||
11318
- selectionOverlappingUnavailableDate) {
11319
- !!(setCalendarHasError && !calendarHasError) && setCalendarHasError(true);
11320
- }
11321
- });
11322
- };
11323
-
11324
- var useCalendarTooltips = function (_a) {
11325
- var showFeedback = _a.showFeedback;
11326
- return useEffect(function () {
11327
- if (typeof document === 'undefined' || !showFeedback)
11328
- return;
11329
- // Children
11330
- var calendarTooltip = document.querySelector('.will-calendar-tooltip');
11331
- var calendarTooltipCheckOut = document.querySelector('.will-calendar-tooltip-check-out');
11332
- var calendarTooltipOverlappingDate = document.querySelector('.will-calendar-tooltip-overlapping-date');
11333
- var loadingSpinner = document.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
11334
- var calendarTooltipCheckInOnly = document.querySelector('.will-calendar-tooltip-check-in-only');
11335
- var calendarTooltipCheckOutOnly = document.querySelector('.will-calendar-tooltip-check-out-only');
11336
- // Parents
11337
- var calendarButtons = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked):not(:has(.disabled-after-check-in))');
11338
- var calendarButtonsCheckOut = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked.disabled-after-check-in)');
11339
- var calendarMonthContainer = document.querySelector('.will-filter-bar-calendar .rdp-months');
11340
- var calendarOverlappingDate = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.overlapping-date)');
11341
- var calendarCheckInOnly = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.check-in-only)');
11342
- var calendarCheckOutOnly = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.check-out-only)');
11343
- // Append children to parents
11344
- var tooltipClonesCheckIn = [];
11345
- var tooltipClonesCheckOut = [];
11346
- var tooltipClonesCheckInOnly = [];
11347
- var tooltipClonesCheckOutOnly = [];
11348
- var tooltipClonesSpinner = [];
11349
- var tooltipClonesOverlappingDates = [];
11350
- if (calendarTooltip && calendarButtons.length > 0) {
11351
- calendarButtons.forEach(function (element) {
11352
- var tooltipClone = calendarTooltip.cloneNode(true);
11353
- element.appendChild(tooltipClone);
11354
- tooltipClonesCheckIn.push(tooltipClone);
11355
- });
11356
- }
11357
- if (calendarTooltipCheckOut && calendarButtonsCheckOut.length > 0) {
11358
- calendarButtonsCheckOut.forEach(function (element) {
11359
- var tooltipClone = calendarTooltipCheckOut.cloneNode(true);
11360
- element.appendChild(tooltipClone);
11361
- tooltipClonesCheckOut.push(tooltipClone);
11362
- });
11363
- }
11364
- if (calendarTooltipCheckOutOnly && calendarCheckOutOnly.length > 0) {
11365
- calendarCheckOutOnly.forEach(function (element) {
11366
- var tooltipClone = calendarTooltipCheckOutOnly.cloneNode(true);
11367
- element.appendChild(tooltipClone);
11368
- tooltipClonesCheckOutOnly.push(tooltipClone);
11369
- });
11370
- }
11371
- if (calendarTooltipCheckInOnly && calendarCheckInOnly.length > 0) {
11372
- calendarCheckInOnly.forEach(function (element) {
11373
- var tooltipClone = calendarTooltipCheckInOnly.cloneNode(true);
11374
- element.appendChild(tooltipClone);
11375
- tooltipClonesCheckInOnly.push(tooltipClone);
11376
- });
11377
- }
11378
- if (loadingSpinner && calendarMonthContainer) {
11379
- var tooltipClone = loadingSpinner.cloneNode(true);
11380
- calendarMonthContainer.appendChild(tooltipClone);
11381
- tooltipClonesSpinner.push(tooltipClone);
11382
- }
11383
- if (calendarTooltipOverlappingDate && calendarOverlappingDate.length > 0) {
11384
- calendarOverlappingDate.forEach(function (element) {
11385
- var tooltipClone = calendarTooltipOverlappingDate.cloneNode(true);
11386
- element.appendChild(tooltipClone);
11387
- tooltipClonesOverlappingDates.push(tooltipClone);
11388
- });
11389
- }
11390
- return function () {
11391
- tooltipClonesCheckIn.forEach(function (clone) { return clone.remove(); });
11392
- tooltipClonesCheckOut.forEach(function (clone) { return clone.remove(); });
11393
- tooltipClonesSpinner.forEach(function (clone) { return clone.remove(); });
11394
- tooltipClonesOverlappingDates.forEach(function (clone) { return clone.remove(); });
11395
- tooltipClonesCheckInOnly.forEach(function (clone) { return clone.remove(); });
11396
- tooltipClonesCheckOutOnly.forEach(function (clone) { return clone.remove(); });
11397
- };
11398
- });
11609
+ ? [
11610
+ {
11611
+ from: addDays(findLastPossibleRangeContextCheckOut.checkIn, 1),
11612
+ to: findLastPossibleRangeContextCheckOut.lastCheckOut,
11613
+ },
11614
+ ]
11615
+ : [])), false),
11616
+ };
11399
11617
  };
11400
11618
 
11401
- var useCalendarLoadingSpinner = function (_a) {
11402
- var loadingData = _a.loadingData;
11403
- return useEffect(function () {
11404
- if (typeof document === 'undefined')
11405
- return;
11406
- var loadingSpinner = document.querySelector('.will-filter-bar-calendar .rdp-months .will-calendar-spinner');
11407
- if (loadingData) {
11408
- if (loadingSpinner)
11409
- loadingSpinner.style.display = 'flex';
11619
+ var handleRangeContextDisabledDates = function (_a) {
11620
+ var rangeContext = _a.rangeContext, availableDates = _a.availableDates, calendarRange = _a.calendarRange;
11621
+ var findFirstPossibleRangeContextCheckIn;
11622
+ var findLastPossibleRangeContextCheckOut;
11623
+ var firstPossibleRangeContextCheckIn = [];
11624
+ var lastPossibleRangeContextCheckOut = [];
11625
+ // Parse data
11626
+ var rangeContextFrom = (rangeContext === null || rangeContext === void 0 ? void 0 : rangeContext.from) && endOfDay(rangeContext.from);
11627
+ var rangeContextTo = (rangeContext === null || rangeContext === void 0 ? void 0 : rangeContext.to) && endOfDay(rangeContext.to);
11628
+ var calendarRangeFrom = (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) && endOfDay(calendarRange.from);
11629
+ if (rangeContext && (availableDates === null || availableDates === void 0 ? void 0 : availableDates.length)) {
11630
+ // Find the first possible check-in after the last date gap till the range context
11631
+ findFirstPossibleRangeContextCheckIn = availableDates === null || availableDates === void 0 ? void 0 : availableDates.find(function (date) {
11632
+ return rangeContextFrom &&
11633
+ endOfDay(date.checkIn) < rangeContextFrom &&
11634
+ endOfDay(date.lastCheckOut) >= rangeContextFrom;
11635
+ });
11636
+ if (findFirstPossibleRangeContextCheckIn === null || findFirstPossibleRangeContextCheckIn === void 0 ? void 0 : findFirstPossibleRangeContextCheckIn.checkIn) {
11637
+ firstPossibleRangeContextCheckIn.push({
11638
+ before: findFirstPossibleRangeContextCheckIn.checkIn,
11639
+ });
11410
11640
  }
11411
- else {
11412
- if (loadingSpinner)
11413
- loadingSpinner.style.display = 'none';
11641
+ // Find the last possible checkout before the first date gap till the range context
11642
+ findLastPossibleRangeContextCheckOut = availableDates === null || availableDates === void 0 ? void 0 : availableDates.find(function (date) {
11643
+ return rangeContextTo && isEqual(rangeContextTo, endOfDay(date.checkIn));
11644
+ });
11645
+ if (findLastPossibleRangeContextCheckOut === null || findLastPossibleRangeContextCheckOut === void 0 ? void 0 : findLastPossibleRangeContextCheckOut.checkIn) {
11646
+ lastPossibleRangeContextCheckOut.push({
11647
+ after: findLastPossibleRangeContextCheckOut.lastCheckOut,
11648
+ });
11414
11649
  }
11650
+ }
11651
+ // Get possible check-out dates for current check-in
11652
+ var currentSelectionAvailability = availableDates === null || availableDates === void 0 ? void 0 : availableDates.find(function (date) {
11653
+ return calendarRangeFrom
11654
+ ? isEqual(endOfDay(date.checkIn), calendarRangeFrom)
11655
+ : false;
11415
11656
  });
11657
+ return {
11658
+ findFirstPossibleRangeContextCheckIn: findFirstPossibleRangeContextCheckIn,
11659
+ findLastPossibleRangeContextCheckOut: findLastPossibleRangeContextCheckOut,
11660
+ firstPossibleRangeContextCheckIn: firstPossibleRangeContextCheckIn,
11661
+ lastPossibleRangeContextCheckOut: lastPossibleRangeContextCheckOut,
11662
+ currentSelectionAvailability: currentSelectionAvailability,
11663
+ };
11416
11664
  };
11417
11665
 
11418
- var useUpdateDisabledDates = function (_a) {
11419
- var disableCalendarDates = _a.disableCalendarDates, calendarRange = _a.calendarRange, updateCalendarMonthNavigation = _a.updateCalendarMonthNavigation, updateCalendarDefaultMonth = _a.updateCalendarDefaultMonth;
11420
- var _b = __read(useState(undefined), 2), overlappingDate = _b[0], setOverlappingDate = _b[1];
11421
- var _c = __read(useState([]), 2), lastPossibleCheckout = _c[0], setLatsPossibleCheckout = _c[1];
11422
- var newDisableCalendarDates = useMemo(function () {
11423
- var _a;
11424
- if (disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.availableDates) {
11425
- var dateFormat_1 = 'dd-MM-yyyy';
11426
- var disabledDates = disableCalendarDates.disabledDates;
11427
- var _b = (disabledDates || []).reduce(function (acc, dateRange) {
11428
- var _a, _b;
11429
- var formattedFromDate = format(dateRange.from, dateFormat_1);
11430
- var formattedToDate = format(dateRange.to, dateFormat_1);
11431
- var hasTwoOverlappingDates = (_a = disableCalendarDates.availableDates) === null || _a === void 0 ? void 0 : _a.some(function (item) {
11432
- return format(item.lastCheckOut, dateFormat_1) === formattedFromDate &&
11433
- format(item.lastCheckOut, dateFormat_1) === formattedToDate;
11434
- });
11435
- var hasOneOverlappingDate = (_b = disableCalendarDates.availableDates) === null || _b === void 0 ? void 0 : _b.some(function (item) {
11436
- return format(item.lastCheckOut, dateFormat_1) === formattedFromDate &&
11437
- format(item.lastCheckOut, dateFormat_1) !== formattedToDate;
11438
- });
11439
- if (hasTwoOverlappingDates) {
11440
- acc.newOverlappingDates.push(dateRange);
11441
- }
11442
- else if (hasOneOverlappingDate) {
11443
- acc.newOverlappingDates.push(dateRange);
11444
- acc.updatedDisabledDates.push(__assign$2(__assign$2({}, dateRange), { from: addDays(dateRange.from, 1) }));
11445
- }
11446
- else {
11447
- acc.updatedDisabledDates.push(dateRange);
11448
- }
11449
- return acc;
11450
- }, { updatedDisabledDates: [], newOverlappingDates: [] }), updatedDisabledDates = _b.updatedDisabledDates, newOverlappingDates = _b.newOverlappingDates;
11451
- // Find last possible checkout ( disable all dates after the last possible checkout )
11452
- var lastPossibleCheckoutDate = (_a = disableCalendarDates.availableDates.at(-1)) === null || _a === void 0 ? void 0 : _a.lastCheckOut;
11453
- if (lastPossibleCheckoutDate) {
11454
- setLatsPossibleCheckout({ after: lastPossibleCheckoutDate });
11455
- }
11456
- // Extract overlapping dates ( dates that are only available for checkout )
11457
- if (newOverlappingDates.length) {
11458
- setOverlappingDate(__spreadArray$1([], __read(newOverlappingDates), false));
11459
- }
11460
- var newDisableCalendarDates_1 = __assign$2(__assign$2({}, disableCalendarDates), { disabledDates: updatedDisabledDates });
11461
- return newDisableCalendarDates_1;
11462
- }
11463
- return disableCalendarDates;
11464
- }, [
11465
- disableCalendarDates,
11466
- calendarRange,
11467
- updateCalendarMonthNavigation,
11468
- updateCalendarDefaultMonth,
11469
- ]);
11470
- return { newDisableCalendarDates: newDisableCalendarDates, overlappingDate: overlappingDate, lastPossibleCheckout: lastPossibleCheckout };
11471
- };
11472
-
11473
- var css_248z$d = ".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}";
11474
- styleInject(css_248z$d);
11475
-
11476
- var css_248z$c = ".will-calendar-filter-container {\n display: flex;\n justify-content: center;\n user-select: none;\n}\n\n/* Calendar overrides */\n.will-calendar-filter-container .rdp {\n margin: 0;\n}\n\n.will-calendar-filter-container .DayPicker {\n font-size: 25px;\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.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: 0.6;\n}\n\n.will-calendar-filter-container .rdp-table {\n border-collapse: separate;\n border-spacing: 0px 2px;\n}\n\n.will-calendar-filter-container\n .rdp-button_reset.rdp-button.rdp-day.rdp-day_selected {\n background-color: var(--will-primary);\n opacity: 1;\n color: var(--will-white);\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 color: var(--will-transparent-black);\n opacity: 1;\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/* Tooltips */\n.will-root .will-calendar-filter-container .will-calendar-tooltip,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-overlapping-date,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-out-only,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-in-only {\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\n.will-root .will-calendar-filter-container .will-calendar-tooltip > div,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-out\n > div,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-overlapping-date\n > div,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-out-only\n > div,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-in-only\n > 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\n .will-calendar-filter-container\n .will-calendar-tooltip-check-out::before,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-overlapping-date::before,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-out-only::before,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-in-only::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\n .will-calendar-filter-container\n .rdp-cell:hover\n .will-calendar-tooltip,\n.will-root\n .will-calendar-filter-container\n .rdp-cell:hover\n .will-calendar-tooltip-check-out,\n.will-root\n .will-calendar-filter-container\n .rdp-cell:hover\n .will-calendar-tooltip-overlapping-date,\n.will-root\n .will-calendar-filter-container\n .rdp-cell:hover\n .will-calendar-tooltip-check-out-only,\n.will-root\n .will-calendar-filter-container\n .rdp-cell:hover\n .will-calendar-tooltip-check-in-only {\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/* No active selection */\n\n.will-root .will-calendar-filter-container .no-active-selection-start,\n.will-root .will-calendar-filter-container .no-active-selection-mid,\n.will-root .will-calendar-filter-container .no-active-selection-end {\n position: initial;\n}\n\n.will-root .will-calendar-filter-container .no-active-selection-start::before,\n.will-root .will-calendar-filter-container .no-active-selection-mid::before,\n.will-root .will-calendar-filter-container .no-active-selection-end::before {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n border: 2px solid var(--will-light-grey);\n box-sizing: border-box;\n}\n\n.will-root .will-calendar-filter-container .no-active-selection-start::before {\n border-right: none;\n border-top-left-radius: 50%;\n border-bottom-left-radius: 50%;\n}\n\n.will-root .will-calendar-filter-container .no-active-selection-mid::before {\n border-right: none;\n border-left: none;\n}\n\n.will-root .will-calendar-filter-container .no-active-selection-end::before {\n border-left: none;\n border-top-right-radius: 50%;\n border-bottom-right-radius: 50%;\n}\n\n.will-root\n .will-calendar-filter-container\n .rdp-day_selected.rdp-day_range_middle.checkout-option {\n background-color: var(--will-primary-lightest);\n color: inherit;\n}\n\n/* Overlapping date */\n\n.will-root .will-calendar-filter-container .overlapping-date {\n user-select: none;\n pointer-events: none;\n}\n\n.will-root .will-calendar-filter-container .overlapping-date:hover {\n cursor: not-allowed;\n}\n\n@media (max-width: 600px) {\n /* Tooltips */\n .will-root .will-calendar-filter-container .will-calendar-tooltip,\n .will-root .will-calendar-filter-container .will-calendar-tooltip-check-out,\n .will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-overlapping-date,\n .will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-out-only,\n .will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-in-only {\n top: -70px;\n white-space: wrap;\n max-width: 120px;\n }\n}\n";
11477
- styleInject(css_248z$c);
11478
-
11479
- var Calendar = forwardRef(function (_a, ref) {
11480
- var _b;
11481
- var selectedPath = _a.selectedPath, calendarRange = _a.calendarRange, setCalendarRange = _a.setCalendarRange, language = _a.language, disableCalendarDates = _a.disableCalendarDates, requestDates = _a.requestDates, disabledDates = _a.disabledDates, updateCalendarMonthNavigation = _a.updateCalendarMonthNavigation, setUpdateCalendarMonthNavigation = _a.setUpdateCalendarMonthNavigation, updateCalendarDefaultMonth = _a.updateCalendarDefaultMonth, loadingData = _a.loadingData, showFeedback = _a.showFeedback, palette = _a.palette, setCalendarHasError = _a.setCalendarHasError, setUpdatedForSubmit = _a.setUpdatedForSubmit, rangeContext = _a.rangeContext, calendarHasError = _a.calendarHasError, autoFocus = _a.autoFocus;
11482
- // Translations
11483
- var t = useTranslation('common').t;
11484
- var calendarContainerRef = useAutoFocus(autoFocus);
11485
- var isTablet = reactResponsiveExports.useMediaQuery({ maxWidth: 960 });
11486
- var today = startOfDay(new Date());
11487
- var selectedStartDate = calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from;
11488
- var rangeContextStartDate = rangeContext === null || rangeContext === void 0 ? void 0 : rangeContext.from;
11489
- // Handle initial disable dates including overlapping availableDates.lastCheckOut and disabledDates.start
11490
- var _c = useUpdateDisabledDates({
11491
- disableCalendarDates: disableCalendarDates,
11492
- calendarRange: calendarRange,
11493
- updateCalendarMonthNavigation: updateCalendarMonthNavigation,
11494
- updateCalendarDefaultMonth: updateCalendarDefaultMonth,
11495
- }), newDisableCalendarDates = _c.newDisableCalendarDates, overlappingDate = _c.overlappingDate, lastPossibleCheckout = _c.lastPossibleCheckout;
11496
- // Handle disable dates by page
11497
- var disabledDatesByPage$1 = disabledDatesByPage({
11498
- today: today,
11499
- selectedPath: selectedPath,
11500
- newDisableCalendarDates: newDisableCalendarDates,
11501
- });
11502
- // Handle tooltip
11503
- useCalendarTooltips({
11504
- showFeedback: showFeedback,
11505
- });
11506
- // Handle loading spinner
11507
- useCalendarLoadingSpinner({
11508
- loadingData: loadingData,
11509
- });
11510
- // Handle the date selection and availability for selection logic.
11511
- var handleOnSelect = function (range) {
11512
- setCalendarHasError && calendarHasError && setCalendarHasError(false);
11513
- calendarSelectionRules({
11514
- range: range,
11515
- newDisableCalendarDates: newDisableCalendarDates,
11516
- setCalendarRange: setCalendarRange,
11517
- calendarRange: calendarRange,
11518
- overlappingDate: overlappingDate,
11519
- setCalendarHasError: setCalendarHasError,
11520
- rangeContext: rangeContext,
11521
- });
11522
- setUpdatedForSubmit && setUpdatedForSubmit(true);
11523
- };
11524
- // Handle disabled dates for range context
11525
- var _d = handleRangeContextDisabledDates({
11526
- rangeContext: rangeContext,
11527
- availableDates: newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.availableDates,
11528
- calendarRange: calendarRange,
11529
- }), findFirstPossibleRangeContextCheckIn = _d.findFirstPossibleRangeContextCheckIn, findLastPossibleRangeContextCheckOut = _d.findLastPossibleRangeContextCheckOut, firstPossibleRangeContextCheckIn = _d.firstPossibleRangeContextCheckIn, lastPossibleRangeContextCheckOut = _d.lastPossibleRangeContextCheckOut, currentSelectionAvailability = _d.currentSelectionAvailability;
11530
- // Handle check for continuous selection in the range context
11531
- checkForContinuousSelection({
11532
- setCalendarHasError: setCalendarHasError,
11533
- rangeContext: rangeContext,
11534
- calendarRange: calendarRange,
11535
- calendarHasError: calendarHasError,
11536
- disabledDates: newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.disabledDates,
11666
+ // Case: If the selected dates do not overlap with the rangeContext during continuous selection,
11667
+ // set setCalendarHasError to true. This will display an error message and
11668
+ // prevent the submission of the selected dates.
11669
+ var checkForContinuousSelection = function (_a) {
11670
+ var setCalendarHasError = _a.setCalendarHasError, rangeContext = _a.rangeContext, calendarRange = _a.calendarRange, calendarHasError = _a.calendarHasError, disabledDates = _a.disabledDates;
11671
+ var calendarRangeFrom = (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) && endOfDay(calendarRange.from);
11672
+ var calendarRangeTo = (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) && endOfDay(calendarRange.to);
11673
+ var rangeContextFrom = (rangeContext === null || rangeContext === void 0 ? void 0 : rangeContext.from) && endOfDay(rangeContext.from);
11674
+ var rangeContextTo = (rangeContext === null || rangeContext === void 0 ? void 0 : rangeContext.to) && endOfDay(rangeContext.to);
11675
+ // Checking if rangeFrom is equal to or before rangeContextTo
11676
+ var startIsEqualOrBeforeRangeContextEnd = calendarRangeFrom && rangeContextTo
11677
+ ? isBefore(calendarRangeFrom, rangeContextTo) ||
11678
+ isEqual(calendarRangeFrom, rangeContextTo)
11679
+ : null;
11680
+ // Checking if rangeTo is equal to or after rangeContextFrom
11681
+ var endIsEqualOrAfterRangeContextStart = calendarRangeTo && rangeContextFrom && rangeContextTo
11682
+ ? isAfter(calendarRangeTo, rangeContextFrom) ||
11683
+ isEqual(calendarRangeTo, rangeContextFrom)
11684
+ : null;
11685
+ // Check if selection overlapping unavailable dates
11686
+ var selectionOverlappingUnavailableDate = disabledDates === null || disabledDates === void 0 ? void 0 : disabledDates.find(function (range) {
11687
+ var rangeFrom = endOfDay(range.from);
11688
+ var rangeTo = endOfDay(range.to);
11689
+ return (rangeContextFrom &&
11690
+ rangeContextTo &&
11691
+ areIntervalsOverlapping({ start: rangeContextFrom, end: rangeContextTo }, { start: rangeFrom, end: rangeTo }) &&
11692
+ calendarRangeFrom &&
11693
+ calendarRangeTo &&
11694
+ areIntervalsOverlapping({ start: calendarRangeFrom, end: calendarRangeTo }, { start: rangeFrom, end: rangeTo }));
11537
11695
  });
11538
- var disabledInsideSelectableRange = function () {
11539
- if (
11540
- // Range end already selected
11541
- (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) ||
11542
- // No current check-in availability
11543
- !currentSelectionAvailability ||
11544
- // No gap between check-in and first possible check-out, nothing to disable
11545
- addDays(currentSelectionAvailability.checkIn, 1) >=
11546
- currentSelectionAvailability.firstCheckOut) {
11547
- return [];
11548
- }
11549
- // Disable dates between current check-in and first possible check-out
11550
- return [
11551
- {
11552
- from: addDays(currentSelectionAvailability.checkIn, 1),
11553
- to: addDays(currentSelectionAvailability.firstCheckOut, -1),
11554
- },
11555
- ];
11556
- };
11557
- var base = disabledDatesByPage$1.length
11558
- ? disabledDatesByPage$1
11559
- : (disabledDates === null || disabledDates === void 0 ? void 0 : disabledDates.length)
11560
- ? disabledDates
11561
- : (newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.disabledDates) || [];
11562
- var disabled = disabledDatesByPage$1.length
11563
- ? base
11564
- : __spreadArray$1(__spreadArray$1(__spreadArray$1(__spreadArray$1([
11565
- lastPossibleCheckout
11566
- ], __read(base), false), __read(firstPossibleRangeContextCheckIn), false), __read(lastPossibleRangeContextCheckOut), false), __read(disabledInsideSelectableRange()), false);
11567
- return (jsx("div", { className: "will-filter-bar-calendar", ref: ref, children: jsxs("div", { className: "will-calendar-filter-container", ref: calendarContainerRef, children: [jsx(DayPicker, { id: "will-calendar", mode: "range", locale: language === 'en' ? enUS : fi, numberOfMonths: !isTablet ? 2 : 1, weekStartsOn: 1, selected: calendarRange, onSelect: function (range) { return handleOnSelect(range); }, captionLayout: "dropdown-buttons", defaultMonth: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) ||
11568
- selectedStartDate ||
11569
- rangeContextStartDate ||
11570
- (((_b = newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.length)
11571
- ? newDisableCalendarDates.disabledDates[0].from
11572
- : today), disabled: disabled, fromMonth: today, onMonthChange: function (val) {
11573
- requestDates === null || requestDates === void 0 ? void 0 : requestDates(val);
11574
- setUpdateCalendarMonthNavigation === null || setUpdateCalendarMonthNavigation === void 0 ? void 0 : setUpdateCalendarMonthNavigation(function (prev) { return !prev; });
11575
- }, classNames: {
11576
- day_range_start: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) ? 'rdp-day_range_start' : '',
11577
- day_range_end: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) ? 'rdp-day_range_end' : '',
11578
- }, modifiersClassNames: {
11579
- today: 'my-today',
11580
- booked: 'booked',
11581
- disabledAfterCheckIn: 'disabled-after-check-in',
11582
- overlappingDate: 'overlapping-date',
11583
- noActiveSelectionStart: 'no-active-selection-start',
11584
- noActiveSelectionMid: 'no-active-selection-mid',
11585
- noActiveSelectionEnd: 'no-active-selection-end',
11586
- checkoutOptionsMid: 'rdp-day_selected rdp-day_range_middle checkout-option',
11587
- checkInOnly: 'check-in-only',
11588
- checkOutOnly: 'check-out-only',
11589
- }, modifiers:
11590
- // This function handles conditions for applying the modifiersClassNames
11591
- handleCalendarModifiers({
11592
- calendarRange: calendarRange,
11593
- disabledDates: disabled,
11594
- overlappingDate: overlappingDate,
11595
- rangeContext: rangeContext,
11596
- findFirstPossibleRangeContextCheckIn: findFirstPossibleRangeContextCheckIn,
11597
- findLastPossibleRangeContextCheckOut: findLastPossibleRangeContextCheckOut,
11598
- currentSelectionLastCheckoutDate: currentSelectionAvailability,
11599
- }) }, updateCalendarDefaultMonth), jsx("div", { className: 'will-calendar-tooltip', children: jsx("div", { children: t('noCheckIn') }) }), jsx("div", { className: 'will-calendar-tooltip-check-out', children: jsx("div", { children: t('noCheckOut') }) }), jsx("div", { className: 'will-calendar-tooltip-overlapping-date', children: jsx("div", { children: t('checkOutOnly') }) }), jsx("div", { className: 'will-calendar-tooltip-check-in-only', children: jsx("div", { children: t('checkInOnly') }) }), jsx("div", { className: 'will-calendar-tooltip-check-out-only', children: jsx("div", { children: t('checkOutOnly') }) }), jsx("div", { className: 'will-calendar-spinner', children: jsx(IconsSvg, { fill: (palette === null || palette === void 0 ? void 0 : palette.primary) || 'inherit', size: 50, icon: "spinner" }) })] }) }));
11600
- });
11601
-
11602
- var parseGuests = function (_a) {
11603
- var guestLabel = _a.guestLabel, guestsLabel = _a.guestsLabel, guestsPlaceholder = _a.guestsPlaceholder, ageCategoryCounts = _a.ageCategoryCounts, ageCategories = _a.ageCategories;
11604
- var parsedData = Object.entries(ageCategoryCounts).reduce(function (acc, _a) {
11605
- var _b = __read(_a, 2), key = _b[0], value = _b[1];
11606
- var parts = key.split('-');
11607
- if (parts.length < 2)
11608
- return acc;
11609
- var ageCategoryId = parts[1];
11610
- var ageCategory = ageCategories.find(function (c) { return c.id === ageCategoryId; });
11611
- if (ageCategory && value) {
11612
- return {
11613
- total: acc.total + value,
11614
- html: __spreadArray$1(__spreadArray$1([], __read(acc.html), false), ["".concat(value)], false),
11615
- };
11696
+ useEffect(function () {
11697
+ if ((rangeContext &&
11698
+ calendarRangeFrom &&
11699
+ !startIsEqualOrBeforeRangeContextEnd) ||
11700
+ (rangeContext &&
11701
+ calendarRangeTo &&
11702
+ !endIsEqualOrAfterRangeContextStart) ||
11703
+ selectionOverlappingUnavailableDate) {
11704
+ !!(setCalendarHasError && !calendarHasError) && setCalendarHasError(true);
11616
11705
  }
11617
- return acc;
11618
- }, { total: 0, html: [] });
11619
- var htmlString = parsedData.html.length > 1 ? parsedData.html.join(' + ') : '';
11620
- return {
11621
- content: parsedData.total
11622
- ? "<span class=\"will-guest-count\">".concat(parsedData.total, "</span> ").concat(parsedData.total > 1 ? guestsLabel : guestLabel).concat(htmlString ? " &nbsp; ( ".concat(htmlString, " )") : '')
11623
- : guestsPlaceholder,
11624
- data: parsedData,
11625
- };
11706
+ });
11626
11707
  };
11627
11708
 
11628
- var parseLocations = function (_a) {
11629
- var selectedLocations = _a.selectedLocations, locationsPlaceholder = _a.locationsPlaceholder, _b = _a.locationsSelectedLabel, locationsSelectedLabel = _b === void 0 ? 'locations' : _b;
11630
- if (!selectedLocations.length) {
11631
- return locationsPlaceholder;
11632
- }
11633
- if (selectedLocations.length === 1) {
11634
- var translation = selectedLocations[0].label;
11635
- if (!translation) {
11636
- return locationsPlaceholder;
11709
+ var useCalendarTooltips = function (_a) {
11710
+ var showFeedback = _a.showFeedback;
11711
+ return useEffect(function () {
11712
+ if (typeof document === 'undefined' || !showFeedback)
11713
+ return;
11714
+ // Children
11715
+ var calendarTooltip = document.querySelector('.will-calendar-tooltip');
11716
+ var calendarTooltipCheckOut = document.querySelector('.will-calendar-tooltip-check-out');
11717
+ var calendarTooltipOverlappingDate = document.querySelector('.will-calendar-tooltip-overlapping-date');
11718
+ var loadingSpinner = document.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
11719
+ var calendarTooltipCheckInOnly = document.querySelector('.will-calendar-tooltip-check-in-only');
11720
+ var calendarTooltipCheckOutOnly = document.querySelector('.will-calendar-tooltip-check-out-only');
11721
+ // Parents
11722
+ var calendarButtons = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked):not(:has(.disabled-after-check-in))');
11723
+ var calendarButtonsCheckOut = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked.disabled-after-check-in)');
11724
+ var calendarMonthContainer = document.querySelector('.will-filter-bar-calendar .rdp-months');
11725
+ var calendarOverlappingDate = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.overlapping-date)');
11726
+ var calendarCheckInOnly = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.check-in-only)');
11727
+ var calendarCheckOutOnly = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.check-out-only)');
11728
+ // Append children to parents
11729
+ var tooltipClonesCheckIn = [];
11730
+ var tooltipClonesCheckOut = [];
11731
+ var tooltipClonesCheckInOnly = [];
11732
+ var tooltipClonesCheckOutOnly = [];
11733
+ var tooltipClonesSpinner = [];
11734
+ var tooltipClonesOverlappingDates = [];
11735
+ if (calendarTooltip && calendarButtons.length > 0) {
11736
+ calendarButtons.forEach(function (element) {
11737
+ var tooltipClone = calendarTooltip.cloneNode(true);
11738
+ element.appendChild(tooltipClone);
11739
+ tooltipClonesCheckIn.push(tooltipClone);
11740
+ });
11637
11741
  }
11638
- return translation;
11639
- }
11640
- return "".concat(selectedLocations.length, " ").concat(locationsSelectedLabel);
11641
- };
11642
-
11643
- var FilterSections;
11644
- (function (FilterSections) {
11645
- FilterSections["CALENDAR"] = "calendar";
11646
- FilterSections["GUESTS"] = "guests";
11647
- FilterSections["CATEGORIES"] = "categories";
11648
- FilterSections["LOCATIONS"] = "locations";
11649
- })(FilterSections || (FilterSections = {}));
11650
- var Pages;
11651
- (function (Pages) {
11652
- Pages["ROOMS"] = "/rooms";
11653
- Pages["EVENTS"] = "/events";
11654
- Pages["SALES"] = "/sales";
11655
- })(Pages || (Pages = {}));
11656
-
11657
- var calculateDropdownPosition = function (_a) {
11658
- var filterSection = _a.filterSection, headerRef = _a.headerRef, locationsButtonRef = _a.locationsButtonRef, datesButtonRef = _a.datesButtonRef, guestsButtonRef = _a.guestsButtonRef, isMobile = _a.isMobile;
11659
- // On mobile, don't apply any positioning - let CSS handle it naturally
11660
- // Dropdowns will start from leftmost point with position: relative
11661
- if (isMobile) {
11662
- return {};
11663
- }
11664
- if (!headerRef.current)
11665
- return {};
11666
- var containerRect = headerRef.current.getBoundingClientRect();
11667
- var containerLeft = 0;
11668
- switch (filterSection) {
11669
- case FilterSections.LOCATIONS:
11670
- // Locations: Start from beginning, hug content
11671
- if (locationsButtonRef.current) {
11672
- var buttonRect = locationsButtonRef.current.getBoundingClientRect();
11673
- var relativeLeft = buttonRect.left - containerRect.left;
11674
- return {
11675
- left: relativeLeft,
11676
- right: 'auto',
11677
- width: 'auto',
11678
- };
11679
- }
11680
- break;
11681
- case FilterSections.CALENDAR:
11682
- // Calendar: Two months side-by-side, needs ~650-700px
11683
- // Start from dates button, but push left if not enough space
11684
- if (datesButtonRef.current) {
11685
- var buttonRect = datesButtonRef.current.getBoundingClientRect();
11686
- var relativeLeft = buttonRect.left - containerRect.left;
11687
- var availableWidth = containerRect.width - relativeLeft;
11688
- var calendarMinWidth = 650;
11689
- if (availableWidth < calendarMinWidth) {
11690
- // Not enough space, align to the right edge
11691
- return {
11692
- left: 'auto',
11693
- right: containerLeft,
11694
- width: 'auto',
11695
- maxWidth: "".concat(containerRect.width, "px"),
11696
- };
11697
- }
11698
- else {
11699
- // Enough space, start from dates button
11700
- return {
11701
- left: relativeLeft,
11702
- right: 'auto',
11703
- width: 'auto',
11704
- };
11705
- }
11706
- }
11707
- break;
11708
- case FilterSections.GUESTS:
11709
- // Guests: Start from guests button, push left if not enough space
11710
- if (guestsButtonRef.current) {
11711
- var buttonRect = guestsButtonRef.current.getBoundingClientRect();
11712
- var relativeLeft = buttonRect.left - containerRect.left;
11713
- var availableWidth = containerRect.width - relativeLeft;
11714
- var dropdownMinWidth = 350;
11715
- if (availableWidth < dropdownMinWidth) {
11716
- // Not enough space, align to the right
11717
- return {
11718
- left: 'auto',
11719
- right: containerLeft,
11720
- width: 'auto',
11721
- maxWidth: "".concat(containerRect.width, "px"),
11722
- };
11723
- }
11724
- else {
11725
- // Enough space, start from button
11726
- return {
11727
- left: relativeLeft,
11728
- right: 'auto',
11729
- width: 'auto',
11730
- };
11731
- }
11732
- }
11733
- break;
11734
- default:
11735
- return {};
11736
- }
11737
- return {};
11738
- };
11739
-
11740
- var useFilterBar = function (_a) {
11741
- var redirectUrl = _a.redirectUrl, ageCategories = _a.ageCategories, onSubmit = _a.onSubmit, tabs = _a.tabs, locations = _a.locations;
11742
- var _b = __read(useState(Pages.EVENTS), 2), selectedPath = _b[0], setSelectedPath = _b[1];
11743
- var _c = __read(useState(false), 2), selectedFilter = _c[0], setSelectedFilter = _c[1];
11744
- var _d = __read(useState(), 2), calendarRange = _d[0], setCalendarRange = _d[1];
11745
- var _e = __read(useState(false), 2), innerLoading = _e[0], setInnerLoading = _e[1];
11746
- var _f = __read(useState(0), 2), categories = _f[0], setCategories = _f[1];
11747
- var _g = __read(useState({}), 2), ageCategoryCounts = _g[0], setAgeCategoryCounts = _g[1];
11748
- var _h = __read(useState([]), 2), selectedLocations = _h[0], setSelectedLocations = _h[1];
11749
- useEffect(function () {
11750
- var _a;
11751
- var urlSearchParams = new URLSearchParams(window.location.search);
11752
- var startDateParam = urlSearchParams.get('startDate');
11753
- var endDateParam = urlSearchParams.get('endDate');
11754
- // Get all locationId params from URL
11755
- var locationIdParams = urlSearchParams.getAll('locationId');
11756
- var ageCategoryCountsParam = JSON.parse(urlSearchParams.get('ageCategoryCounts') || '{}');
11757
- var parsedCategories = parseInt(urlSearchParams.get('categories') || '0', 10);
11758
- if (startDateParam && endDateParam) {
11759
- setCalendarRange({
11760
- from: new Date(startDateParam),
11761
- to: new Date(endDateParam),
11742
+ if (calendarTooltipCheckOut && calendarButtonsCheckOut.length > 0) {
11743
+ calendarButtonsCheckOut.forEach(function (element) {
11744
+ var tooltipClone = calendarTooltipCheckOut.cloneNode(true);
11745
+ element.appendChild(tooltipClone);
11746
+ tooltipClonesCheckOut.push(tooltipClone);
11762
11747
  });
11763
11748
  }
11764
- setAgeCategoryCounts(ageCategoryCountsParam);
11765
- setCategories(parsedCategories);
11766
- // Set selected locations from URL - handle all locationIds
11767
- if (((_a = locations === null || locations === void 0 ? void 0 : locations.data) === null || _a === void 0 ? void 0 : _a.length) && locationIdParams.length) {
11768
- var matchedLocations = locations.data.filter(function (location) {
11769
- return locationIdParams.includes(location.id.toString());
11749
+ if (calendarTooltipCheckOutOnly && calendarCheckOutOnly.length > 0) {
11750
+ calendarCheckOutOnly.forEach(function (element) {
11751
+ var tooltipClone = calendarTooltipCheckOutOnly.cloneNode(true);
11752
+ element.appendChild(tooltipClone);
11753
+ tooltipClonesCheckOutOnly.push(tooltipClone);
11770
11754
  });
11771
- setSelectedLocations(matchedLocations);
11772
11755
  }
11773
- }, []);
11774
- useEffect(function () {
11775
- if (typeof window === 'undefined')
11776
- return;
11777
- var defaultTab = (tabs === null || tabs === void 0 ? void 0 : tabs.length) === 1 ? tabs[0] : tabs === null || tabs === void 0 ? void 0 : tabs.find(function (tab) { return tab.default; });
11778
- var findMatchingPath = function () {
11779
- var e_1, _a;
11780
- var paths = [Pages.EVENTS, Pages.ROOMS, Pages.SALES];
11781
- try {
11782
- for (var paths_1 = __values(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {
11783
- var path = paths_1_1.value;
11784
- if (window.location.pathname.includes(path)) {
11785
- return path;
11786
- }
11787
- }
11788
- }
11789
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
11790
- finally {
11791
- try {
11792
- if (paths_1_1 && !paths_1_1.done && (_a = paths_1.return)) _a.call(paths_1);
11793
- }
11794
- finally { if (e_1) throw e_1.error; }
11795
- }
11796
- return defaultTab ? defaultTab.path : Pages.EVENTS;
11797
- };
11798
- var currentPath = findMatchingPath();
11799
- setSelectedPath(currentPath);
11800
- }, []);
11801
- var updateGuestsCount = function (id, newCount) {
11802
- setAgeCategoryCounts(function (prevCounts) {
11803
- var _a;
11804
- return (__assign$2(__assign$2({}, prevCounts), (_a = {}, _a[id] = newCount, _a)));
11805
- });
11806
- };
11807
- var handleSelectedFilter = function (id) {
11808
- setSelectedFilter(id);
11809
- };
11810
- var handleSubmit = function () {
11811
- var e_2, _a;
11812
- var newParams = {
11813
- startDate: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from)
11814
- ? format(calendarRange.from, 'yyyy-MM-dd')
11815
- : '',
11816
- endDate: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) ? format(calendarRange.to, 'yyyy-MM-dd') : '',
11817
- //categories: categories.toString(),
11818
- ageCategoryCounts: handleAgeCategoryRules({
11819
- ageCategoryCounts: ageCategoryCounts,
11820
- ageCategories: ageCategories,
11821
- }),
11822
- selectedLocations: selectedLocations
11823
- .map(function (location) { return location.id.toString(); })
11824
- .join(','),
11825
- };
11826
- var querySearchParams = new URLSearchParams();
11827
- try {
11828
- for (var _b = __values(Object.entries(newParams)), _c = _b.next(); !_c.done; _c = _b.next()) {
11829
- var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
11830
- if (value) {
11831
- if (key === 'selectedLocations' && !!selectedLocations.length) {
11832
- // Append all selected locationIds
11833
- selectedLocations.forEach(function (location) {
11834
- querySearchParams.append('locationId', location.id.toString());
11835
- });
11836
- }
11837
- else {
11838
- querySearchParams.append(key, value.toString());
11839
- }
11840
- }
11841
- }
11756
+ if (calendarTooltipCheckInOnly && calendarCheckInOnly.length > 0) {
11757
+ calendarCheckInOnly.forEach(function (element) {
11758
+ var tooltipClone = calendarTooltipCheckInOnly.cloneNode(true);
11759
+ element.appendChild(tooltipClone);
11760
+ tooltipClonesCheckInOnly.push(tooltipClone);
11761
+ });
11842
11762
  }
11843
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
11844
- finally {
11845
- try {
11846
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
11847
- }
11848
- finally { if (e_2) throw e_2.error; }
11763
+ if (loadingSpinner && calendarMonthContainer) {
11764
+ var tooltipClone = loadingSpinner.cloneNode(true);
11765
+ calendarMonthContainer.appendChild(tooltipClone);
11766
+ tooltipClonesSpinner.push(tooltipClone);
11849
11767
  }
11850
- handleSelectedFilter(false);
11851
- if (onSubmit && window.location.href.includes(selectedPath)) {
11852
- onSubmit(newParams);
11768
+ if (calendarTooltipOverlappingDate && calendarOverlappingDate.length > 0) {
11769
+ calendarOverlappingDate.forEach(function (element) {
11770
+ var tooltipClone = calendarTooltipOverlappingDate.cloneNode(true);
11771
+ element.appendChild(tooltipClone);
11772
+ tooltipClonesOverlappingDates.push(tooltipClone);
11773
+ });
11774
+ }
11775
+ return function () {
11776
+ tooltipClonesCheckIn.forEach(function (clone) { return clone.remove(); });
11777
+ tooltipClonesCheckOut.forEach(function (clone) { return clone.remove(); });
11778
+ tooltipClonesSpinner.forEach(function (clone) { return clone.remove(); });
11779
+ tooltipClonesOverlappingDates.forEach(function (clone) { return clone.remove(); });
11780
+ tooltipClonesCheckInOnly.forEach(function (clone) { return clone.remove(); });
11781
+ tooltipClonesCheckOutOnly.forEach(function (clone) { return clone.remove(); });
11782
+ };
11783
+ });
11784
+ };
11785
+
11786
+ var useCalendarLoadingSpinner = function (_a) {
11787
+ var loadingData = _a.loadingData;
11788
+ return useEffect(function () {
11789
+ if (typeof document === 'undefined')
11790
+ return;
11791
+ var loadingSpinner = document.querySelector('.will-filter-bar-calendar .rdp-months .will-calendar-spinner');
11792
+ if (loadingData) {
11793
+ if (loadingSpinner)
11794
+ loadingSpinner.style.display = 'flex';
11853
11795
  }
11854
11796
  else {
11855
- var params = new URLSearchParams(querySearchParams !== null && querySearchParams !== void 0 ? querySearchParams : undefined);
11856
- var paramString = params.toString();
11857
- var path = "".concat(redirectUrl).concat(selectedPath);
11858
- setInnerLoading(true);
11859
- window.location.href = paramString ? "".concat(path, "?").concat(paramString) : path;
11797
+ if (loadingSpinner)
11798
+ loadingSpinner.style.display = 'none';
11860
11799
  }
11861
- };
11862
- var handleResetFilters = function () {
11863
- setAgeCategoryCounts({});
11864
- setCalendarRange(undefined);
11865
- };
11866
- return {
11867
- selectedFilter: selectedFilter,
11868
- ageCategoryCounts: ageCategoryCounts,
11869
- categories: categories,
11870
- calendarRange: calendarRange,
11871
- selectedPath: selectedPath,
11872
- innerLoading: innerLoading,
11873
- selectedLocations: selectedLocations,
11874
- setSelectedLocations: setSelectedLocations,
11875
- setCalendarRange: setCalendarRange,
11876
- setSelectedFilter: setSelectedFilter,
11877
- setAgeCategoryCounts: setAgeCategoryCounts,
11878
- setCategories: setCategories,
11879
- handleSelectedFilter: handleSelectedFilter,
11880
- handleSubmit: handleSubmit,
11881
- updateGuestsCount: updateGuestsCount,
11882
- handleResetFilters: handleResetFilters,
11883
- setSelectedPath: setSelectedPath,
11884
- };
11800
+ });
11885
11801
  };
11886
- ////////////
11887
- var handleAgeCategoryRules = function (_a) {
11888
- var ageCategoryCounts = _a.ageCategoryCounts, ageCategories = _a.ageCategories;
11889
- if (ageCategories === null || ageCategories === void 0 ? void 0 : ageCategories.length) {
11890
- ageCategories === null || ageCategories === void 0 ? void 0 : ageCategories.map(function (a) {
11891
- if (a.minVal) {
11892
- // Age categories rules
11893
- var ageCategory = ageCategoryCounts["guests-".concat(a.id)];
11894
- if (!ageCategory) {
11895
- ageCategoryCounts["guests-".concat(a.id)] = a.minVal;
11802
+
11803
+ var useUpdateDisabledDates = function (_a) {
11804
+ var disableCalendarDates = _a.disableCalendarDates, calendarRange = _a.calendarRange, updateCalendarMonthNavigation = _a.updateCalendarMonthNavigation, updateCalendarDefaultMonth = _a.updateCalendarDefaultMonth;
11805
+ var _b = __read(useState(undefined), 2), overlappingDate = _b[0], setOverlappingDate = _b[1];
11806
+ var _c = __read(useState([]), 2), lastPossibleCheckout = _c[0], setLatsPossibleCheckout = _c[1];
11807
+ var newDisableCalendarDates = useMemo(function () {
11808
+ var _a;
11809
+ if (disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.availableDates) {
11810
+ var dateFormat_1 = 'dd-MM-yyyy';
11811
+ var disabledDates = disableCalendarDates.disabledDates;
11812
+ var _b = (disabledDates || []).reduce(function (acc, dateRange) {
11813
+ var _a, _b;
11814
+ var formattedFromDate = format(dateRange.from, dateFormat_1);
11815
+ var formattedToDate = format(dateRange.to, dateFormat_1);
11816
+ var hasTwoOverlappingDates = (_a = disableCalendarDates.availableDates) === null || _a === void 0 ? void 0 : _a.some(function (item) {
11817
+ return format(item.lastCheckOut, dateFormat_1) === formattedFromDate &&
11818
+ format(item.lastCheckOut, dateFormat_1) === formattedToDate;
11819
+ });
11820
+ var hasOneOverlappingDate = (_b = disableCalendarDates.availableDates) === null || _b === void 0 ? void 0 : _b.some(function (item) {
11821
+ return format(item.lastCheckOut, dateFormat_1) === formattedFromDate &&
11822
+ format(item.lastCheckOut, dateFormat_1) !== formattedToDate;
11823
+ });
11824
+ if (hasTwoOverlappingDates) {
11825
+ acc.newOverlappingDates.push(dateRange);
11826
+ }
11827
+ else if (hasOneOverlappingDate) {
11828
+ acc.newOverlappingDates.push(dateRange);
11829
+ acc.updatedDisabledDates.push(__assign$2(__assign$2({}, dateRange), { from: addDays(dateRange.from, 1) }));
11830
+ }
11831
+ else {
11832
+ acc.updatedDisabledDates.push(dateRange);
11896
11833
  }
11834
+ return acc;
11835
+ }, { updatedDisabledDates: [], newOverlappingDates: [] }), updatedDisabledDates = _b.updatedDisabledDates, newOverlappingDates = _b.newOverlappingDates;
11836
+ // Find last possible checkout ( disable all dates after the last possible checkout )
11837
+ var lastPossibleCheckoutDate = (_a = disableCalendarDates.availableDates.at(-1)) === null || _a === void 0 ? void 0 : _a.lastCheckOut;
11838
+ if (lastPossibleCheckoutDate) {
11839
+ setLatsPossibleCheckout({ after: lastPossibleCheckoutDate });
11897
11840
  }
11898
- });
11899
- }
11900
- return Object.entries(ageCategoryCounts).length
11901
- ? JSON.stringify(ageCategoryCounts)
11902
- : '';
11841
+ // Extract overlapping dates ( dates that are only available for checkout )
11842
+ if (newOverlappingDates.length) {
11843
+ setOverlappingDate(__spreadArray$1([], __read(newOverlappingDates), false));
11844
+ }
11845
+ var newDisableCalendarDates_1 = __assign$2(__assign$2({}, disableCalendarDates), { disabledDates: updatedDisabledDates });
11846
+ return newDisableCalendarDates_1;
11847
+ }
11848
+ return disableCalendarDates;
11849
+ }, [
11850
+ disableCalendarDates,
11851
+ calendarRange,
11852
+ updateCalendarMonthNavigation,
11853
+ updateCalendarDefaultMonth,
11854
+ ]);
11855
+ return { newDisableCalendarDates: newDisableCalendarDates, overlappingDate: overlappingDate, lastPossibleCheckout: lastPossibleCheckout };
11903
11856
  };
11904
11857
 
11905
- var useScrollInToView = function (_a) {
11906
- var selectedFilter = _a.selectedFilter;
11907
- var _b = __read(useState(true), 2), isMobile = _b[0], setIsMobile = _b[1];
11908
- var targetFilterBarRef = useRef(null);
11909
- useEffect(function () {
11910
- if (typeof window !== 'undefined' && window.innerWidth > 960) {
11911
- setIsMobile(false);
11912
- return;
11913
- }
11914
- if (targetFilterBarRef.current && selectedFilter) {
11915
- window.scrollTo({
11916
- behavior: 'smooth',
11917
- top: targetFilterBarRef.current.getBoundingClientRect().top -
11918
- document.body.getBoundingClientRect().top -
11919
- 30,
11920
- });
11858
+ var css_248z$e = ".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}";
11859
+ styleInject(css_248z$e);
11860
+
11861
+ var css_248z$d = ".will-calendar-filter-container {\n display: flex;\n justify-content: center;\n user-select: none;\n}\n\n/* Calendar overrides */\n.will-calendar-filter-container .rdp {\n margin: 0;\n}\n\n.will-calendar-filter-container .DayPicker {\n font-size: 25px;\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.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: 0.6;\n}\n\n.will-calendar-filter-container .rdp-table {\n border-collapse: separate;\n border-spacing: 0px 2px;\n}\n\n.will-calendar-filter-container\n .rdp-button_reset.rdp-button.rdp-day.rdp-day_selected {\n background-color: var(--will-primary);\n opacity: 1;\n color: var(--will-white);\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 color: var(--will-transparent-black);\n opacity: 1;\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/* Tooltips */\n.will-root .will-calendar-filter-container .will-calendar-tooltip,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-overlapping-date,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-out-only,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-in-only {\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\n.will-root .will-calendar-filter-container .will-calendar-tooltip > div,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-out\n > div,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-overlapping-date\n > div,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-out-only\n > div,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-in-only\n > 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\n .will-calendar-filter-container\n .will-calendar-tooltip-check-out::before,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-overlapping-date::before,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-out-only::before,\n.will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-in-only::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\n .will-calendar-filter-container\n .rdp-cell:hover\n .will-calendar-tooltip,\n.will-root\n .will-calendar-filter-container\n .rdp-cell:hover\n .will-calendar-tooltip-check-out,\n.will-root\n .will-calendar-filter-container\n .rdp-cell:hover\n .will-calendar-tooltip-overlapping-date,\n.will-root\n .will-calendar-filter-container\n .rdp-cell:hover\n .will-calendar-tooltip-check-out-only,\n.will-root\n .will-calendar-filter-container\n .rdp-cell:hover\n .will-calendar-tooltip-check-in-only {\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/* No active selection */\n\n.will-root .will-calendar-filter-container .no-active-selection-start,\n.will-root .will-calendar-filter-container .no-active-selection-mid,\n.will-root .will-calendar-filter-container .no-active-selection-end {\n position: initial;\n}\n\n.will-root .will-calendar-filter-container .no-active-selection-start::before,\n.will-root .will-calendar-filter-container .no-active-selection-mid::before,\n.will-root .will-calendar-filter-container .no-active-selection-end::before {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n border: 2px solid var(--will-light-grey);\n box-sizing: border-box;\n}\n\n.will-root .will-calendar-filter-container .no-active-selection-start::before {\n border-right: none;\n border-top-left-radius: 50%;\n border-bottom-left-radius: 50%;\n}\n\n.will-root .will-calendar-filter-container .no-active-selection-mid::before {\n border-right: none;\n border-left: none;\n}\n\n.will-root .will-calendar-filter-container .no-active-selection-end::before {\n border-left: none;\n border-top-right-radius: 50%;\n border-bottom-right-radius: 50%;\n}\n\n.will-root\n .will-calendar-filter-container\n .rdp-day_selected.rdp-day_range_middle.checkout-option {\n background-color: var(--will-primary-lightest);\n color: inherit;\n}\n\n/* Overlapping date */\n\n.will-root .will-calendar-filter-container .overlapping-date {\n user-select: none;\n pointer-events: none;\n}\n\n.will-root .will-calendar-filter-container .overlapping-date:hover {\n cursor: not-allowed;\n}\n\n@media (max-width: 600px) {\n /* Tooltips */\n .will-root .will-calendar-filter-container .will-calendar-tooltip,\n .will-root .will-calendar-filter-container .will-calendar-tooltip-check-out,\n .will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-overlapping-date,\n .will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-out-only,\n .will-root\n .will-calendar-filter-container\n .will-calendar-tooltip-check-in-only {\n top: -70px;\n white-space: wrap;\n max-width: 120px;\n }\n}\n";
11862
+ styleInject(css_248z$d);
11863
+
11864
+ var Calendar = forwardRef(function (_a, ref) {
11865
+ var _b;
11866
+ var selectedPath = _a.selectedPath, calendarRange = _a.calendarRange, setCalendarRange = _a.setCalendarRange, language = _a.language, disableCalendarDates = _a.disableCalendarDates, requestDates = _a.requestDates, disabledDates = _a.disabledDates, updateCalendarMonthNavigation = _a.updateCalendarMonthNavigation, setUpdateCalendarMonthNavigation = _a.setUpdateCalendarMonthNavigation, updateCalendarDefaultMonth = _a.updateCalendarDefaultMonth, loadingData = _a.loadingData, showFeedback = _a.showFeedback, palette = _a.palette, setCalendarHasError = _a.setCalendarHasError, setUpdatedForSubmit = _a.setUpdatedForSubmit, rangeContext = _a.rangeContext, calendarHasError = _a.calendarHasError, autoFocus = _a.autoFocus;
11867
+ // Translations
11868
+ var t = useTranslation('common').t;
11869
+ var calendarContainerRef = useAutoFocus(autoFocus);
11870
+ var isTablet = reactResponsiveExports.useMediaQuery({ maxWidth: 960 });
11871
+ var today = startOfDay(new Date());
11872
+ var selectedStartDate = calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from;
11873
+ var rangeContextStartDate = rangeContext === null || rangeContext === void 0 ? void 0 : rangeContext.from;
11874
+ // Handle initial disable dates including overlapping availableDates.lastCheckOut and disabledDates.start
11875
+ var _c = useUpdateDisabledDates({
11876
+ disableCalendarDates: disableCalendarDates,
11877
+ calendarRange: calendarRange,
11878
+ updateCalendarMonthNavigation: updateCalendarMonthNavigation,
11879
+ updateCalendarDefaultMonth: updateCalendarDefaultMonth,
11880
+ }), newDisableCalendarDates = _c.newDisableCalendarDates, overlappingDate = _c.overlappingDate, lastPossibleCheckout = _c.lastPossibleCheckout;
11881
+ // Handle disable dates by page
11882
+ var disabledDatesByPage$1 = disabledDatesByPage({
11883
+ today: today,
11884
+ selectedPath: selectedPath,
11885
+ newDisableCalendarDates: newDisableCalendarDates,
11886
+ });
11887
+ // Handle tooltip
11888
+ useCalendarTooltips({
11889
+ showFeedback: showFeedback,
11890
+ });
11891
+ // Handle loading spinner
11892
+ useCalendarLoadingSpinner({
11893
+ loadingData: loadingData,
11894
+ });
11895
+ // Handle the date selection and availability for selection logic.
11896
+ var handleOnSelect = function (range) {
11897
+ setCalendarHasError && calendarHasError && setCalendarHasError(false);
11898
+ calendarSelectionRules({
11899
+ range: range,
11900
+ newDisableCalendarDates: newDisableCalendarDates,
11901
+ setCalendarRange: setCalendarRange,
11902
+ calendarRange: calendarRange,
11903
+ overlappingDate: overlappingDate,
11904
+ setCalendarHasError: setCalendarHasError,
11905
+ rangeContext: rangeContext,
11906
+ });
11907
+ setUpdatedForSubmit && setUpdatedForSubmit(true);
11908
+ };
11909
+ // Handle disabled dates for range context
11910
+ var _d = handleRangeContextDisabledDates({
11911
+ rangeContext: rangeContext,
11912
+ availableDates: newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.availableDates,
11913
+ calendarRange: calendarRange,
11914
+ }), findFirstPossibleRangeContextCheckIn = _d.findFirstPossibleRangeContextCheckIn, findLastPossibleRangeContextCheckOut = _d.findLastPossibleRangeContextCheckOut, firstPossibleRangeContextCheckIn = _d.firstPossibleRangeContextCheckIn, lastPossibleRangeContextCheckOut = _d.lastPossibleRangeContextCheckOut, currentSelectionAvailability = _d.currentSelectionAvailability;
11915
+ // Handle check for continuous selection in the range context
11916
+ checkForContinuousSelection({
11917
+ setCalendarHasError: setCalendarHasError,
11918
+ rangeContext: rangeContext,
11919
+ calendarRange: calendarRange,
11920
+ calendarHasError: calendarHasError,
11921
+ disabledDates: newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.disabledDates,
11922
+ });
11923
+ var disabledInsideSelectableRange = function () {
11924
+ if (
11925
+ // Range end already selected
11926
+ (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) ||
11927
+ // No current check-in availability
11928
+ !currentSelectionAvailability ||
11929
+ // No gap between check-in and first possible check-out, nothing to disable
11930
+ addDays(currentSelectionAvailability.checkIn, 1) >=
11931
+ currentSelectionAvailability.firstCheckOut) {
11932
+ return [];
11921
11933
  }
11922
- }, [selectedFilter]);
11923
- return { isMobile: isMobile, targetFilterBarRef: targetFilterBarRef };
11934
+ // Disable dates between current check-in and first possible check-out
11935
+ return [
11936
+ {
11937
+ from: addDays(currentSelectionAvailability.checkIn, 1),
11938
+ to: addDays(currentSelectionAvailability.firstCheckOut, -1),
11939
+ },
11940
+ ];
11941
+ };
11942
+ var base = disabledDatesByPage$1.length
11943
+ ? disabledDatesByPage$1
11944
+ : (disabledDates === null || disabledDates === void 0 ? void 0 : disabledDates.length)
11945
+ ? disabledDates
11946
+ : (newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.disabledDates) || [];
11947
+ var disabled = disabledDatesByPage$1.length
11948
+ ? base
11949
+ : __spreadArray$1(__spreadArray$1(__spreadArray$1(__spreadArray$1([
11950
+ lastPossibleCheckout
11951
+ ], __read(base), false), __read(firstPossibleRangeContextCheckIn), false), __read(lastPossibleRangeContextCheckOut), false), __read(disabledInsideSelectableRange()), false);
11952
+ return (React__default.createElement("div", { className: "will-filter-bar-calendar", ref: ref },
11953
+ React__default.createElement("div", { className: "will-calendar-filter-container", ref: calendarContainerRef },
11954
+ React__default.createElement(DayPicker, { key: updateCalendarDefaultMonth, id: "will-calendar", mode: "range", locale: language === 'en' ? enUS : fi, numberOfMonths: !isTablet ? 2 : 1, weekStartsOn: 1, selected: calendarRange, onSelect: function (range) { return handleOnSelect(range); }, captionLayout: "dropdown-buttons", defaultMonth: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) ||
11955
+ selectedStartDate ||
11956
+ rangeContextStartDate ||
11957
+ (((_b = newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.length)
11958
+ ? newDisableCalendarDates.disabledDates[0].from
11959
+ : today), disabled: disabled, fromMonth: today, onMonthChange: function (val) {
11960
+ requestDates === null || requestDates === void 0 ? void 0 : requestDates(val);
11961
+ setUpdateCalendarMonthNavigation === null || setUpdateCalendarMonthNavigation === void 0 ? void 0 : setUpdateCalendarMonthNavigation(function (prev) { return !prev; });
11962
+ }, classNames: {
11963
+ day_range_start: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) ? 'rdp-day_range_start' : '',
11964
+ day_range_end: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) ? 'rdp-day_range_end' : '',
11965
+ }, modifiersClassNames: {
11966
+ today: 'my-today',
11967
+ booked: 'booked',
11968
+ disabledAfterCheckIn: 'disabled-after-check-in',
11969
+ overlappingDate: 'overlapping-date',
11970
+ noActiveSelectionStart: 'no-active-selection-start',
11971
+ noActiveSelectionMid: 'no-active-selection-mid',
11972
+ noActiveSelectionEnd: 'no-active-selection-end',
11973
+ checkoutOptionsMid: 'rdp-day_selected rdp-day_range_middle checkout-option',
11974
+ checkInOnly: 'check-in-only',
11975
+ checkOutOnly: 'check-out-only',
11976
+ }, modifiers:
11977
+ // This function handles conditions for applying the modifiersClassNames
11978
+ handleCalendarModifiers({
11979
+ calendarRange: calendarRange,
11980
+ disabledDates: disabled,
11981
+ overlappingDate: overlappingDate,
11982
+ rangeContext: rangeContext,
11983
+ findFirstPossibleRangeContextCheckIn: findFirstPossibleRangeContextCheckIn,
11984
+ findLastPossibleRangeContextCheckOut: findLastPossibleRangeContextCheckOut,
11985
+ currentSelectionLastCheckoutDate: currentSelectionAvailability,
11986
+ }) }),
11987
+ React__default.createElement("div", { className: 'will-calendar-tooltip' },
11988
+ React__default.createElement("div", null, t('noCheckIn'))),
11989
+ React__default.createElement("div", { className: 'will-calendar-tooltip-check-out' },
11990
+ React__default.createElement("div", null, t('noCheckOut'))),
11991
+ React__default.createElement("div", { className: 'will-calendar-tooltip-overlapping-date' },
11992
+ React__default.createElement("div", null, t('checkOutOnly'))),
11993
+ React__default.createElement("div", { className: 'will-calendar-tooltip-check-in-only' },
11994
+ React__default.createElement("div", null, t('checkInOnly'))),
11995
+ React__default.createElement("div", { className: 'will-calendar-tooltip-check-out-only' },
11996
+ React__default.createElement("div", null, t('checkOutOnly'))),
11997
+ React__default.createElement("div", { className: 'will-calendar-spinner' },
11998
+ React__default.createElement(IconsSvg, { fill: (palette === null || palette === void 0 ? void 0 : palette.primary) || 'inherit', size: 50, icon: "spinner" })))));
11999
+ });
12000
+
12001
+ var css_248z$c = ".will-filter-section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n}\n\n.will-filter-section-title {\n font-size: 22px;\n margin: 0;\n}\n\n.will-filter-section-action {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.will-filter-section-action .will-filter-bar-close-button {\n position: relative;\n top: auto;\n right: auto;\n margin: 0;\n}\n\n@media (max-width: 960px) {\n .will-filter-section-title {\n font-size: 18px;\n }\n}\n";
12002
+ styleInject(css_248z$c);
12003
+
12004
+ var SectionHeader = function (_a) {
12005
+ var title = _a.title, action = _a.action;
12006
+ return (React__default.createElement("div", { className: "will-filter-section-header" },
12007
+ React__default.createElement("h3", { className: "will-filter-section-title" }, title),
12008
+ action && React__default.createElement("div", { className: "will-filter-section-action" }, action)));
11924
12009
  };
11925
12010
 
11926
- var css_248z$b = ".will-filter-bar-select-button {\n width: 100%;\n height: auto;\n background-color: transparent;\n border: none;\n padding: 0 20px;\n border-radius: 20px;\n cursor: pointer;\n font-size: 14px;\n text-align: initial;\n}\n\n.will-filter-bar-select-button.disabled {\n cursor: not-allowed;\n}\n\n.will-filter-bar-select-button .select-button-wrapper {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.will-filter-bar-select-button .select-button-wrapper > div {\n display: grid;\n}\n\n.will-filter-bar-select-button .select-button-label {\n color: var(--will-black);\n font-weight: 600;\n}\n\n.will-filter-bar-select-button .select-button-description {\n color: var(--will-black);\n font-weight: 400;\n opacity: 0.5;\n white-space: nowrap;\n min-height: 19px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.will-filter-bar-select-button .select-button-description span {\n font: inherit;\n}\n\n.will-filter-bar-select-button .select-button-label.active,\n.will-filter-bar-select-button .select-button-description.active {\n font-weight: 700;\n font-size: 15px;\n opacity: 1;\n}\n\n@media (max-width: 960px) {\n .will-filter-bar-select-button {\n padding: 15px 0;\n }\n\n .will-filter-bar-select-button:first-child {\n padding: 0 0 15px 0;\n }\n\n .will-filter-bar-select-button .select-button-wrapper {\n justify-content: center;\n text-align: center;\n }\n\n .will-filter-bar-select-button .select-button-description {\n white-space: wrap;\n }\n\n .will-filter-bar-select-button .select-button-divider {\n display: none;\n }\n}\n";
12011
+ var css_248z$b = ".will-dates-filter-container {\n padding: 0 16px;\n}\n";
11927
12012
  styleInject(css_248z$b);
11928
12013
 
11929
- var SelectButton = forwardRef(function (_a, ref) {
11930
- var active = _a.active, label = _a.label, onClick = _a.onClick, description = _a.description, disabled = _a.disabled, ariaExpanded = _a.ariaExpanded, ariaControls = _a.ariaControls;
11931
- return (jsx("button", { ref: ref, className: "will-filter-bar-select-button ".concat(disabled ? 'disabled' : ''), onClick: disabled ? undefined : onClick, disabled: disabled, "aria-expanded": ariaExpanded, "aria-controls": ariaControls, "aria-haspopup": "true", "aria-disabled": disabled, children: jsx("span", { className: "select-button-wrapper", children: jsxs("div", { children: [jsx("p", { className: "select-button-label", children: label }), jsx("p", { className: "select-button-description ".concat(active ? 'active' : ''), dangerouslySetInnerHTML: { __html: description } })] }) }) }));
12014
+ var Dates = forwardRef(function (_a, ref) {
12015
+ var onClose = _a.onClose, autoFocus = _a.autoFocus, calendarRange = _a.calendarRange, setCalendarRange = _a.setCalendarRange, disableCalendarDates = _a.disableCalendarDates, selectedPath = _a.selectedPath, language = _a.language;
12016
+ return (React__default.createElement("div", { id: "will-filter-bar-dates", ref: ref },
12017
+ React__default.createElement(SectionHeader, { title: '', action: onClose && React__default.createElement(CloseButton, { handleClose: onClose }) }),
12018
+ React__default.createElement("div", { className: "will-dates-filter-container" },
12019
+ React__default.createElement(Calendar, { autoFocus: autoFocus, calendarRange: calendarRange, setCalendarRange: setCalendarRange, disableCalendarDates: disableCalendarDates, selectedPath: selectedPath, language: language }))));
11932
12020
  });
11933
- SelectButton.displayName = 'SelectButton';
12021
+ Dates.displayName = 'Dates';
11934
12022
 
11935
- var css_248z$a = ".will-filter-bar-tab-button {\n width: auto;\n height: auto;\n padding: 10px 20px;\n cursor: pointer;\n border: none;\n white-space: nowrap;\n font-size: 16px;\n display: flex;\n align-items: center;\n background-color: transparent;\n user-select: none;\n font-weight: 600;\n border-radius: 50px;\n }\n\n .will-filter-bar-tab-button.light {\n color: var(--will-white)\n }\n\n .will-filter-bar-tab-button.dark {\n color: var(--will-black)\n }\n\n .will-filter-bar-tab-button.light.active,\n .will-filter-bar-tab-button:hover {\n background-color: var(--will-transparent-white);\n }\n\n .will-filter-bar-tab-button.dark.active,\n .will-filter-bar-tab-button:hover {\n background-color: var(--will-transparent-lavender);\n }\n\n \n\n";
12023
+ var css_248z$a = ".will-guests-filter-label,\n.will-guests-filter-count {\n font-size: 18px;\n color: var(--will-text);\n}\n\n.will-guests-filter-inner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.will-guests-filter-label {\n display: block;\n font-weight: 600;\n margin-bottom: 10px;\n}\n\n.will-guests-filter-inner .will-guests-filter-counter {\n display: flex;\n align-items: center;\n}\n\n.will-guests-filter-count {\n margin: 0 10px;\n min-width: 30px;\n text-align: center;\n}\n\n.will-guests-filter-counter-button {\n border-radius: 50%;\n background-color: transparent;\n border: 1px solid var(--will-grey);\n width: 30px;\n height: 30px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 20px;\n cursor: pointer;\n color: var(--will-black);\n\n padding: 0;\n margin: 0;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.will-guests-filter-counter-button:hover {\n background-color: var(--will-onahau);\n}\n\n@media (max-width: 960px) {\n .will-guests-filter-inner {\n width: 100%;\n margin: 15px 0;\n justify-content: space-between;\n }\n}\n";
11936
12024
  styleInject(css_248z$a);
11937
12025
 
11938
- var TabButton = function (_a) {
11939
- var onClick = _a.onClick, label = _a.label, active = _a.active, mode = _a.mode;
11940
- return (jsx("button", { className: "will-filter-bar-tab-button ".concat(mode || 'light', " ").concat(active && 'active', " "), onClick: onClick, children: label }));
11941
- };
11942
-
11943
- var css_248z$9 = ".will-guests-filter-label,\n.will-guests-filter-count {\n font-size: 18px;\n color: var(--will-text);\n}\n\n.will-guests-filter-inner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.will-guests-filter-label {\n display: block;\n font-weight: 600;\n margin-bottom: 10px;\n}\n\n.will-guests-filter-inner .will-guests-filter-counter {\n display: flex;\n align-items: center;\n}\n\n.will-guests-filter-count {\n margin: 0 10px;\n min-width: 30px;\n text-align: center;\n}\n\n.will-guests-filter-counter-button {\n border-radius: 50%;\n background-color: transparent;\n border: 1px solid var(--will-grey);\n width: 30px;\n height: 30px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 20px;\n cursor: pointer;\n color: var(--will-black);\n\n padding: 0;\n margin: 0;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.will-guests-filter-counter-button:hover {\n background-color: var(--will-onahau);\n}\n\n@media (max-width: 960px) {\n .will-guests-filter-inner {\n width: 100%;\n margin: 15px 0;\n justify-content: space-between;\n }\n}\n";
11944
- styleInject(css_248z$9);
11945
-
11946
12026
  var GuestCount = function (_a) {
11947
12027
  var label = _a.label, sortOrder = _a.sortOrder, id = _a.id, updateGuestsCount = _a.updateGuestsCount, count = _a.count, minVal = _a.minVal;
11948
12028
  useEffect(function () {
@@ -11958,77 +12038,57 @@ var GuestCount = function (_a) {
11958
12038
  var handleIncrement = function () {
11959
12039
  updateGuestsCount("guests-".concat(id), count + 1);
11960
12040
  };
11961
- return (jsxs("div", { className: "will-guests-filter-inner", style: { order: "".concat(sortOrder) }, children: [jsx("p", { className: "will-guests-filter-label", children: label }), jsxs("div", { className: "will-guests-filter-counter", children: [jsx("button", { className: "will-guests-filter-counter-button", onClick: handleDecrement, disabled: (minVal && count <= minVal) || !count, style: {
11962
- cursor: (minVal && count <= minVal) || !count ? 'initial' : 'pointer',
11963
- paddingBottom: '4px',
11964
- opacity: (minVal && count <= minVal) || !count ? 0.4 : 1,
11965
- }, children: jsx("svg", { width: "10", height: "10", viewBox: "0 0 15 15", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M4 10H16", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) }) }), jsx("span", { className: "will-guests-filter-count", children: count }), jsx("button", { className: "will-guests-filter-counter-button", onClick: handleIncrement, children: jsx("svg", { width: "15", height: "15", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M10 4V16M4 10H16", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) }) })] })] }));
11966
- };
11967
-
11968
- var css_248z$8 = ".will-filter-section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n}\n\n.will-filter-section-title {\n font-size: 22px;\n margin: 0;\n}\n\n.will-filter-section-action {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.will-filter-section-action .will-filter-bar-close-button {\n position: relative;\n top: auto;\n right: auto;\n margin: 0;\n}\n\n@media (max-width: 960px) {\n .will-filter-section-title {\n font-size: 18px;\n }\n}\n";
11969
- styleInject(css_248z$8);
11970
-
11971
- var FilterSectionHeader = function (_a) {
11972
- var title = _a.title, action = _a.action;
11973
- return (jsxs("div", { className: "will-filter-section-header", children: [jsx("h3", { className: "will-filter-section-title", children: title }), action && jsx("div", { className: "will-filter-section-action", children: action })] }));
11974
- };
11975
-
11976
- var css_248z$7 = ".will-filter-bar-guests {\n text-align: initial;\n}\n\n.will-guests-filter-container {\n display: flex;\n flex-direction: column;\n min-width: 400px;\n gap: 20px;\n padding: 16px;\n}\n\n@media (max-width: 960px) {\n .will-guests-filter-container {\n margin-top: 15px;\n min-width: 100%;\n }\n}\n";
11977
- styleInject(css_248z$7);
12041
+ return (React__default.createElement("div", { className: "will-guests-filter-inner", style: { order: "".concat(sortOrder) } },
12042
+ React__default.createElement("p", { className: "will-guests-filter-label" }, label),
12043
+ React__default.createElement("div", { className: "will-guests-filter-counter" },
12044
+ React__default.createElement("button", { className: "will-guests-filter-counter-button", onClick: handleDecrement, disabled: (minVal && count <= minVal) || !count, style: {
12045
+ cursor: (minVal && count <= minVal) || !count ? 'initial' : 'pointer',
12046
+ paddingBottom: '4px',
12047
+ opacity: (minVal && count <= minVal) || !count ? 0.4 : 1,
12048
+ } },
12049
+ React__default.createElement("svg", { width: "10", height: "10", viewBox: "0 0 15 15", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
12050
+ React__default.createElement("path", { d: "M4 10H16", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }))),
12051
+ React__default.createElement("span", { className: "will-guests-filter-count" }, count),
12052
+ React__default.createElement("button", { className: "will-guests-filter-counter-button", onClick: handleIncrement },
12053
+ React__default.createElement("svg", { width: "15", height: "15", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
12054
+ React__default.createElement("path", { d: "M10 4V16M4 10H16", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }))))));
12055
+ };
12056
+
12057
+ var css_248z$9 = "#will-filter-bar-guests {\n text-align: initial;\n}\n\n.will-guests-filter-container {\n display: flex;\n flex-direction: column;\n min-width: 400px;\n gap: 20px;\n padding: 16px;\n}\n\n/**/\n.will-guest-count {\n display: inline-block;\n min-width: 10px;\n}\n";
12058
+ styleInject(css_248z$9);
11978
12059
 
11979
12060
  var Guests = forwardRef(function (_a, ref) {
11980
12061
  var ageCategories = _a.ageCategories, updateGuestsCount = _a.updateGuestsCount, ageCategoryCounts = _a.ageCategoryCounts, autoFocus = _a.autoFocus, onClose = _a.onClose;
11981
12062
  var t = useTranslation('filterBar').t;
11982
12063
  var containerRef = useAutoFocus(autoFocus);
11983
- return (jsxs("div", { className: "will-filter-bar-guests", ref: ref, children: [jsx(FilterSectionHeader, { title: t('guests.title'), action: onClose && jsx(CloseButton, { handleClose: onClose }) }), jsx("div", { className: "will-guests-filter-container", ref: containerRef, children: ageCategories === null || ageCategories === void 0 ? void 0 : ageCategories.map(function (category) { return (jsx(GuestCount, { id: category.id, label: category.name, minVal: category.minVal, sortOrder: category.sortOrder, updateGuestsCount: updateGuestsCount, count: ageCategoryCounts["guests-".concat(category.id)] || 0 }, category.id)); }) })] }));
12064
+ return (React__default.createElement("div", { id: "will-filter-bar-guests", ref: ref },
12065
+ React__default.createElement(SectionHeader, { title: t('guests.title'), action: onClose && React__default.createElement(CloseButton, { handleClose: onClose }) }),
12066
+ React__default.createElement("div", { className: "will-guests-filter-container", ref: containerRef }, ageCategories === null || ageCategories === void 0 ? void 0 : ageCategories.map(function (category) { return (React__default.createElement(GuestCount, { key: category.id, id: category.id, label: category.name, minVal: category.minVal, sortOrder: category.sortOrder, updateGuestsCount: updateGuestsCount, count: ageCategoryCounts["guests-".concat(category.id)] || 0 })); }))));
11984
12067
  });
11985
12068
  Guests.displayName = 'Guests';
11986
12069
 
11987
- var css_248z$6 = ".will-filter-bar-divider {\n width: 1px;\n margin: 0 10px;\n background-color: var(--will-charcoal-blue);\n}\n\n@media (max-width: 960px) {\n .will-filter-bar-divider {\n width: auto;\n margin: 0 10px;\n height: 1px;\n background-color: var(--will-charcoal-blue);\n }\n}";
11988
- styleInject(css_248z$6);
11989
-
11990
- var Divider = function () {
11991
- return jsx("div", { className: "will-filter-bar-divider" });
11992
- };
11993
-
11994
- var css_248z$5 = ".will-filter-bar-categories {\n text-align: center;\n}\n\n.will-categories-filter-title {\n font-size: 16px;\n text-transform: uppercase;\n margin: 10px 0 30px 0;\n}\n\n.will-categories-filter-inner {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 20px;\n}\n\n.will-categories-filter-inner input {\n cursor: pointer;\n margin-right: 10px;\n}\n";
11995
- styleInject(css_248z$5);
11996
-
11997
- var Categories = function (_a) {
11998
- _a.categories; var setCategories = _a.setCategories;
11999
- var t = useTranslation('filterBar').t;
12000
- var categoriesPlaceholder = [
12001
- 'Weekend',
12002
- 'Week',
12003
- 'Summer camp',
12004
- 'Winter camp',
12005
- ];
12006
- var _b = __read(useState(''), 2), selectedCategory = _b[0], setSelectedCategory = _b[1];
12007
- var handleCategoryChange = function (selectedCategory) {
12008
- setSelectedCategory(selectedCategory);
12009
- setCategories(selectedCategory);
12010
- };
12011
- return (jsxs("div", { className: "will-filter-bar-categories", children: [jsx("h3", { className: "will-categories-filter-title", children: t('categories.label') }), jsx("div", { className: "will-categories-filter-inner", children: categoriesPlaceholder.map(function (itm, idx) { return (jsxs("div", { children: [jsx("input", { type: "radio", value: itm, checked: selectedCategory === itm, onChange: function () { return handleCategoryChange(itm); } }), jsx("span", { children: itm })] }, idx)); }) })] }));
12012
- };
12013
-
12014
- var css_248z$4 = ".will-filter-bar-locations {\n text-align: initial;\n}\n\n.will-locations-filter-container {\n display: flex;\n gap: 10px;\n flex-direction: column;\n min-width: 400px;\n padding: 16px 0;\n}\n\n@media (max-width: 960px) {\n .will-locations-filter-container {\n margin-top: 15px;\n min-width: 100%;\n }\n}\n";
12015
- styleInject(css_248z$4);
12016
-
12017
- var css_248z$3 = ".will-image-card {\n display: flex;\n gap: 20px;\n justify-content: space-between;\n align-items: center;\n padding: 8px 16px;\n cursor: pointer;\n user-select: none;\n min-height: 40px;\n}\n\n.will-image-card.is-selected {\n background-color: var(--will-transparent-lavender);\n}\n\n.will-image-card:hover {\n background-color: var(--will-transparent-lavender);\n}\n\n.will-image-card-image img {\n width: 120px;\n height: 68px;\n object-fit: cover;\n}\n";
12018
- styleInject(css_248z$3);
12070
+ var css_248z$8 = ".will-image-card {\n display: flex;\n gap: 20px;\n justify-content: space-between;\n align-items: center;\n padding: 8px 16px;\n cursor: pointer;\n user-select: none;\n min-height: 40px;\n}\n\n.will-image-card.is-selected {\n background-color: var(--will-transparent-lavender);\n}\n\n.will-image-card:hover {\n background-color: var(--will-transparent-lavender);\n}\n\n.will-image-card-image img {\n width: 120px;\n height: 68px;\n object-fit: cover;\n}\n";
12071
+ styleInject(css_248z$8);
12019
12072
 
12020
12073
  var ImageCard = forwardRef(function (_a, ref) {
12021
12074
  var title = _a.title, description = _a.description, imageUrl = _a.imageUrl, isSelected = _a.isSelected, onClick = _a.onClick;
12022
12075
  var ariaLabel = "".concat(title).concat(description ? ", ".concat(description) : '');
12023
- return (jsxs("div", { ref: ref, className: "will-image-card ".concat(isSelected ? 'is-selected' : ''), onClick: onClick, onKeyDown: function (e) {
12076
+ return (React__default.createElement("div", { ref: ref, className: "will-image-card ".concat(isSelected ? 'is-selected' : ''), onClick: onClick, onKeyDown: function (e) {
12024
12077
  if (e.key === 'Enter' || e.key === ' ') {
12025
12078
  e.preventDefault();
12026
12079
  onClick === null || onClick === void 0 ? void 0 : onClick();
12027
12080
  }
12028
- }, role: "button", tabIndex: 0, "aria-pressed": isSelected, "aria-label": ariaLabel, children: [jsxs("div", { className: "will-image-card-content", children: [jsx("h3", { children: title }), description && jsx("p", { children: description })] }), jsx("div", { className: "will-image-card-image", children: imageUrl && jsx("img", { src: imageUrl, alt: title || 'Location image' }) })] }));
12081
+ }, role: "button", tabIndex: 0, "aria-pressed": isSelected, "aria-label": ariaLabel },
12082
+ React__default.createElement("div", { className: "will-image-card-content" },
12083
+ React__default.createElement("h3", null, title),
12084
+ description && React__default.createElement("p", null, description)),
12085
+ React__default.createElement("div", { className: "will-image-card-image" }, imageUrl && React__default.createElement("img", { src: imageUrl, alt: title || 'Location image' }))));
12029
12086
  });
12030
12087
  ImageCard.displayName = 'ImageCard';
12031
12088
 
12089
+ var css_248z$7 = "#will-filter-bar-locations {\n text-align: initial;\n}\n\n.will-locations-filter-container {\n display: flex;\n gap: 10px;\n flex-direction: column;\n min-width: 400px;\n padding: 16px 0;\n}\n\n@media (max-width: 960px) {\n .will-locations-filter-container {\n margin-top: 15px;\n min-width: 100%;\n }\n}\n";
12090
+ styleInject(css_248z$7);
12091
+
12032
12092
  var Locations = forwardRef(function (_a, ref) {
12033
12093
  var locations = _a.locations, language = _a.language, selectedLocations = _a.selectedLocations, setSelectedLocations = _a.setSelectedLocations, autoFocus = _a.autoFocus, _b = _a.multiSelect, multiSelect = _b === void 0 ? false : _b, onClose = _a.onClose;
12034
12094
  var t = useTranslation('filterBar').t;
@@ -12057,67 +12117,84 @@ var Locations = forwardRef(function (_a, ref) {
12057
12117
  onClose === null || onClose === void 0 ? void 0 : onClose();
12058
12118
  }
12059
12119
  };
12060
- return (jsxs("div", { className: "will-filter-bar-locations", ref: ref, children: [jsx(FilterSectionHeader, { title: t('locations.title'), action: onClose && jsx(CloseButton, { handleClose: onClose }) }), jsx("div", { className: "will-locations-filter-container", children: !!((locations === null || locations === void 0 ? void 0 : locations.length) && language) &&
12061
- locations.map(function (location, index) {
12062
- return (jsx(ImageCard, { ref: index === 0 ? firstCardRef : null, title: location.label, description: location.description, imageUrl: location.imageUrl, isSelected: selectedLocations.some(function (loc) { return loc.id === location.id; }), onClick: function () { return handleLocationClick(location); } }, location.id));
12063
- }) })] }));
12120
+ return (React__default.createElement("div", { id: "will-filter-bar-locations", ref: ref },
12121
+ React__default.createElement(SectionHeader, { title: t('locations.title'), action: onClose && React__default.createElement(CloseButton, { handleClose: onClose }) }),
12122
+ React__default.createElement("div", { className: "will-locations-filter-container" }, !!((locations === null || locations === void 0 ? void 0 : locations.length) && language) &&
12123
+ locations.map(function (location, index) {
12124
+ return (React__default.createElement(ImageCard, { key: location.id, ref: index === 0 ? firstCardRef : null, title: location.label, description: location.description, imageUrl: location.imageUrl, isSelected: selectedLocations.some(function (loc) { return loc.id === location.id; }), onClick: function () { return handleLocationClick(location); } }));
12125
+ }))));
12064
12126
  });
12065
12127
  Locations.displayName = 'Locations';
12066
12128
 
12067
- var css_248z$2 = ".will-root {\n z-index: 999;\n width: fit-content;\n min-width: 796px;\n max-height: 100vh;\n position: relative;\n}\n\n.will-root.is-full-width {\n width: 100%;\n min-width: auto;\n}\n\n.will-filter-bar {\n box-sizing: border-box;\n position: relative;\n}\n\n/* Tabs */\n\n.will-filter-bar-tabs {\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n z-index: 222;\n background: transparent;\n padding: 10px;\n gap: 10px;\n}\n\n/* Header */\n.will-filter-bar-header {\n display: flex;\n justify-content: space-between;\n padding: 10px;\n position: relative;\n z-index: 222;\n border-radius: 40px;\n background-color: var(--will-white);\n}\n\n@media (max-width: 960px) {\n .will-filter-bar-header {\n flex-direction: column;\n padding: 20px;\n border-radius: 25px;\n overflow: hidden;\n }\n}\n\n/* Container */\n\n.will-filter-bar-container {\n background-color: var(--will-white);\n min-height: 100px;\n position: absolute;\n top: 125px;\n z-index: 111;\n border-radius: 25px;\n box-shadow: var(--will-box-shadow);\n}\n\n@media (max-width: 960px) {\n .will-root {\n width: 100%;\n min-width: auto;\n max-height: 100vh;\n z-index: 3;\n }\n\n .will-filter-bar-container {\n margin-top: 10px;\n top: 0;\n padding: 45px 20px;\n position: relative;\n }\n}\n\n/* Common */\n\n.will-filter-bar-header.dark,\n.will-filter-bar-container.dark {\n box-shadow: var(--will-box-shadow-dark);\n}\n\n.will-filter-bar-header.light,\n.will-filter-bar-container.light {\n box-shadow: var(--will-box-shadow-light);\n}\n\n.will-guest-count {\n display: inline-block;\n min-width: 10px;\n}\n";
12068
- styleInject(css_248z$2);
12129
+ var css_248z$6 = "#will-filter-bar-categories {\n text-align: center;\n}\n\n.will-categories-filter-title {\n font-size: 16px;\n text-transform: uppercase;\n margin: 10px 0 30px 0;\n}\n\n.will-categories-filter-inner {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 20px;\n}\n\n.will-categories-filter-inner input {\n cursor: pointer;\n margin-right: 10px;\n}\n";
12130
+ styleInject(css_248z$6);
12069
12131
 
12070
- var css_248z$1 = ".will-dates-filter-container {\n padding: 0 16px;\n}\n";
12071
- styleInject(css_248z$1);
12132
+ var Categories = function (_a) {
12133
+ _a.categories; var setCategories = _a.setCategories;
12134
+ var t = useTranslation('filterBar').t;
12135
+ var categoriesPlaceholder = [
12136
+ 'Weekend',
12137
+ 'Week',
12138
+ 'Summer camp',
12139
+ 'Winter camp',
12140
+ ];
12141
+ var _b = __read(useState(''), 2), selectedCategory = _b[0], setSelectedCategory = _b[1];
12142
+ var handleCategoryChange = function (selectedCategory) {
12143
+ setSelectedCategory(selectedCategory);
12144
+ setCategories(selectedCategory);
12145
+ };
12146
+ return (React__default.createElement("div", { id: "will-filter-bar-categories" },
12147
+ React__default.createElement("h3", { className: "will-categories-filter-title" }, t('categories.label')),
12148
+ React__default.createElement("div", { className: "will-categories-filter-inner" }, categoriesPlaceholder.map(function (itm, idx) { return (React__default.createElement("div", { key: idx },
12149
+ React__default.createElement("input", { type: "radio", value: itm, checked: selectedCategory === itm, onChange: function () { return handleCategoryChange(itm); } }),
12150
+ React__default.createElement("span", null, itm))); }))));
12151
+ };
12152
+ Categories.displayName = 'Categories';
12072
12153
 
12073
- var Dates = forwardRef(function (_a, ref) {
12074
- var onClose = _a.onClose, autoFocus = _a.autoFocus, calendarRange = _a.calendarRange, setCalendarRange = _a.setCalendarRange, disableCalendarDates = _a.disableCalendarDates, selectedPath = _a.selectedPath, language = _a.language, filtersRef = _a.filtersRef;
12075
- return (jsxs("div", { className: "will-filter-bar-dates", ref: ref, children: [jsx(FilterSectionHeader, { title: '', action: onClose && jsx(CloseButton, { handleClose: onClose }) }), jsx("div", { className: "will-dates-filter-container", children: jsx(Calendar, { autoFocus: autoFocus, calendarRange: calendarRange, setCalendarRange: setCalendarRange, disableCalendarDates: disableCalendarDates, selectedPath: selectedPath, language: language, ref: filtersRef }) })] }));
12076
- });
12077
- Dates.displayName = 'Dates';
12154
+ var css_248z$5 = ".will-filter-bar-panels {\n background-color: var(--will-white);\n min-height: 100px;\n position: absolute;\n top: 125px;\n z-index: 111;\n border-radius: 25px;\n box-shadow: var(--will-box-shadow);\n}\n\n@media (max-width: 960px) {\n .will-root {\n width: 100%;\n min-width: auto;\n max-height: 100vh;\n z-index: 3;\n }\n\n .will-filter-bar-panels {\n margin-top: 10px;\n top: 0;\n position: relative;\n }\n}\n";
12155
+ styleInject(css_248z$5);
12078
12156
 
12079
- function FilterBar(_a) {
12080
- var _b;
12081
- var _c = _a.language, language = _c === void 0 ? LANGUAGE_FALLBACK : _c, _d = _a.ageCategories, ageCategories = _d === void 0 ? AGE_CATEGORIES_FALLBACK : _d, _e = _a.redirectUrl, redirectUrl = _e === void 0 ? REDIRECT_URL_FALLBACK : _e, palette = _a.palette, onSubmit = _a.onSubmit, fullWidth = _a.fullWidth, disableCalendarDates = _a.disableCalendarDates, mode = _a.mode, tabs = _a.tabs, outerLoading = _a.outerLoading, locations = _a.locations;
12082
- var themePalette = useTheme({ palette: palette });
12083
- // Translations
12084
- useUpdateTranslations({ language: language });
12085
- var t = useTranslation('filterBar').t;
12086
- // Refs for SelectButtons
12087
- var locationsButtonRef = useRef(null);
12088
- var datesButtonRef = useRef(null);
12089
- var guestsButtonRef = useRef(null);
12090
- var previouslyFocusedButtonRef = useRef(null);
12091
- var headerRef = useRef(null);
12092
- // Dropdown positioning
12093
- var _f = __read(useState({}), 2), dropdownStyle = _f[0], setDropdownStyle = _f[1];
12094
- // Filters
12095
- var _g = useFilterBar({
12096
- redirectUrl: redirectUrl,
12097
- ageCategories: ageCategories,
12098
- onSubmit: onSubmit,
12099
- tabs: tabs,
12100
- locations: locations,
12101
- }), selectedFilter = _g.selectedFilter, ageCategoryCounts = _g.ageCategoryCounts, categories = _g.categories, calendarRange = _g.calendarRange, selectedPath = _g.selectedPath, innerLoading = _g.innerLoading, selectedLocations = _g.selectedLocations, setSelectedLocations = _g.setSelectedLocations, setCalendarRange = _g.setCalendarRange, setCategories = _g.setCategories, handleSelectedFilter = _g.handleSelectedFilter, handleSubmit = _g.handleSubmit, updateGuestsCount = _g.updateGuestsCount, setSelectedPath = _g.setSelectedPath, handleResetFilters = _g.handleResetFilters;
12102
- // Scroll in to view
12103
- var _h = useScrollInToView({ selectedFilter: selectedFilter }), isMobile = _h.isMobile, targetFilterBarRef = _h.targetFilterBarRef;
12157
+ var FilterPanels = function () {
12158
+ var _a = useFilterBar(), categories = _a.categories, calendarRange = _a.calendarRange, selectedFilter = _a.selectedFilter, selectedPath = _a.selectedPath, ageCategoryCounts = _a.ageCategoryCounts, selectedLocations = _a.selectedLocations, mode = _a.mode, tabs = _a.tabs, disableCalendarDates = _a.disableCalendarDates, ageCategories = _a.ageCategories, locations = _a.locations, language = _a.language, isMobile = _a.isMobile, panelRef = _a.panelRef, buttonRefs = _a.buttonRefs, targetFilterBarRef = _a.targetFilterBarRef, setSelectedLocations = _a.setSelectedLocations, setCalendarRange = _a.setCalendarRange, handleSelectedFilter = _a.handleSelectedFilter, updateGuestsCount = _a.updateGuestsCount, setCategories = _a.setCategories;
12104
12159
  // Handle close filter section
12105
12160
  var filtersRef = useCloseFilterSection({ handleSelectedFilter: handleSelectedFilter }).filtersRef;
12106
- // Enhanced handleSelectedFilter with positioning
12107
- var handleSelectedFilterWithPosition = function (filter) {
12108
- if (filter) {
12109
- var position = calculateDropdownPosition({
12110
- filterSection: filter,
12111
- headerRef: headerRef,
12112
- locationsButtonRef: locationsButtonRef,
12113
- datesButtonRef: datesButtonRef,
12114
- guestsButtonRef: guestsButtonRef,
12115
- isMobile: isMobile,
12116
- });
12117
- setDropdownStyle(position);
12161
+ var localStyles = usePanelPosition({
12162
+ selectedFilter: selectedFilter,
12163
+ panelRef: panelRef,
12164
+ targetFilterBarRef: targetFilterBarRef,
12165
+ buttonRefs: buttonRefs,
12166
+ isMobile: isMobile,
12167
+ }).localStyles;
12168
+ var renderContent = function () {
12169
+ switch (selectedFilter) {
12170
+ case FilterSections.CALENDAR:
12171
+ return (React__default.createElement(Dates, { autoFocus: true, ref: filtersRef, onClose: function () { return handleSelectedFilter(false); }, calendarRange: calendarRange, setCalendarRange: setCalendarRange, disableCalendarDates: disableCalendarDates, selectedPath: selectedPath, language: language }));
12172
+ case FilterSections.GUESTS:
12173
+ return (React__default.createElement(Guests, { autoFocus: true, ref: filtersRef, ageCategories: ageCategories, ageCategoryCounts: ageCategoryCounts, updateGuestsCount: updateGuestsCount, onClose: function () { return handleSelectedFilter(false); } }));
12174
+ case FilterSections.CATEGORIES:
12175
+ return (React__default.createElement(Categories, { categories: categories, setCategories: setCategories }));
12176
+ case FilterSections.LOCATIONS:
12177
+ return (React__default.createElement(Locations, { autoFocus: true, ref: filtersRef, locations: locations === null || locations === void 0 ? void 0 : locations.data, language: language, selectedLocations: selectedLocations, setSelectedLocations: setSelectedLocations, multiSelect: locations === null || locations === void 0 ? void 0 : locations.multiSelect, onClose: function () { return handleSelectedFilter(false); } }));
12178
+ default:
12179
+ return null;
12118
12180
  }
12119
- handleSelectedFilter(filter);
12120
12181
  };
12182
+ return (selectedFilter && (React__default.createElement("div", { ref: panelRef, className: "will-filter-bar-panels ".concat(mode || 'light'), style: (!tabs || tabs.length < 2) && !isMobile
12183
+ ? { top: 66 }
12184
+ : __assign$2({}, localStyles) }, renderContent())));
12185
+ };
12186
+
12187
+ var css_248z$4 = ".will-filter-bar-controls {\n display: flex;\n justify-content: space-between;\n padding: 10px;\n position: relative;\n z-index: 222;\n border-radius: 40px;\n background-color: var(--will-white);\n}\n\n@media (max-width: 960px) {\n .will-filter-bar-controls {\n flex-direction: column;\n padding: 20px;\n border-radius: 25px;\n overflow: hidden;\n }\n}\n";
12188
+ styleInject(css_248z$4);
12189
+
12190
+ var FilterControls = function () {
12191
+ var _a;
12192
+ var t = useTranslation('filterBar').t;
12193
+ var _b = useFilterBar(), calendarRange = _b.calendarRange, selectedFilter = _b.selectedFilter, selectedPath = _b.selectedPath, ageCategoryCounts = _b.ageCategoryCounts, selectedLocations = _b.selectedLocations, mode = _b.mode, tabs = _b.tabs, ageCategories = _b.ageCategories, locations = _b.locations, innerLoading = _b.innerLoading, outerLoading = _b.outerLoading, handleSubmit = _b.handleSubmit, handleSelectedFilter = _b.handleSelectedFilter,
12194
+ // Refs
12195
+ previouslyFocusedButtonRef = _b.previouslyFocusedButtonRef, buttonRefs = _b.buttonRefs,
12196
+ //
12197
+ targetFilterBarRef = _b.targetFilterBarRef;
12121
12198
  // Store previously focused button and restore focus when closing
12122
12199
  useEffect(function () {
12123
12200
  if (!selectedFilter && previouslyFocusedButtonRef.current) {
@@ -12125,8 +12202,6 @@ function FilterBar(_a) {
12125
12202
  previouslyFocusedButtonRef.current = null;
12126
12203
  }
12127
12204
  }, [selectedFilter]);
12128
- // Display component after fully loaded
12129
- useAwaitRender();
12130
12205
  // Parsed data for filter section description
12131
12206
  var parsedDates = parseDates({ calendarRange: calendarRange });
12132
12207
  var parsedGuests = parseGuests({
@@ -12141,47 +12216,68 @@ function FilterBar(_a) {
12141
12216
  locationsPlaceholder: t('locations.placeholder'),
12142
12217
  locationsSelectedLabel: t('locations.selected'),
12143
12218
  });
12144
- return (jsxs("div", { className: "will-root ".concat(fullWidth ? 'is-full-width' : ''), style: themePalette, children: [tabs && tabs.length > 1 && (jsx("div", { className: "will-filter-bar-tabs", ref: targetFilterBarRef, children: tabs
12145
- .sort(function (a, b) { return a.order - b.order; })
12146
- .map(function (tab, idx) { return (jsx(TabButton, { label: tab.label || t("tabs.".concat(tab.path.substring(1))), onClick: function () {
12147
- setSelectedPath(tab.path);
12148
- handleResetFilters();
12149
- handleSelectedFilter(false);
12150
- }, active: selectedPath === tab.path, mode: mode }, "tab-".concat(idx))); }) })), jsxs("div", { className: "will-filter-bar-header ".concat(mode || 'light'), ref: function (el) {
12151
- headerRef.current = el;
12152
- if ((tabs === null || tabs === void 0 ? void 0 : tabs.length) === 1 && targetFilterBarRef) {
12153
- targetFilterBarRef.current = el;
12154
- }
12155
- }, children: [!!((_b = locations === null || locations === void 0 ? void 0 : locations.data) === null || _b === void 0 ? void 0 : _b.length) && (jsxs(Fragment, { children: [jsx(SelectButton, { ref: locationsButtonRef, label: t('locations.label'), description: parsedLocations, onClick: function () {
12156
- previouslyFocusedButtonRef.current = locationsButtonRef.current;
12157
- handleSelectedFilterWithPosition(FilterSections.LOCATIONS);
12158
- }, active: !!selectedLocations.length, disabled: locations === null || locations === void 0 ? void 0 : locations.disabled, ariaExpanded: selectedFilter === FilterSections.LOCATIONS, ariaControls: "will-locations-filter" }), jsx(Divider, {})] })), jsx(SelectButton, { ref: datesButtonRef, label: t('calendar.label'), description: parsedDates
12159
- ? parsedDates
12160
- : selectedPath === Pages.ROOMS
12161
- ? t('calendar.roomsLabelPlaceholder')
12162
- : t('calendar.eventsLabelPlaceholder'), onClick: function () {
12163
- previouslyFocusedButtonRef.current = datesButtonRef.current;
12164
- handleSelectedFilterWithPosition(FilterSections.CALENDAR);
12165
- }, active: !!parsedDates, ariaExpanded: selectedFilter === FilterSections.CALENDAR, ariaControls: "will-calendar-filter" }), selectedPath !== Pages.EVENTS && (jsxs(Fragment, { children: [jsx(Divider, {}), jsx(SelectButton, { ref: guestsButtonRef, label: t('guests.label'), description: parsedGuests.content, onClick: function () {
12166
- previouslyFocusedButtonRef.current = guestsButtonRef.current;
12167
- handleSelectedFilterWithPosition(FilterSections.GUESTS);
12168
- }, active: !!parsedGuests.data.total, ariaExpanded: selectedFilter === FilterSections.GUESTS, ariaControls: "will-guests-filter" })] })), jsx(SubmitButton, { onClick: handleSubmit, startIcon: jsx(FaSearch, {}), label: t('common:search'), isLoading: innerLoading || outerLoading })] }), selectedFilter && (jsxs("div", { className: "will-filter-bar-container ".concat(mode || 'light'), style: __assign$2(__assign$2({}, ((!tabs || tabs.length < 2) && !isMobile ? { top: 66 } : {})), dropdownStyle), children: [selectedFilter === FilterSections.CALENDAR && (jsx("div", { id: "will-dates-filter", children: jsx(Dates, { autoFocus: true, ref: filtersRef, onClose: function () { return handleSelectedFilter(false); }, calendarRange: calendarRange, setCalendarRange: setCalendarRange, disableCalendarDates: disableCalendarDates, selectedPath: selectedPath, language: language, filtersRef: filtersRef }) })), selectedFilter === FilterSections.GUESTS && (jsx("div", { id: "will-guests-filter", children: jsx(Guests, { updateGuestsCount: updateGuestsCount, ageCategories: ageCategories, ageCategoryCounts: ageCategoryCounts, ref: filtersRef, autoFocus: true, onClose: function () { return handleSelectedFilter(false); } }) })), selectedFilter === FilterSections.CATEGORIES && (jsx("div", { id: "will-categories-filter", children: jsx(Categories, { categories: categories, setCategories: setCategories }) })), selectedFilter === FilterSections.LOCATIONS && (jsx("div", { id: "will-locations-filter", children: jsx(Locations, { autoFocus: true, ref: filtersRef, locations: locations === null || locations === void 0 ? void 0 : locations.data, language: language, selectedLocations: selectedLocations, setSelectedLocations: setSelectedLocations, multiSelect: locations === null || locations === void 0 ? void 0 : locations.multiSelect, onClose: function () { return handleSelectedFilter(false); } }) }))] }))] }));
12169
- }
12219
+ return (React__default.createElement("div", { className: "will-filter-bar-controls ".concat(mode || 'light'), ref: (tabs === null || tabs === void 0 ? void 0 : tabs.length) === 1 ? targetFilterBarRef : null },
12220
+ !!((_a = locations === null || locations === void 0 ? void 0 : locations.data) === null || _a === void 0 ? void 0 : _a.length) && (React__default.createElement(React__default.Fragment, null,
12221
+ React__default.createElement(SelectButton, { ref: function (el) { return (buttonRefs.current[FilterSections.LOCATIONS] = el); }, label: t('locations.label'), description: parsedLocations, onClick: function (e) {
12222
+ previouslyFocusedButtonRef.current = e.currentTarget;
12223
+ handleSelectedFilter(FilterSections.LOCATIONS);
12224
+ }, active: !!selectedLocations.length, disabled: locations === null || locations === void 0 ? void 0 : locations.disabled, ariaExpanded: selectedFilter === FilterSections.LOCATIONS, ariaControls: "will-filter-bar-locations" }),
12225
+ React__default.createElement(Divider, null))),
12226
+ React__default.createElement(SelectButton, { ref: function (el) { return (buttonRefs.current[FilterSections.CALENDAR] = el); }, label: t('calendar.label'), description: parsedDates
12227
+ ? parsedDates
12228
+ : selectedPath === Pages.ROOMS
12229
+ ? t('calendar.roomsLabelPlaceholder')
12230
+ : t('calendar.eventsLabelPlaceholder'), onClick: function (e) {
12231
+ previouslyFocusedButtonRef.current = e.currentTarget;
12232
+ handleSelectedFilter(FilterSections.CALENDAR);
12233
+ }, active: !!parsedDates, ariaExpanded: selectedFilter === FilterSections.CALENDAR, ariaControls: "will-filter-bar-dates" }),
12234
+ selectedPath !== Pages.EVENTS && (React__default.createElement(React__default.Fragment, null,
12235
+ React__default.createElement(Divider, null),
12236
+ React__default.createElement(SelectButton, { ref: function (el) { return (buttonRefs.current[FilterSections.GUESTS] = el); }, label: t('guests.label'), description: parsedGuests.content, onClick: function (e) {
12237
+ previouslyFocusedButtonRef.current = e.currentTarget;
12238
+ handleSelectedFilter(FilterSections.GUESTS);
12239
+ }, active: !!parsedGuests.data.total, ariaExpanded: selectedFilter === FilterSections.GUESTS, ariaControls: "will-guests-filter" }))),
12240
+ React__default.createElement(SubmitButton, { onClick: handleSubmit, startIcon: React__default.createElement(FaSearch, null), label: t('common:search'), isLoading: innerLoading || outerLoading })));
12241
+ };
12242
+
12243
+ var css_248z$3 = ".will-filter-bar-tabs {\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n z-index: 222;\n background: transparent;\n padding: 10px;\n gap: 10px;\n}\n";
12244
+ styleInject(css_248z$3);
12245
+
12246
+ var FilterTabs = function () {
12247
+ var t = useTranslation('filterBar').t;
12248
+ var _a = useFilterBar(), selectedPath = _a.selectedPath, mode = _a.mode, tabs = _a.tabs, handleSelectedFilter = _a.handleSelectedFilter, setSelectedPath = _a.setSelectedPath, handleResetFilters = _a.handleResetFilters,
12249
+ //
12250
+ targetFilterBarRef = _a.targetFilterBarRef;
12251
+ return (tabs &&
12252
+ tabs.length > 1 && (React__default.createElement("div", { className: "will-filter-bar-tabs", ref: targetFilterBarRef }, tabs
12253
+ .sort(function (a, b) { return a.order - b.order; })
12254
+ .map(function (tab, idx) { return (React__default.createElement(TabButton, { key: "tab-".concat(idx), label: tab.label || t("tabs.".concat(tab.path.substring(1))), onClick: function () {
12255
+ setSelectedPath(tab.path);
12256
+ handleResetFilters();
12257
+ handleSelectedFilter(false);
12258
+ }, active: selectedPath === tab.path, mode: mode })); }))));
12259
+ };
12260
+
12261
+ var css_248z$2 = "@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-light-grey: #C8C8C8;\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-error: #d32f2f;\n\n /* Transparent */\n --will-transparent-black: rgba(0, 0, 0, 0.5);\n --will-transparent-white: rgba(255, 255, 255, 0.30);\n --will-transparent-lavender: rgba(171, 167, 175, 0.30);\n\n /* Color mix */\n --will-primary-lighter: color-mix(in srgb, var(--will-primary), white 50%);\n --will-primary-lightest: color-mix(in srgb, var(--will-primary), white 80%);\n\n\n /* Shadows */\n --will-box-shadow-dark: 0px 2px 12px 2px #a1a1a180;\n --will-box-shadow-light: 0px 2px 12px 2px #bcb9b980;\n\n /* Breakpoints */\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";
12262
+ styleInject(css_248z$2);
12263
+
12264
+ var css_248z$1 = ".will-root {\n z-index: 999;\n width: fit-content;\n min-width: 796px;\n max-height: 100vh;\n position: relative;\n}\n\n.will-root.is-full-width {\n width: 100%;\n min-width: auto;\n}\n\n.will-filter-bar {\n box-sizing: border-box;\n position: relative;\n}\n\n/* Common */\n\n.will-filter-bar-controls.dark,\n.will-filter-bar-panels.dark {\n box-shadow: var(--will-box-shadow-dark);\n}\n\n.will-filter-bar-controls.light,\n.will-filter-bar-panels.light {\n box-shadow: var(--will-box-shadow-light);\n}\n";
12265
+ styleInject(css_248z$1);
12266
+
12267
+ var FilterBar = function (_a) {
12268
+ var _b = _a.language, language = _b === void 0 ? LANGUAGE_FALLBACK : _b, ageCategories = _a.ageCategories, _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, outerLoading = _a.outerLoading, locations = _a.locations;
12269
+ var themePalette = useTheme({ palette: palette });
12270
+ // Translations
12271
+ useUpdateTranslations({ language: language });
12272
+ // Display component after fully loaded
12273
+ useAwaitRender();
12274
+ return (React__default.createElement(FilterBarProvider, { language: language, ageCategories: ageCategories, redirectUrl: redirectUrl, palette: palette, onSubmit: onSubmit, fullWidth: fullWidth, disableCalendarDates: disableCalendarDates, mode: mode, tabs: tabs, outerLoading: outerLoading, locations: locations },
12275
+ React__default.createElement("div", { className: "will-root ".concat(fullWidth ? 'is-full-width' : ''), style: themePalette },
12276
+ React__default.createElement(FilterTabs, null),
12277
+ React__default.createElement(FilterControls, null),
12278
+ React__default.createElement(FilterPanels, null))));
12279
+ };
12170
12280
  ////////////
12171
- var AGE_CATEGORIES_FALLBACK = [
12172
- {
12173
- id: '1',
12174
- name: 'Adults',
12175
- sortOrder: 1,
12176
- minVal: 0,
12177
- },
12178
- {
12179
- id: '2',
12180
- name: 'Kids',
12181
- sortOrder: 2,
12182
- minVal: 0,
12183
- },
12184
- ];
12185
12281
  var REDIRECT_URL_FALLBACK = 'http://localhost:3000/';
12186
12282
  var LANGUAGE_FALLBACK = 'en';
12187
12283
 
@@ -12306,26 +12402,36 @@ var Footer = function (_a) {
12306
12402
  var nights = nightsCount({
12307
12403
  calendarRange: calendarRange,
12308
12404
  });
12309
- return (jsxs("div", { className: "will-calendar-footer-actions-wrapper", children: [jsxs("div", { className: "will-calendar-footer-dates", children: [calendarHasError ? (jsx("div", { className: "will-calendar-footer-error", children: calendarHasError &&
12310
- renderCalendarErrorMessage({
12311
- palette: palette,
12312
- message: t("common:errors.calendarErrors.checkInAvailabilityError"),
12313
- }) })) : (jsxs("div", { children: [jsx("span", { children: parseDate({
12314
- date: calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from,
12315
- dateFormat: 'EEEEEE d.M.yyyy',
12316
- language: language,
12317
- }) || t('common:checkIn') }), jsx("span", { className: "will-calendar-footer-dates-separator", children: "-" }), jsx("span", { children: parseDate({
12318
- date: calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to,
12319
- dateFormat: 'EEEEEE d.M.yyyy',
12320
- language: language,
12321
- }) || t('common:checkOut') })] })), jsx("span", { className: "will-calendar-footer-booked", children: !calendarHasError && nights
12322
- ? "".concat(nights, " ").concat(t("common:".concat(nights === 1 ? 'night' : 'nights')))
12323
- : '' })] }), jsx("div", { className: "will-calendar-footer-actions", children: jsx(SubmitButton, { onClick: handleClearDates, disabled: !(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from), label: t("common:clearDates"), variant: "text" }) })] }));
12405
+ return (React__default.createElement("div", { className: "will-calendar-footer-actions-wrapper" },
12406
+ React__default.createElement("div", { className: "will-calendar-footer-dates" },
12407
+ calendarHasError ? (React__default.createElement("div", { className: "will-calendar-footer-error" }, calendarHasError &&
12408
+ renderCalendarErrorMessage({
12409
+ palette: palette,
12410
+ message: t("common:errors.calendarErrors.checkInAvailabilityError"),
12411
+ }))) : (React__default.createElement("div", null,
12412
+ React__default.createElement("span", null, parseDate({
12413
+ date: calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from,
12414
+ dateFormat: 'EEEEEE d.M.yyyy',
12415
+ language: language,
12416
+ }) || t('common:checkIn')),
12417
+ React__default.createElement("span", { className: "will-calendar-footer-dates-separator" }, "-"),
12418
+ React__default.createElement("span", null, parseDate({
12419
+ date: calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to,
12420
+ dateFormat: 'EEEEEE d.M.yyyy',
12421
+ language: language,
12422
+ }) || t('common:checkOut')))),
12423
+ React__default.createElement("span", { className: "will-calendar-footer-booked" }, !calendarHasError && nights
12424
+ ? "".concat(nights, " ").concat(t("common:".concat(nights === 1 ? 'night' : 'nights')))
12425
+ : '')),
12426
+ React__default.createElement("div", { className: "will-calendar-footer-actions" },
12427
+ React__default.createElement(SubmitButton, { onClick: handleClearDates, disabled: !(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from), label: t("common:clearDates"), variant: "text" }))));
12324
12428
  };
12325
12429
  /////////
12326
12430
  var renderCalendarErrorMessage = function (_a) {
12327
12431
  var message = _a.message, palette = _a.palette;
12328
- return (jsxs(Fragment, { children: [jsx(IconsSvg, { fill: (palette === null || palette === void 0 ? void 0 : palette.error) || 'inherit', size: 25, icon: "warning" }), jsx("span", { children: message || '' })] }));
12432
+ return (React__default.createElement(React__default.Fragment, null,
12433
+ React__default.createElement(IconsSvg, { fill: (palette === null || palette === void 0 ? void 0 : palette.error) || 'inherit', size: 25, icon: "warning" }),
12434
+ React__default.createElement("span", null, message || '')));
12329
12435
  };
12330
12436
 
12331
12437
  var css_248z = ".will-root .will-calendar-wrapper {\n box-shadow: var(--will-box-shadow-dark);\n border-radius: 20px;\n background-color: var(--will-white);\n position: absolute;\n top: 0;\n left: 0;\n \n}\n\n.will-root .will-calendar-wrapper .will-calendar-header,\n.will-root .will-calendar-wrapper .will-calendar-main,\n.will-root .will-calendar-wrapper .will-calendar-footer {\n padding: 20px;\n}\n\n/* Header */\n\n.will-root .will-calendar-wrapper .will-calendar-header {\n display: flex;\n justify-content: space-between;\n border-bottom: 1px solid var(--will-grey);\n align-items: center;\n}\n\n/* Footer */\n\n.will-root .will-calendar-wrapper .will-calendar-footer {\n border-top: 1px solid var(--will-grey);\n}\n\n/* Footer actions */\n\n.will-root .will-calendar-wrapper .will-calendar-footer-actions-wrapper {\n display: flex;\n justify-content: space-between;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-dates > div {\n margin-bottom: 5px;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-dates-separator {\n margin: 0 15px;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-dates .will-calendar-footer-booked {\n display: flex;\n min-height: 20.5px;\n margin-top: 10px;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-error {\n display: flex;\n max-width: 80%;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-error span {\n display: inline-block;\n margin-left: 10px;\n}\n\n@media (max-width: 960px) {\n .will-root .will-calendar-wrapper {\n width: -webkit-fill-available;\n margin: 0 -6%;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-header,\n .will-root .will-calendar-wrapper .will-calendar-main,\n .will-root .will-calendar-wrapper .will-calendar-footer {\n padding: 20px 10px;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-actions-wrapper {\n flex-direction: column;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-dates {\n text-align: center;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-dates .will-calendar-footer-booked {\n justify-content: center;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-actions {\n flex-direction: column;\n width: 100%;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-actions button{\n width: 100%;\n margin-top: 10px;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-error {\n max-width: 100%;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-error span {\n text-align: center;\n margin-left: 5px;\n }\n }\n\n.will-root .will-calendar-wrapper .will-calendar-header .will-filter-bar-close-button {\n position: initial;\n}";
@@ -12351,7 +12457,14 @@ function FilterCalendar(_a) {
12351
12457
  var filtersRef = useCloseFilterSection({
12352
12458
  handleSelectedFilter: setToggleCalendar,
12353
12459
  }).filtersRef;
12354
- return (jsx("div", { className: "will-root", style: themePalette, children: toggleCalendar && (jsxs("div", { className: "will-calendar-wrapper", ref: filtersRef, children: [jsxs("div", { className: "will-calendar-header", children: [jsx("h2", { children: t('filterBar:calendar.title') }), jsx(CloseButton, { handleClose: function () { return setToggleCalendar(false); } })] }), jsx("div", { className: "will-calendar-main", children: jsx(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, calendarOffset: calendarOffset, selectedPath: '/rooms', language: language, disableCalendarDates: disableCalendarDates, requestDates: requestDates, disabledDates: disabledDates, updateCalendarMonthNavigation: updateCalendarMonthNavigation, setUpdateCalendarMonthNavigation: setUpdateCalendarMonthNavigation, updateCalendarDefaultMonth: updateCalendarDefaultMonth, loadingData: loadingData, showFeedback: showFeedback, noActiveSelection: noActiveSelection, palette: palette, setCalendarHasError: setCalendarHasError, setUpdatedForSubmit: setUpdatedForSubmit, rangeContext: rangeContext, calendarHasError: calendarHasError }) }), jsx("div", { className: "will-calendar-footer", children: jsx(Footer, { calendarHasError: calendarHasError, calendarRange: calendarRange, handleClearDates: handleClearDates, language: language, palette: palette }) })] })) }));
12460
+ return (React__default.createElement("div", { className: "will-root", style: themePalette }, toggleCalendar && (React__default.createElement("div", { className: "will-calendar-wrapper", ref: filtersRef },
12461
+ React__default.createElement("div", { className: "will-calendar-header" },
12462
+ React__default.createElement("h2", null, t('filterBar:calendar.title')),
12463
+ React__default.createElement(CloseButton, { handleClose: function () { return setToggleCalendar(false); } })),
12464
+ React__default.createElement("div", { className: "will-calendar-main" },
12465
+ React__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, calendarOffset: calendarOffset, selectedPath: '/rooms', language: language, disableCalendarDates: disableCalendarDates, requestDates: requestDates, disabledDates: disabledDates, updateCalendarMonthNavigation: updateCalendarMonthNavigation, setUpdateCalendarMonthNavigation: setUpdateCalendarMonthNavigation, updateCalendarDefaultMonth: updateCalendarDefaultMonth, loadingData: loadingData, showFeedback: showFeedback, noActiveSelection: noActiveSelection, palette: palette, setCalendarHasError: setCalendarHasError, setUpdatedForSubmit: setUpdatedForSubmit, rangeContext: rangeContext, calendarHasError: calendarHasError })),
12466
+ React__default.createElement("div", { className: "will-calendar-footer" },
12467
+ React__default.createElement(Footer, { calendarHasError: calendarHasError, calendarRange: calendarRange, handleClearDates: handleClearDates, language: language, palette: palette }))))));
12355
12468
  }
12356
12469
 
12357
12470
  export { Button$1 as Button, FilterBar, FilterCalendar };