willba-component-library 0.3.14 → 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 (94) hide show
  1. package/README.md +12 -12
  2. package/lib/components/FilterBar/FilterBar.d.ts +2 -2
  3. package/lib/components/FilterBar/components/FilterControls/FilterControls.d.ts +3 -0
  4. package/lib/components/FilterBar/components/FilterPanels/Categories/Categories.d.ts +11 -0
  5. package/lib/components/FilterBar/components/FilterPanels/Dates/Dates.d.ts +16 -0
  6. package/lib/components/FilterBar/components/FilterPanels/FilterPanels.d.ts +3 -0
  7. package/lib/components/FilterBar/components/FilterPanels/Guests/GuestCount/GuestCount.d.ts +4 -0
  8. package/lib/components/FilterBar/components/FilterPanels/Guests/Guests.d.ts +12 -0
  9. package/lib/components/FilterBar/components/FilterPanels/Locations/Locations.d.ts +14 -0
  10. package/lib/components/FilterBar/components/FilterPanels/SectionHeader/SectionHeader.d.ts +8 -0
  11. package/lib/components/FilterBar/components/FilterTabs/FilterTabs.d.ts +3 -0
  12. package/lib/components/FilterBar/components/ImageCard/ImageCard.d.ts +11 -0
  13. package/lib/components/FilterBar/components/SelectButton/SelectButton.d.ts +13 -0
  14. package/lib/components/FilterBar/components/TabButton/TabButton.d.ts +10 -0
  15. package/lib/components/FilterBar/components/index.d.ts +6 -5
  16. package/lib/components/FilterBar/hooks/index.d.ts +4 -1
  17. package/lib/components/FilterBar/hooks/useFilterActions.d.ts +25 -0
  18. package/lib/components/FilterBar/hooks/useFilterState.d.ts +22 -0
  19. package/lib/components/FilterBar/hooks/useFilterUi.d.ts +7 -0
  20. package/lib/components/FilterBar/hooks/usePanelPosition.d.ts +12 -0
  21. package/lib/components/FilterBar/index.d.ts +1 -1
  22. package/lib/components/FilterBar/providers/FilterBarProvider.d.ts +31 -0
  23. package/lib/components/FilterBar/providers/index.d.ts +1 -0
  24. package/lib/components/FilterBar/utils/ageCategoriesRules.d.ts +7 -0
  25. package/lib/components/FilterBar/utils/index.d.ts +1 -1
  26. package/lib/components/FilterBar/utils/parseGuests.d.ts +5 -1
  27. package/lib/components/FilterCalendar/FilterCalendar.d.ts +1 -1
  28. package/lib/core/components/buttons/CloseButton/CloseButton.d.ts +7 -0
  29. package/lib/core/components/buttons/SubmitButton/SubmitButton.d.ts +14 -0
  30. package/lib/core/components/index.d.ts +4 -2
  31. package/lib/index.d.ts +1 -1
  32. package/lib/index.esm.js +1096 -1059
  33. package/lib/index.esm.js.map +1 -1
  34. package/lib/index.js +1095 -1058
  35. package/lib/index.js.map +1 -1
  36. package/lib/index.umd.js +1095 -1058
  37. package/lib/index.umd.js.map +1 -1
  38. package/lib/themes/useTheme.d.ts +1 -1
  39. package/package.json +1 -1
  40. package/src/components/FilterBar/FilterBar.css +4 -70
  41. package/src/components/FilterBar/FilterBar.stories.tsx +1 -1
  42. package/src/components/FilterBar/FilterBar.tsx +28 -283
  43. package/src/components/FilterBar/components/FilterControls/FilterControls.css +18 -0
  44. package/src/components/FilterBar/components/FilterControls/FilterControls.tsx +135 -0
  45. package/src/components/FilterBar/components/{categories → FilterPanels/Categories}/Categories.css +1 -1
  46. package/src/components/FilterBar/components/{categories → FilterPanels/Categories}/Categories.tsx +3 -1
  47. package/src/components/FilterBar/components/{dates → FilterPanels/Dates}/Dates.tsx +11 -11
  48. package/src/components/FilterBar/components/FilterPanels/FilterPanels.css +24 -0
  49. package/src/components/FilterBar/components/FilterPanels/FilterPanels.tsx +115 -0
  50. package/src/components/FilterBar/components/{guests → FilterPanels/Guests}/GuestCount/GuestCount.tsx +1 -1
  51. package/src/components/FilterBar/components/{guests → FilterPanels/Guests}/Guests.css +5 -6
  52. package/src/components/FilterBar/components/{guests → FilterPanels/Guests}/Guests.tsx +7 -7
  53. package/src/components/FilterBar/components/{locations → FilterPanels/Locations}/Locations.css +1 -1
  54. package/src/components/FilterBar/components/{locations → FilterPanels/Locations}/Locations.tsx +7 -6
  55. package/src/components/FilterBar/components/{common/FilterSectionHeader.tsx → FilterPanels/SectionHeader/SectionHeader.tsx} +2 -2
  56. package/src/components/FilterBar/components/FilterTabs/FilterTabs.css +10 -0
  57. package/src/components/FilterBar/components/FilterTabs/FilterTabs.tsx +47 -0
  58. package/src/components/FilterBar/components/{buttons/select-button → SelectButton}/SelectButton.css +1 -0
  59. package/src/components/FilterBar/components/{buttons/select-button → SelectButton}/SelectButton.tsx +7 -6
  60. package/src/components/FilterBar/components/index.ts +6 -6
  61. package/src/components/FilterBar/hooks/index.ts +4 -1
  62. package/src/components/FilterBar/hooks/useFilterActions.tsx +126 -0
  63. package/src/components/FilterBar/hooks/useFilterState.tsx +86 -0
  64. package/src/components/FilterBar/hooks/useFilterUi.tsx +19 -0
  65. package/src/components/FilterBar/hooks/usePanelPosition.tsx +66 -0
  66. package/src/components/FilterBar/index.ts +1 -1
  67. package/src/components/FilterBar/providers/FilterBarProvider.tsx +169 -0
  68. package/src/components/FilterBar/providers/index.ts +1 -0
  69. package/src/components/FilterBar/utils/ageCategoriesRules.ts +27 -0
  70. package/src/components/FilterBar/utils/index.tsx +1 -1
  71. package/src/components/FilterBar/utils/parseGuests.tsx +20 -9
  72. package/src/components/FilterBar/utils/{parseLocations.tsx → parseLocations.ts} +3 -4
  73. package/src/components/FilterCalendar/FilterCalendar.tsx +2 -2
  74. package/src/core/components/index.ts +5 -2
  75. package/src/index.ts +1 -1
  76. package/src/themes/useTheme.tsx +1 -1
  77. package/src/components/FilterBar/components/buttons/index.ts +0 -5
  78. package/src/components/FilterBar/components/cards/index.ts +0 -1
  79. package/src/components/FilterBar/components/dates/index.ts +0 -1
  80. package/src/components/FilterBar/hooks/useFilterBar.tsx +0 -208
  81. package/src/components/FilterBar/utils/calculateDropdownPosition.tsx +0 -96
  82. /package/src/components/FilterBar/components/{divider → Divider}/Divider.css +0 -0
  83. /package/src/components/FilterBar/components/{divider → Divider}/Divider.tsx +0 -0
  84. /package/src/components/FilterBar/components/{dates → FilterPanels/Dates}/Dates.css +0 -0
  85. /package/src/components/FilterBar/components/{guests → FilterPanels/Guests}/GuestCount/GuestCount.css +0 -0
  86. /package/src/components/FilterBar/components/{common/FilterSectionHeader.css → FilterPanels/SectionHeader/SectionHeader.css} +0 -0
  87. /package/src/components/FilterBar/components/{cards/image-card → ImageCard}/ImageCard.css +0 -0
  88. /package/src/components/FilterBar/components/{cards/image-card → ImageCard}/ImageCard.tsx +0 -0
  89. /package/src/components/FilterBar/components/{buttons/tab-button → TabButton}/TabButton.css +0 -0
  90. /package/src/components/FilterBar/components/{buttons/tab-button → TabButton}/TabButton.tsx +0 -0
  91. /package/src/core/components/buttons/{close-button → CloseButton}/CloseButton.css +0 -0
  92. /package/src/core/components/buttons/{close-button → CloseButton}/CloseButton.tsx +0 -0
  93. /package/src/core/components/buttons/{submit-button → SubmitButton}/SubmitButton.css +0 -0
  94. /package/src/core/components/buttons/{submit-button → SubmitButton}/SubmitButton.tsx +0 -0
package/lib/index.esm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import React__default, { useState, createContext, useContext, useRef, useEffect, forwardRef, useMemo } from 'react';
2
+ import React__default, { useState, useEffect, createContext, useContext, useRef, forwardRef, useMemo } from 'react';
3
3
 
4
4
  /******************************************************************************
5
5
  Copyright (c) Microsoft Corporation.
@@ -191,8 +191,8 @@ function styleInject(css, ref) {
191
191
  }
192
192
  }
193
193
 
194
- 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}";
195
- 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);
196
196
 
197
197
  /**
198
198
  * Primary UI component for user interaction
@@ -203,440 +203,100 @@ var Button$1 = function (_a) {
203
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)));
204
204
  };
205
205
 
206
- function warn() {
207
- if (console && console.warn) {
208
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
209
- args[_key] = arguments[_key];
210
- }
211
- if (typeof args[0] === 'string') args[0] = `react-i18next:: ${args[0]}`;
212
- console.warn(...args);
213
- }
214
- }
215
- const alreadyWarned = {};
216
- function warnOnce() {
217
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
218
- args[_key2] = arguments[_key2];
219
- }
220
- if (typeof args[0] === 'string' && alreadyWarned[args[0]]) return;
221
- if (typeof args[0] === 'string') alreadyWarned[args[0]] = new Date();
222
- warn(...args);
223
- }
224
- const loadedClb = (i18n, cb) => () => {
225
- if (i18n.isInitialized) {
226
- cb();
227
- } else {
228
- const initialized = () => {
229
- setTimeout(() => {
230
- i18n.off('initialized', initialized);
231
- }, 0);
232
- 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,
233
212
  };
234
- i18n.on('initialized', initialized);
235
- }
213
+ return themePalette;
236
214
  };
237
- function loadNamespaces(i18n, ns, cb) {
238
- i18n.loadNamespaces(ns, loadedClb(i18n, cb));
239
- }
240
- function loadLanguages(i18n, lng, ns, cb) {
241
- if (typeof ns === 'string') ns = [ns];
242
- ns.forEach(n => {
243
- if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);
244
- });
245
- i18n.loadLanguages(lng, loadedClb(i18n, cb));
246
- }
247
- function oldI18nextHasLoadedNamespace(ns, i18n) {
248
- let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
249
- const lng = i18n.languages[0];
250
- const fallbackLng = i18n.options ? i18n.options.fallbackLng : false;
251
- const lastLng = i18n.languages[i18n.languages.length - 1];
252
- if (lng.toLowerCase() === 'cimode') return true;
253
- const loadNotPending = (l, n) => {
254
- const loadState = i18n.services.backendConnector.state[`${l}|${n}`];
255
- return loadState === -1 || loadState === 2;
256
- };
257
- if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false;
258
- if (i18n.hasResourceBundle(lng, ns)) return true;
259
- if (!i18n.services.backendConnector.backend || i18n.options.resources && !i18n.options.partialBundledLanguages) return true;
260
- if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;
261
- return false;
262
- }
263
- function hasLoadedNamespace(ns, i18n) {
264
- let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
265
- if (!i18n.languages || !i18n.languages.length) {
266
- warnOnce('i18n.languages were undefined or empty', i18n.languages);
267
- return true;
268
- }
269
- const isNewerI18next = i18n.options.ignoreJSONStructure !== undefined;
270
- if (!isNewerI18next) {
271
- return oldI18nextHasLoadedNamespace(ns, i18n, options);
272
- }
273
- return i18n.hasLoadedNamespace(ns, {
274
- lng: options.lng,
275
- precheck: (i18nInstance, loadNotPending) => {
276
- if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;
277
- }
278
- });
279
- }
280
215
 
281
- const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;
282
- const htmlEntities = {
283
- '&amp;': '&',
284
- '&#38;': '&',
285
- '&lt;': '<',
286
- '&#60;': '<',
287
- '&gt;': '>',
288
- '&#62;': '>',
289
- '&apos;': "'",
290
- '&#39;': "'",
291
- '&quot;': '"',
292
- '&#34;': '"',
293
- '&nbsp;': ' ',
294
- '&#160;': ' ',
295
- '&copy;': '©',
296
- '&#169;': '©',
297
- '&reg;': '®',
298
- '&#174;': '®',
299
- '&hellip;': '…',
300
- '&#8230;': '…',
301
- '&#x2F;': '/',
302
- '&#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;
303
223
  };
304
- const unescapeHtmlEntity = m => htmlEntities[m];
305
- const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);
306
224
 
307
- let defaultOptions$1 = {
308
- bindI18n: 'languageChanged',
309
- bindI18nStore: '',
310
- transEmptyNodeValue: '',
311
- transSupportBasicHtmlNodes: true,
312
- transWrapTextNodes: '',
313
- transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],
314
- useSuspense: true,
315
- 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;
316
236
  };
317
- function setDefaults() {
318
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
319
- defaultOptions$1 = {
320
- ...defaultOptions$1,
321
- ...options
322
- };
323
- }
324
- function getDefaults() {
325
- return defaultOptions$1;
326
- }
327
-
328
- let i18nInstance;
329
- function setI18n(instance) {
330
- i18nInstance = instance;
331
- }
332
- function getI18n() {
333
- return i18nInstance;
334
- }
335
-
336
- const initReactI18next = {
337
- type: '3rdParty',
338
- init(instance) {
339
- setDefaults(instance.options.react);
340
- setI18n(instance);
341
- }
237
+ const makeString = object => {
238
+ if (object == null) return '';
239
+ return '' + object;
342
240
  };
343
-
344
- const I18nContext = createContext();
345
- class ReportNamespaces {
346
- constructor() {
347
- 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;
348
262
  }
349
- addUsedNamespaces(namespaces) {
350
- namespaces.forEach(ns => {
351
- if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;
352
- });
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;
353
277
  }
354
- getUsedNamespaces() {
355
- 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
+ }
356
288
  }
357
- }
358
-
359
- const usePrevious = (value, ignore) => {
360
- const ref = useRef();
361
- useEffect(() => {
362
- ref.current = ignore ? ref.current : value;
363
- }, [value, ignore]);
364
- return ref.current;
289
+ last.obj[`${last.k}.${e}`] = newValue;
365
290
  };
366
- function useTranslation(ns) {
367
- let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
291
+ const pushPath = (object, path, newValue, concat) => {
368
292
  const {
369
- i18n: i18nFromProps
370
- } = props;
371
- const {
372
- i18n: i18nFromContext,
373
- defaultNS: defaultNSFromContext
374
- } = useContext(I18nContext) || {};
375
- const i18n = i18nFromProps || i18nFromContext || getI18n();
376
- if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();
377
- if (!i18n) {
378
- warnOnce('You will need to pass in an i18next instance by using initReactI18next');
379
- const notReadyT = (k, optsOrDefaultValue) => {
380
- if (typeof optsOrDefaultValue === 'string') return optsOrDefaultValue;
381
- if (optsOrDefaultValue && typeof optsOrDefaultValue === 'object' && typeof optsOrDefaultValue.defaultValue === 'string') return optsOrDefaultValue.defaultValue;
382
- return Array.isArray(k) ? k[k.length - 1] : k;
383
- };
384
- const retNotReady = [notReadyT, {}, false];
385
- retNotReady.t = notReadyT;
386
- retNotReady.i18n = {};
387
- retNotReady.ready = false;
388
- return retNotReady;
389
- }
390
- 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.');
391
- const i18nOptions = {
392
- ...getDefaults(),
393
- ...i18n.options.react,
394
- ...props
395
- };
396
- const {
397
- useSuspense,
398
- keyPrefix
399
- } = i18nOptions;
400
- let namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;
401
- namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation'];
402
- if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces);
403
- const ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));
404
- function getT() {
405
- return i18n.getFixedT(props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);
406
- }
407
- const [t, setT] = useState(getT);
408
- let joinedNS = namespaces.join();
409
- if (props.lng) joinedNS = `${props.lng}${joinedNS}`;
410
- const previousJoinedNS = usePrevious(joinedNS);
411
- const isMounted = useRef(true);
412
- useEffect(() => {
413
- const {
414
- bindI18n,
415
- bindI18nStore
416
- } = i18nOptions;
417
- isMounted.current = true;
418
- if (!ready && !useSuspense) {
419
- if (props.lng) {
420
- loadLanguages(i18n, props.lng, namespaces, () => {
421
- if (isMounted.current) setT(getT);
422
- });
423
- } else {
424
- loadNamespaces(i18n, namespaces, () => {
425
- if (isMounted.current) setT(getT);
426
- });
427
- }
428
- }
429
- if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) {
430
- setT(getT);
431
- }
432
- function boundReset() {
433
- if (isMounted.current) setT(getT);
434
- }
435
- if (bindI18n && i18n) i18n.on(bindI18n, boundReset);
436
- if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset);
437
- return () => {
438
- isMounted.current = false;
439
- if (bindI18n && i18n) bindI18n.split(' ').forEach(e => i18n.off(e, boundReset));
440
- if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, boundReset));
441
- };
442
- }, [i18n, joinedNS]);
443
- const isInitial = useRef(true);
444
- useEffect(() => {
445
- if (isMounted.current && !isInitial.current) {
446
- setT(getT);
447
- }
448
- isInitial.current = false;
449
- }, [i18n, keyPrefix]);
450
- const ret = [t, i18n, ready];
451
- ret.t = t;
452
- ret.i18n = i18n;
453
- ret.ready = ready;
454
- if (ready) return ret;
455
- if (!ready && !useSuspense) return ret;
456
- throw new Promise(resolve => {
457
- if (props.lng) {
458
- loadLanguages(i18n, props.lng, namespaces, () => resolve());
459
- } else {
460
- loadNamespaces(i18n, namespaces, () => resolve());
461
- }
462
- });
463
- }
464
-
465
- var DefaultContext = {
466
- color: undefined,
467
- size: undefined,
468
- className: undefined,
469
- style: undefined,
470
- attr: undefined
471
- };
472
- var IconContext = React__default.createContext && React__default.createContext(DefaultContext);
473
-
474
- var __assign$1 = undefined && undefined.__assign || function () {
475
- __assign$1 = Object.assign || function (t) {
476
- for (var s, i = 1, n = arguments.length; i < n; i++) {
477
- s = arguments[i];
478
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
479
- }
480
- return t;
481
- };
482
- return __assign$1.apply(this, arguments);
483
- };
484
- var __rest$1 = undefined && undefined.__rest || function (s, e) {
485
- var t = {};
486
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
487
- if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
488
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
489
- }
490
- return t;
491
- };
492
- function Tree2Element(tree) {
493
- return tree && tree.map(function (node, i) {
494
- return React__default.createElement(node.tag, __assign$1({
495
- key: i
496
- }, node.attr), Tree2Element(node.child));
497
- });
498
- }
499
- function GenIcon(data) {
500
- // eslint-disable-next-line react/display-name
501
- return function (props) {
502
- return React__default.createElement(IconBase, __assign$1({
503
- attr: __assign$1({}, data.attr)
504
- }, props), Tree2Element(data.child));
505
- };
506
- }
507
- function IconBase(props) {
508
- var elem = function (conf) {
509
- var attr = props.attr,
510
- size = props.size,
511
- title = props.title,
512
- svgProps = __rest$1(props, ["attr", "size", "title"]);
513
- var computedSize = size || conf.size || "1em";
514
- var className;
515
- if (conf.className) className = conf.className;
516
- if (props.className) className = (className ? className + " " : "") + props.className;
517
- return React__default.createElement("svg", __assign$1({
518
- stroke: "currentColor",
519
- fill: "currentColor",
520
- strokeWidth: "0"
521
- }, conf.attr, attr, svgProps, {
522
- className: className,
523
- style: __assign$1(__assign$1({
524
- color: props.color || conf.color
525
- }, conf.style), props.style),
526
- height: computedSize,
527
- width: computedSize,
528
- xmlns: "http://www.w3.org/2000/svg"
529
- }), title && React__default.createElement("title", null, title), props.children);
530
- };
531
- return IconContext !== undefined ? React__default.createElement(IconContext.Consumer, null, function (conf) {
532
- return elem(conf);
533
- }) : elem(DefaultContext);
534
- }
535
-
536
- // THIS FILE IS AUTO GENERATED
537
- function FaSearch (props) {
538
- 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);
539
- }function FaSpinner (props) {
540
- 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);
541
- }
542
-
543
- function useTheme(_a) {
544
- var palette = _a.palette;
545
- var themePalette = {
546
- '--will-primary': palette === null || palette === void 0 ? void 0 : palette.primary,
547
- '--will-secondary': palette === null || palette === void 0 ? void 0 : palette.secondary,
548
- '--will-error': palette === null || palette === void 0 ? void 0 : palette.error,
549
- };
550
- return themePalette;
551
- }
552
-
553
- 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";
554
- styleInject(css_248z$g);
555
-
556
- var useAwaitRender = function () {
557
- var _a = __read(useState(false), 2), initialRenderComplete = _a[0], setInitialRenderComplete = _a[1];
558
- useEffect(function () {
559
- setInitialRenderComplete(true);
560
- }, []);
561
- if (!initialRenderComplete)
562
- return null;
563
- };
564
-
565
- const isString = obj => typeof obj === 'string';
566
- const defer = () => {
567
- let res;
568
- let rej;
569
- const promise = new Promise((resolve, reject) => {
570
- res = resolve;
571
- rej = reject;
572
- });
573
- promise.resolve = res;
574
- promise.reject = rej;
575
- return promise;
576
- };
577
- const makeString = object => {
578
- if (object == null) return '';
579
- return '' + object;
580
- };
581
- const copy = (a, s, t) => {
582
- a.forEach(m => {
583
- if (s[m]) t[m] = s[m];
584
- });
585
- };
586
- const lastOfPathSeparatorRegExp = /###/g;
587
- const cleanKey = key => key && key.indexOf('###') > -1 ? key.replace(lastOfPathSeparatorRegExp, '.') : key;
588
- const canNotTraverseDeeper = object => !object || isString(object);
589
- const getLastOfPath = (object, path, Empty) => {
590
- const stack = !isString(path) ? path : path.split('.');
591
- let stackIndex = 0;
592
- while (stackIndex < stack.length - 1) {
593
- if (canNotTraverseDeeper(object)) return {};
594
- const key = cleanKey(stack[stackIndex]);
595
- if (!object[key] && Empty) object[key] = new Empty();
596
- if (Object.prototype.hasOwnProperty.call(object, key)) {
597
- object = object[key];
598
- } else {
599
- object = {};
600
- }
601
- ++stackIndex;
602
- }
603
- if (canNotTraverseDeeper(object)) return {};
604
- return {
605
- obj: object,
606
- k: cleanKey(stack[stackIndex])
607
- };
608
- };
609
- const setPath = (object, path, newValue) => {
610
- const {
611
- obj,
612
- k
613
- } = getLastOfPath(object, path, Object);
614
- if (obj !== undefined || path.length === 1) {
615
- obj[k] = newValue;
616
- return;
617
- }
618
- let e = path[path.length - 1];
619
- let p = path.slice(0, path.length - 1);
620
- let last = getLastOfPath(object, p, Object);
621
- while (last.obj === undefined && p.length) {
622
- e = `${p[p.length - 1]}.${e}`;
623
- p = p.slice(0, p.length - 1);
624
- last = getLastOfPath(object, p, Object);
625
- if (last?.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {
626
- last.obj = undefined;
627
- }
628
- }
629
- last.obj[`${last.k}.${e}`] = newValue;
630
- };
631
- const pushPath = (object, path, newValue, concat) => {
632
- const {
633
- obj,
634
- k
635
- } = getLastOfPath(object, path, Object);
636
- obj[k] = obj[k] || [];
637
- obj[k].push(newValue);
638
- };
639
- 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) => {
640
300
  const {
641
301
  obj,
642
302
  k
@@ -2792,16 +2452,275 @@ instance.hasLoadedNamespace;
2792
2452
  instance.loadNamespaces;
2793
2453
  instance.loadLanguages;
2794
2454
 
2795
- var locations$1 = {
2796
- label: "Location",
2797
- title: "Select location",
2798
- placeholder: "Add location",
2799
- selected: "locations"
2800
- };
2801
- var calendar$1 = {
2802
- label: "Dates",
2803
- roomsLabelPlaceholder: "Add check-in and check-out",
2804
- eventsLabelPlaceholder: "Add search dates",
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",
2805
2724
  startDate: "Start date",
2806
2725
  endDate: "End date",
2807
2726
  title: "Calendar"
@@ -2998,28 +2917,134 @@ var useAutoFocus = function (autoFocus) {
2998
2917
  return ref;
2999
2918
  };
3000
2919
 
3001
- 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";
3002
- 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);
3003
2922
 
3004
- var SubmitButton = function (_a) {
3005
- var onClick = _a.onClick, startIcon = _a.startIcon, label = _a.label, disabled = _a.disabled, isLoading = _a.isLoading, variant = _a.variant;
3006
- return (React__default.createElement("button", { className: "will-filter-bar-submit-button ".concat(variant || 'default'), onClick: onClick, disabled: disabled || isLoading },
3007
- isLoading ? (React__default.createElement("span", null, React__default.createElement(FaSpinner, { style: { animation: 'spin 1s linear infinite' } }))) : (startIcon && React__default.createElement("span", null, startIcon)),
3008
- 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));
3009
2939
  };
3010
2940
 
3011
- // THIS FILE IS AUTO GENERATED
3012
- function IoIosCloseCircleOutline (props) {
3013
- 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);
3014
- }
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);
3015
2943
 
3016
- 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";
3017
- styleInject(css_248z$e);
2944
+ var Divider = function () {
2945
+ return React__default.createElement("div", { className: "will-filter-bar-divider" });
2946
+ };
3018
2947
 
3019
- var CloseButton = function (_a) {
3020
- var handleClose = _a.handleClose;
3021
- return (React__default.createElement("button", { className: "will-filter-bar-close-button", onClick: handleClose },
3022
- React__default.createElement(IoIosCloseCircleOutline, null)));
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
+ };
3023
3048
  };
3024
3049
 
3025
3050
  function _typeof(o) {
@@ -6578,62 +6603,416 @@ function subDays(dirtyDate, dirtyAmount) {
6578
6603
  * Set the month to the given date.
6579
6604
  *
6580
6605
  * @param {Date|Number} date - the date to be changed
6581
- * @param {Number} month - the month of the new date
6582
- * @returns {Date} the new date with the month set
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;
6629
+ }
6630
+
6631
+ /**
6632
+ * @name setYear
6633
+ * @category Year Helpers
6634
+ * @summary Set the year to the given date.
6635
+ *
6636
+ * @description
6637
+ * Set the year to the given date.
6638
+ *
6639
+ * @param {Date|Number} date - the date to be changed
6640
+ * @param {Number} year - the year of the new date
6641
+ * @returns {Date} the new date with the year set
6583
6642
  * @throws {TypeError} 2 arguments required
6584
6643
  *
6585
6644
  * @example
6586
- * // Set February to 1 September 2014:
6587
- * const result = setMonth(new Date(2014, 8, 1), 1)
6588
- * //=> Sat Feb 01 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
6589
6648
  */
6590
- function setMonth(dirtyDate, dirtyMonth) {
6649
+ function setYear(dirtyDate, dirtyYear) {
6591
6650
  requiredArgs(2, arguments);
6592
6651
  var date = toDate(dirtyDate);
6593
- var month = toInteger(dirtyMonth);
6594
- var year = date.getFullYear();
6595
- var day = date.getDate();
6596
- var dateWithDesiredMonth = new Date(0);
6597
- dateWithDesiredMonth.setFullYear(year, month, 15);
6598
- dateWithDesiredMonth.setHours(0, 0, 0, 0);
6599
- var daysInMonth = getDaysInMonth(dateWithDesiredMonth);
6600
- // Set the last day of the new month
6601
- // if the original date was the last day of the longer month
6602
- date.setMonth(month, Math.min(day, daysInMonth));
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);
6603
6659
  return date;
6604
6660
  }
6605
6661
 
6606
- /**
6607
- * @name setYear
6608
- * @category Year Helpers
6609
- * @summary Set the year to the given date.
6610
- *
6611
- * @description
6612
- * Set the year to the given date.
6613
- *
6614
- * @param {Date|Number} date - the date to be changed
6615
- * @param {Number} year - the year of the new date
6616
- * @returns {Date} the new date with the year set
6617
- * @throws {TypeError} 2 arguments required
6618
- *
6619
- * @example
6620
- * // Set year 2013 to 1 September 2014:
6621
- * const result = setYear(new Date(2014, 8, 1), 2013)
6622
- * //=> Sun Sep 01 2013 00:00:00
6623
- */
6624
- function setYear(dirtyDate, dirtyYear) {
6625
- requiredArgs(2, arguments);
6626
- var date = toDate(dirtyDate);
6627
- var year = toInteger(dirtyYear);
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);
6983
+ }
6984
+
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);
6990
+ }
6991
+
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);
6994
+
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
+ };
6628
7001
 
6629
- // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date
6630
- if (isNaN(date.getTime())) {
6631
- return new Date(NaN);
6632
- }
6633
- date.setFullYear(year);
6634
- return date;
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);
6635
7005
  }
6636
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
+
6637
7016
  function futureSeconds(text) {
6638
7017
  return text.replace(/sekuntia?/, 'sekunnin');
6639
7018
  }
@@ -11476,11 +11855,11 @@ var useUpdateDisabledDates = function (_a) {
11476
11855
  return { newDisableCalendarDates: newDisableCalendarDates, overlappingDate: overlappingDate, lastPossibleCheckout: lastPossibleCheckout };
11477
11856
  };
11478
11857
 
11479
- 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}";
11480
- styleInject(css_248z$d);
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);
11481
11860
 
11482
- 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";
11483
- styleInject(css_248z$c);
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);
11484
11863
 
11485
11864
  var Calendar = forwardRef(function (_a, ref) {
11486
11865
  var _b;
@@ -11550,413 +11929,100 @@ var Calendar = forwardRef(function (_a, ref) {
11550
11929
  // No gap between check-in and first possible check-out, nothing to disable
11551
11930
  addDays(currentSelectionAvailability.checkIn, 1) >=
11552
11931
  currentSelectionAvailability.firstCheckOut) {
11553
- return [];
11554
- }
11555
- // Disable dates between current check-in and first possible check-out
11556
- return [
11557
- {
11558
- from: addDays(currentSelectionAvailability.checkIn, 1),
11559
- to: addDays(currentSelectionAvailability.firstCheckOut, -1),
11560
- },
11561
- ];
11562
- };
11563
- var base = disabledDatesByPage$1.length
11564
- ? disabledDatesByPage$1
11565
- : (disabledDates === null || disabledDates === void 0 ? void 0 : disabledDates.length)
11566
- ? disabledDates
11567
- : (newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.disabledDates) || [];
11568
- var disabled = disabledDatesByPage$1.length
11569
- ? base
11570
- : __spreadArray$1(__spreadArray$1(__spreadArray$1(__spreadArray$1([
11571
- lastPossibleCheckout
11572
- ], __read(base), false), __read(firstPossibleRangeContextCheckIn), false), __read(lastPossibleRangeContextCheckOut), false), __read(disabledInsideSelectableRange()), false);
11573
- return (React__default.createElement("div", { className: "will-filter-bar-calendar", ref: ref },
11574
- React__default.createElement("div", { className: "will-calendar-filter-container", ref: calendarContainerRef },
11575
- 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) ||
11576
- selectedStartDate ||
11577
- rangeContextStartDate ||
11578
- (((_b = newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.length)
11579
- ? newDisableCalendarDates.disabledDates[0].from
11580
- : today), disabled: disabled, fromMonth: today, onMonthChange: function (val) {
11581
- requestDates === null || requestDates === void 0 ? void 0 : requestDates(val);
11582
- setUpdateCalendarMonthNavigation === null || setUpdateCalendarMonthNavigation === void 0 ? void 0 : setUpdateCalendarMonthNavigation(function (prev) { return !prev; });
11583
- }, classNames: {
11584
- day_range_start: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) ? 'rdp-day_range_start' : '',
11585
- day_range_end: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) ? 'rdp-day_range_end' : '',
11586
- }, modifiersClassNames: {
11587
- today: 'my-today',
11588
- booked: 'booked',
11589
- disabledAfterCheckIn: 'disabled-after-check-in',
11590
- overlappingDate: 'overlapping-date',
11591
- noActiveSelectionStart: 'no-active-selection-start',
11592
- noActiveSelectionMid: 'no-active-selection-mid',
11593
- noActiveSelectionEnd: 'no-active-selection-end',
11594
- checkoutOptionsMid: 'rdp-day_selected rdp-day_range_middle checkout-option',
11595
- checkInOnly: 'check-in-only',
11596
- checkOutOnly: 'check-out-only',
11597
- }, modifiers:
11598
- // This function handles conditions for applying the modifiersClassNames
11599
- handleCalendarModifiers({
11600
- calendarRange: calendarRange,
11601
- disabledDates: disabled,
11602
- overlappingDate: overlappingDate,
11603
- rangeContext: rangeContext,
11604
- findFirstPossibleRangeContextCheckIn: findFirstPossibleRangeContextCheckIn,
11605
- findLastPossibleRangeContextCheckOut: findLastPossibleRangeContextCheckOut,
11606
- currentSelectionLastCheckoutDate: currentSelectionAvailability,
11607
- }) }),
11608
- React__default.createElement("div", { className: 'will-calendar-tooltip' },
11609
- React__default.createElement("div", null, t('noCheckIn'))),
11610
- React__default.createElement("div", { className: 'will-calendar-tooltip-check-out' },
11611
- React__default.createElement("div", null, t('noCheckOut'))),
11612
- React__default.createElement("div", { className: 'will-calendar-tooltip-overlapping-date' },
11613
- React__default.createElement("div", null, t('checkOutOnly'))),
11614
- React__default.createElement("div", { className: 'will-calendar-tooltip-check-in-only' },
11615
- React__default.createElement("div", null, t('checkInOnly'))),
11616
- React__default.createElement("div", { className: 'will-calendar-tooltip-check-out-only' },
11617
- React__default.createElement("div", null, t('checkOutOnly'))),
11618
- React__default.createElement("div", { className: 'will-calendar-spinner' },
11619
- React__default.createElement(IconsSvg, { fill: (palette === null || palette === void 0 ? void 0 : palette.primary) || 'inherit', size: 50, icon: "spinner" })))));
11620
- });
11621
-
11622
- var parseGuests = function (_a) {
11623
- var guestLabel = _a.guestLabel, guestsLabel = _a.guestsLabel, guestsPlaceholder = _a.guestsPlaceholder, ageCategoryCounts = _a.ageCategoryCounts, ageCategories = _a.ageCategories;
11624
- var parsedData = Object.entries(ageCategoryCounts).reduce(function (acc, _a) {
11625
- var _b = __read(_a, 2), key = _b[0], value = _b[1];
11626
- var parts = key.split('-');
11627
- if (parts.length < 2)
11628
- return acc;
11629
- var ageCategoryId = parts[1];
11630
- var ageCategory = ageCategories.find(function (c) { return c.id === ageCategoryId; });
11631
- if (ageCategory && value) {
11632
- return {
11633
- total: acc.total + value,
11634
- html: __spreadArray$1(__spreadArray$1([], __read(acc.html), false), ["".concat(value)], false),
11635
- };
11636
- }
11637
- return acc;
11638
- }, { total: 0, html: [] });
11639
- var htmlString = parsedData.html.length > 1 ? parsedData.html.join(' + ') : '';
11640
- return {
11641
- content: parsedData.total
11642
- ? "<span class=\"will-guest-count\">".concat(parsedData.total, "</span> ").concat(parsedData.total > 1 ? guestsLabel : guestLabel).concat(htmlString ? " &nbsp; ( ".concat(htmlString, " )") : '')
11643
- : guestsPlaceholder,
11644
- data: parsedData,
11645
- };
11646
- };
11647
-
11648
- var parseLocations = function (_a) {
11649
- var selectedLocations = _a.selectedLocations, locationsPlaceholder = _a.locationsPlaceholder, _b = _a.locationsSelectedLabel, locationsSelectedLabel = _b === void 0 ? 'locations' : _b;
11650
- if (!selectedLocations.length) {
11651
- return locationsPlaceholder;
11652
- }
11653
- if (selectedLocations.length === 1) {
11654
- var translation = selectedLocations[0].label;
11655
- if (!translation) {
11656
- return locationsPlaceholder;
11657
- }
11658
- return translation;
11659
- }
11660
- return "".concat(selectedLocations.length, " ").concat(locationsSelectedLabel);
11661
- };
11662
-
11663
- var FilterSections;
11664
- (function (FilterSections) {
11665
- FilterSections["CALENDAR"] = "calendar";
11666
- FilterSections["GUESTS"] = "guests";
11667
- FilterSections["CATEGORIES"] = "categories";
11668
- FilterSections["LOCATIONS"] = "locations";
11669
- })(FilterSections || (FilterSections = {}));
11670
- var Pages;
11671
- (function (Pages) {
11672
- Pages["ROOMS"] = "/rooms";
11673
- Pages["EVENTS"] = "/events";
11674
- Pages["SALES"] = "/sales";
11675
- })(Pages || (Pages = {}));
11676
-
11677
- var calculateDropdownPosition = function (_a) {
11678
- var filterSection = _a.filterSection, headerRef = _a.headerRef, locationsButtonRef = _a.locationsButtonRef, datesButtonRef = _a.datesButtonRef, guestsButtonRef = _a.guestsButtonRef, isMobile = _a.isMobile;
11679
- if (isMobile) {
11680
- return {};
11681
- }
11682
- if (!headerRef.current)
11683
- return {};
11684
- var containerRect = headerRef.current.getBoundingClientRect();
11685
- var containerLeft = 0;
11686
- switch (filterSection) {
11687
- case FilterSections.LOCATIONS:
11688
- if (locationsButtonRef.current) {
11689
- var buttonRect = locationsButtonRef.current.getBoundingClientRect();
11690
- var relativeLeft = buttonRect.left - containerRect.left;
11691
- return {
11692
- left: relativeLeft,
11693
- right: 'auto',
11694
- width: 'auto',
11695
- };
11696
- }
11697
- break;
11698
- case FilterSections.CALENDAR:
11699
- if (datesButtonRef.current) {
11700
- var buttonRect = datesButtonRef.current.getBoundingClientRect();
11701
- var relativeLeft = buttonRect.left - containerRect.left;
11702
- var availableWidth = containerRect.width - relativeLeft;
11703
- var calendarMinWidth = 650;
11704
- if (availableWidth < calendarMinWidth) {
11705
- return {
11706
- left: 'auto',
11707
- right: containerLeft,
11708
- width: 'auto',
11709
- maxWidth: "".concat(containerRect.width, "px"),
11710
- };
11711
- }
11712
- else {
11713
- return {
11714
- left: relativeLeft,
11715
- right: 'auto',
11716
- width: 'auto',
11717
- };
11718
- }
11719
- }
11720
- break;
11721
- case FilterSections.GUESTS:
11722
- if (guestsButtonRef.current) {
11723
- var buttonRect = guestsButtonRef.current.getBoundingClientRect();
11724
- var relativeLeft = buttonRect.left - containerRect.left;
11725
- var availableWidth = containerRect.width - relativeLeft;
11726
- var dropdownMinWidth = 350;
11727
- if (availableWidth < dropdownMinWidth) {
11728
- return {
11729
- left: 'auto',
11730
- right: containerLeft,
11731
- width: 'auto',
11732
- maxWidth: "".concat(containerRect.width, "px"),
11733
- };
11734
- }
11735
- else {
11736
- return {
11737
- left: relativeLeft,
11738
- right: 'auto',
11739
- width: 'auto',
11740
- };
11741
- }
11742
- }
11743
- break;
11744
- default:
11745
- return {};
11746
- }
11747
- return {};
11748
- };
11749
-
11750
- var useFilterBar = function (_a) {
11751
- var redirectUrl = _a.redirectUrl, ageCategories = _a.ageCategories, onSubmit = _a.onSubmit, tabs = _a.tabs, locations = _a.locations;
11752
- var _b = __read(useState(Pages.EVENTS), 2), selectedPath = _b[0], setSelectedPath = _b[1];
11753
- var _c = __read(useState(false), 2), selectedFilter = _c[0], setSelectedFilter = _c[1];
11754
- var _d = __read(useState(), 2), calendarRange = _d[0], setCalendarRange = _d[1];
11755
- var _e = __read(useState(false), 2), innerLoading = _e[0], setInnerLoading = _e[1];
11756
- var _f = __read(useState(0), 2), categories = _f[0], setCategories = _f[1];
11757
- var _g = __read(useState({}), 2), ageCategoryCounts = _g[0], setAgeCategoryCounts = _g[1];
11758
- var _h = __read(useState([]), 2), selectedLocations = _h[0], setSelectedLocations = _h[1];
11759
- useEffect(function () {
11760
- var _a;
11761
- var urlSearchParams = new URLSearchParams(window.location.search);
11762
- var startDateParam = urlSearchParams.get('startDate');
11763
- var endDateParam = urlSearchParams.get('endDate');
11764
- // Get all locationId params from URL
11765
- var locationIdParams = urlSearchParams.getAll('locationId');
11766
- var ageCategoryCountsParam = JSON.parse(urlSearchParams.get('ageCategoryCounts') || '{}');
11767
- var parsedCategories = parseInt(urlSearchParams.get('categories') || '0', 10);
11768
- if (startDateParam && endDateParam) {
11769
- setCalendarRange({
11770
- from: new Date(startDateParam),
11771
- to: new Date(endDateParam),
11772
- });
11773
- }
11774
- setAgeCategoryCounts(ageCategoryCountsParam);
11775
- setCategories(parsedCategories);
11776
- // Set selected locations from URL - handle all locationIds
11777
- if (((_a = locations === null || locations === void 0 ? void 0 : locations.data) === null || _a === void 0 ? void 0 : _a.length) && locationIdParams.length) {
11778
- var matchedLocations = locations.data.filter(function (location) {
11779
- return locationIdParams.includes(location.id.toString());
11780
- });
11781
- setSelectedLocations(matchedLocations);
11782
- }
11783
- }, []);
11784
- useEffect(function () {
11785
- if (typeof window === 'undefined')
11786
- return;
11787
- 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; });
11788
- var findMatchingPath = function () {
11789
- var e_1, _a;
11790
- var paths = [Pages.EVENTS, Pages.ROOMS, Pages.SALES];
11791
- try {
11792
- for (var paths_1 = __values(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {
11793
- var path = paths_1_1.value;
11794
- if (window.location.pathname.includes(path)) {
11795
- return path;
11796
- }
11797
- }
11798
- }
11799
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
11800
- finally {
11801
- try {
11802
- if (paths_1_1 && !paths_1_1.done && (_a = paths_1.return)) _a.call(paths_1);
11803
- }
11804
- finally { if (e_1) throw e_1.error; }
11805
- }
11806
- return defaultTab ? defaultTab.path : Pages.EVENTS;
11807
- };
11808
- var currentPath = findMatchingPath();
11809
- setSelectedPath(currentPath);
11810
- }, []);
11811
- var updateGuestsCount = function (id, newCount) {
11812
- setAgeCategoryCounts(function (prevCounts) {
11813
- var _a;
11814
- return (__assign$2(__assign$2({}, prevCounts), (_a = {}, _a[id] = newCount, _a)));
11815
- });
11816
- };
11817
- var handleSelectedFilter = function (id) {
11818
- setSelectedFilter(id);
11819
- };
11820
- var handleSubmit = function () {
11821
- var e_2, _a;
11822
- var newParams = {
11823
- startDate: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from)
11824
- ? format(calendarRange.from, 'yyyy-MM-dd')
11825
- : '',
11826
- endDate: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) ? format(calendarRange.to, 'yyyy-MM-dd') : '',
11827
- //categories: categories.toString(),
11828
- ageCategoryCounts: handleAgeCategoryRules({
11829
- ageCategoryCounts: ageCategoryCounts,
11830
- ageCategories: ageCategories,
11831
- }),
11832
- selectedLocations: selectedLocations
11833
- .map(function (location) { return location.id.toString(); })
11834
- .join(','),
11835
- };
11836
- var querySearchParams = new URLSearchParams();
11837
- try {
11838
- for (var _b = __values(Object.entries(newParams)), _c = _b.next(); !_c.done; _c = _b.next()) {
11839
- var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
11840
- if (value) {
11841
- if (key === 'selectedLocations' && !!selectedLocations.length) {
11842
- // Append all selected locationIds
11843
- selectedLocations.forEach(function (location) {
11844
- querySearchParams.append('locationId', location.id.toString());
11845
- });
11846
- }
11847
- else {
11848
- querySearchParams.append(key, value.toString());
11849
- }
11850
- }
11851
- }
11852
- }
11853
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
11854
- finally {
11855
- try {
11856
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
11857
- }
11858
- finally { if (e_2) throw e_2.error; }
11859
- }
11860
- handleSelectedFilter(false);
11861
- if (onSubmit && window.location.href.includes(selectedPath)) {
11862
- onSubmit(newParams);
11863
- }
11864
- else {
11865
- var params = new URLSearchParams(querySearchParams !== null && querySearchParams !== void 0 ? querySearchParams : undefined);
11866
- var paramString = params.toString();
11867
- var path = "".concat(redirectUrl).concat(selectedPath);
11868
- setInnerLoading(true);
11869
- window.location.href = paramString ? "".concat(path, "?").concat(paramString) : path;
11932
+ return [];
11870
11933
  }
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
+ ];
11871
11941
  };
11872
- var handleResetFilters = function () {
11873
- setAgeCategoryCounts({});
11874
- setCalendarRange(undefined);
11875
- };
11876
- return {
11877
- selectedFilter: selectedFilter,
11878
- ageCategoryCounts: ageCategoryCounts,
11879
- categories: categories,
11880
- calendarRange: calendarRange,
11881
- selectedPath: selectedPath,
11882
- innerLoading: innerLoading,
11883
- selectedLocations: selectedLocations,
11884
- setSelectedLocations: setSelectedLocations,
11885
- setCalendarRange: setCalendarRange,
11886
- setSelectedFilter: setSelectedFilter,
11887
- setAgeCategoryCounts: setAgeCategoryCounts,
11888
- setCategories: setCategories,
11889
- handleSelectedFilter: handleSelectedFilter,
11890
- handleSubmit: handleSubmit,
11891
- updateGuestsCount: updateGuestsCount,
11892
- handleResetFilters: handleResetFilters,
11893
- setSelectedPath: setSelectedPath,
11894
- };
11895
- };
11896
- ////////////
11897
- var handleAgeCategoryRules = function (_a) {
11898
- var ageCategoryCounts = _a.ageCategoryCounts, ageCategories = _a.ageCategories;
11899
- if (ageCategories === null || ageCategories === void 0 ? void 0 : ageCategories.length) {
11900
- ageCategories === null || ageCategories === void 0 ? void 0 : ageCategories.map(function (a) {
11901
- if (a.minVal) {
11902
- // Age categories rules
11903
- var ageCategory = ageCategoryCounts["guests-".concat(a.id)];
11904
- if (!ageCategory) {
11905
- ageCategoryCounts["guests-".concat(a.id)] = a.minVal;
11906
- }
11907
- }
11908
- });
11909
- }
11910
- return Object.entries(ageCategoryCounts).length
11911
- ? JSON.stringify(ageCategoryCounts)
11912
- : '';
11913
- };
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
+ });
11914
12000
 
11915
- var useScrollInToView = function (_a) {
11916
- var selectedFilter = _a.selectedFilter;
11917
- var _b = __read(useState(true), 2), isMobile = _b[0], setIsMobile = _b[1];
11918
- var targetFilterBarRef = useRef(null);
11919
- useEffect(function () {
11920
- if (typeof window !== 'undefined' && window.innerWidth > 960) {
11921
- setIsMobile(false);
11922
- return;
11923
- }
11924
- if (targetFilterBarRef.current && selectedFilter) {
11925
- window.scrollTo({
11926
- behavior: 'smooth',
11927
- top: targetFilterBarRef.current.getBoundingClientRect().top -
11928
- document.body.getBoundingClientRect().top -
11929
- 30,
11930
- });
11931
- }
11932
- }, [selectedFilter]);
11933
- return { isMobile: isMobile, targetFilterBarRef: targetFilterBarRef };
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)));
11934
12009
  };
11935
12010
 
11936
- 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";
11937
12012
  styleInject(css_248z$b);
11938
12013
 
11939
- var SelectButton = forwardRef(function (_a, ref) {
11940
- var active = _a.active, label = _a.label, onClick = _a.onClick, description = _a.description, disabled = _a.disabled, ariaExpanded = _a.ariaExpanded, ariaControls = _a.ariaControls;
11941
- return (React__default.createElement("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 },
11942
- React__default.createElement("span", { className: "select-button-wrapper" },
11943
- React__default.createElement("div", null,
11944
- React__default.createElement("p", { className: "select-button-label" }, label),
11945
- React__default.createElement("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 }))));
11946
12020
  });
11947
- SelectButton.displayName = 'SelectButton';
12021
+ Dates.displayName = 'Dates';
11948
12022
 
11949
- 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";
11950
12024
  styleInject(css_248z$a);
11951
12025
 
11952
- var TabButton = function (_a) {
11953
- var onClick = _a.onClick, label = _a.label, active = _a.active, mode = _a.mode;
11954
- return (React__default.createElement("button", { className: "will-filter-bar-tab-button ".concat(mode || 'light', " ").concat(active && 'active', " "), onClick: onClick }, label));
11955
- };
11956
-
11957
- 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";
11958
- styleInject(css_248z$9);
11959
-
11960
12026
  var GuestCount = function (_a) {
11961
12027
  var label = _a.label, sortOrder = _a.sortOrder, id = _a.id, updateGuestsCount = _a.updateGuestsCount, count = _a.count, minVal = _a.minVal;
11962
12028
  useEffect(function () {
@@ -11988,65 +12054,21 @@ var GuestCount = function (_a) {
11988
12054
  React__default.createElement("path", { d: "M10 4V16M4 10H16", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }))))));
11989
12055
  };
11990
12056
 
11991
- 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";
11992
- styleInject(css_248z$8);
11993
-
11994
- var FilterSectionHeader = function (_a) {
11995
- var title = _a.title, action = _a.action;
11996
- return (React__default.createElement("div", { className: "will-filter-section-header" },
11997
- React__default.createElement("h3", { className: "will-filter-section-title" }, title),
11998
- action && React__default.createElement("div", { className: "will-filter-section-action" }, action)));
11999
- };
12000
-
12001
- 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";
12002
- styleInject(css_248z$7);
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);
12003
12059
 
12004
12060
  var Guests = forwardRef(function (_a, ref) {
12005
12061
  var ageCategories = _a.ageCategories, updateGuestsCount = _a.updateGuestsCount, ageCategoryCounts = _a.ageCategoryCounts, autoFocus = _a.autoFocus, onClose = _a.onClose;
12006
12062
  var t = useTranslation('filterBar').t;
12007
12063
  var containerRef = useAutoFocus(autoFocus);
12008
- return (React__default.createElement("div", { className: "will-filter-bar-guests", ref: ref },
12009
- React__default.createElement(FilterSectionHeader, { title: t('guests.title'), action: onClose && React__default.createElement(CloseButton, { handleClose: onClose }) }),
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 }) }),
12010
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 })); }))));
12011
12067
  });
12012
12068
  Guests.displayName = 'Guests';
12013
12069
 
12014
- 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}";
12015
- styleInject(css_248z$6);
12016
-
12017
- var Divider = function () {
12018
- return React__default.createElement("div", { className: "will-filter-bar-divider" });
12019
- };
12020
-
12021
- 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";
12022
- styleInject(css_248z$5);
12023
-
12024
- var Categories = function (_a) {
12025
- _a.categories; var setCategories = _a.setCategories;
12026
- var t = useTranslation('filterBar').t;
12027
- var categoriesPlaceholder = [
12028
- 'Weekend',
12029
- 'Week',
12030
- 'Summer camp',
12031
- 'Winter camp',
12032
- ];
12033
- var _b = __read(useState(''), 2), selectedCategory = _b[0], setSelectedCategory = _b[1];
12034
- var handleCategoryChange = function (selectedCategory) {
12035
- setSelectedCategory(selectedCategory);
12036
- setCategories(selectedCategory);
12037
- };
12038
- return (React__default.createElement("div", { className: "will-filter-bar-categories" },
12039
- React__default.createElement("h3", { className: "will-categories-filter-title" }, t('categories.label')),
12040
- React__default.createElement("div", { className: "will-categories-filter-inner" }, categoriesPlaceholder.map(function (itm, idx) { return (React__default.createElement("div", { key: idx },
12041
- React__default.createElement("input", { type: "radio", value: itm, checked: selectedCategory === itm, onChange: function () { return handleCategoryChange(itm); } }),
12042
- React__default.createElement("span", null, itm))); }))));
12043
- };
12044
-
12045
- 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";
12046
- styleInject(css_248z$4);
12047
-
12048
- 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";
12049
- 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);
12050
12072
 
12051
12073
  var ImageCard = forwardRef(function (_a, ref) {
12052
12074
  var title = _a.title, description = _a.description, imageUrl = _a.imageUrl, isSelected = _a.isSelected, onClick = _a.onClick;
@@ -12064,6 +12086,9 @@ var ImageCard = forwardRef(function (_a, ref) {
12064
12086
  });
12065
12087
  ImageCard.displayName = 'ImageCard';
12066
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
+
12067
12092
  var Locations = forwardRef(function (_a, ref) {
12068
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;
12069
12094
  var t = useTranslation('filterBar').t;
@@ -12092,8 +12117,8 @@ var Locations = forwardRef(function (_a, ref) {
12092
12117
  onClose === null || onClose === void 0 ? void 0 : onClose();
12093
12118
  }
12094
12119
  };
12095
- return (React__default.createElement("div", { className: "will-filter-bar-locations", ref: ref },
12096
- React__default.createElement(FilterSectionHeader, { title: t('locations.title'), action: onClose && React__default.createElement(CloseButton, { handleClose: onClose }) }),
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 }) }),
12097
12122
  React__default.createElement("div", { className: "will-locations-filter-container" }, !!((locations === null || locations === void 0 ? void 0 : locations.length) && language) &&
12098
12123
  locations.map(function (location, index) {
12099
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); } }));
@@ -12101,63 +12126,75 @@ var Locations = forwardRef(function (_a, ref) {
12101
12126
  });
12102
12127
  Locations.displayName = 'Locations';
12103
12128
 
12104
- 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";
12105
- 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);
12106
12131
 
12107
- var css_248z$1 = ".will-dates-filter-container {\n padding: 0 16px;\n}\n";
12108
- 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';
12109
12153
 
12110
- var Dates = forwardRef(function (_a, ref) {
12111
- 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;
12112
- return (React__default.createElement("div", { className: "will-filter-bar-dates", ref: ref },
12113
- React__default.createElement(FilterSectionHeader, { title: '', action: onClose && React__default.createElement(CloseButton, { handleClose: onClose }) }),
12114
- React__default.createElement("div", { className: "will-dates-filter-container" },
12115
- React__default.createElement(Calendar, { autoFocus: autoFocus, calendarRange: calendarRange, setCalendarRange: setCalendarRange, disableCalendarDates: disableCalendarDates, selectedPath: selectedPath, language: language, ref: filtersRef }))));
12116
- });
12117
- 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);
12118
12156
 
12119
- function FilterBar(_a) {
12120
- var _b;
12121
- 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;
12122
- var themePalette = useTheme({ palette: palette });
12123
- // Translations
12124
- useUpdateTranslations({ language: language });
12125
- var t = useTranslation('filterBar').t;
12126
- // Refs for SelectButtons
12127
- var locationsButtonRef = useRef(null);
12128
- var datesButtonRef = useRef(null);
12129
- var guestsButtonRef = useRef(null);
12130
- var previouslyFocusedButtonRef = useRef(null);
12131
- var headerRef = useRef(null);
12132
- // Dropdown positioning
12133
- var _f = __read(useState({}), 2), dropdownStyle = _f[0], setDropdownStyle = _f[1];
12134
- // Filters
12135
- var _g = useFilterBar({
12136
- redirectUrl: redirectUrl,
12137
- ageCategories: ageCategories,
12138
- onSubmit: onSubmit,
12139
- tabs: tabs,
12140
- locations: locations,
12141
- }), 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;
12142
- // Scroll in to view
12143
- 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;
12144
12159
  // Handle close filter section
12145
12160
  var filtersRef = useCloseFilterSection({ handleSelectedFilter: handleSelectedFilter }).filtersRef;
12146
- // Enhanced handleSelectedFilter with positioning
12147
- var handleSelectedFilterWithPosition = function (filter) {
12148
- if (filter) {
12149
- var position = calculateDropdownPosition({
12150
- filterSection: filter,
12151
- headerRef: headerRef,
12152
- locationsButtonRef: locationsButtonRef,
12153
- datesButtonRef: datesButtonRef,
12154
- guestsButtonRef: guestsButtonRef,
12155
- isMobile: isMobile,
12156
- });
12157
- 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;
12158
12180
  }
12159
- handleSelectedFilter(filter);
12160
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;
12161
12198
  // Store previously focused button and restore focus when closing
12162
12199
  useEffect(function () {
12163
12200
  if (!selectedFilter && previouslyFocusedButtonRef.current) {
@@ -12165,8 +12202,6 @@ function FilterBar(_a) {
12165
12202
  previouslyFocusedButtonRef.current = null;
12166
12203
  }
12167
12204
  }, [selectedFilter]);
12168
- // Display component after fully loaded
12169
- useAwaitRender();
12170
12205
  // Parsed data for filter section description
12171
12206
  var parsedDates = parseDates({ calendarRange: calendarRange });
12172
12207
  var parsedGuests = parseGuests({
@@ -12181,66 +12216,68 @@ function FilterBar(_a) {
12181
12216
  locationsPlaceholder: t('locations.placeholder'),
12182
12217
  locationsSelectedLabel: t('locations.selected'),
12183
12218
  });
12184
- return (React__default.createElement("div", { className: "will-root ".concat(fullWidth ? 'is-full-width' : ''), style: themePalette },
12185
- tabs && tabs.length > 1 && (React__default.createElement("div", { className: "will-filter-bar-tabs", ref: targetFilterBarRef }, tabs
12186
- .sort(function (a, b) { return a.order - b.order; })
12187
- .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 () {
12188
- setSelectedPath(tab.path);
12189
- handleResetFilters();
12190
- handleSelectedFilter(false);
12191
- }, active: selectedPath === tab.path, mode: mode })); }))),
12192
- React__default.createElement("div", { className: "will-filter-bar-header ".concat(mode || 'light'), ref: function (el) {
12193
- headerRef.current = el;
12194
- if ((tabs === null || tabs === void 0 ? void 0 : tabs.length) === 1 && targetFilterBarRef) {
12195
- targetFilterBarRef.current = el;
12196
- }
12197
- } },
12198
- !!((_b = locations === null || locations === void 0 ? void 0 : locations.data) === null || _b === void 0 ? void 0 : _b.length) && (React__default.createElement(React__default.Fragment, null,
12199
- React__default.createElement(SelectButton, { ref: locationsButtonRef, label: t('locations.label'), description: parsedLocations, onClick: function () {
12200
- previouslyFocusedButtonRef.current = locationsButtonRef.current;
12201
- handleSelectedFilterWithPosition(FilterSections.LOCATIONS);
12202
- }, active: !!selectedLocations.length, disabled: locations === null || locations === void 0 ? void 0 : locations.disabled, ariaExpanded: selectedFilter === FilterSections.LOCATIONS, ariaControls: "will-locations-filter" }),
12203
- React__default.createElement(Divider, null))),
12204
- React__default.createElement(SelectButton, { ref: datesButtonRef, label: t('calendar.label'), description: parsedDates
12205
- ? parsedDates
12206
- : selectedPath === Pages.ROOMS
12207
- ? t('calendar.roomsLabelPlaceholder')
12208
- : t('calendar.eventsLabelPlaceholder'), onClick: function () {
12209
- previouslyFocusedButtonRef.current = datesButtonRef.current;
12210
- handleSelectedFilterWithPosition(FilterSections.CALENDAR);
12211
- }, active: !!parsedDates, ariaExpanded: selectedFilter === FilterSections.CALENDAR, ariaControls: "will-calendar-filter" }),
12212
- selectedPath !== Pages.EVENTS && (React__default.createElement(React__default.Fragment, null,
12213
- React__default.createElement(Divider, null),
12214
- React__default.createElement(SelectButton, { ref: guestsButtonRef, label: t('guests.label'), description: parsedGuests.content, onClick: function () {
12215
- previouslyFocusedButtonRef.current = guestsButtonRef.current;
12216
- handleSelectedFilterWithPosition(FilterSections.GUESTS);
12217
- }, active: !!parsedGuests.data.total, ariaExpanded: selectedFilter === FilterSections.GUESTS, ariaControls: "will-guests-filter" }))),
12218
- React__default.createElement(SubmitButton, { onClick: handleSubmit, startIcon: React__default.createElement(FaSearch, null), label: t('common:search'), isLoading: innerLoading || outerLoading })),
12219
- selectedFilter && (React__default.createElement("div", { className: "will-filter-bar-container ".concat(mode || 'light'), style: __assign$2(__assign$2({}, ((!tabs || tabs.length < 2) && !isMobile ? { top: 66 } : {})), dropdownStyle) },
12220
- selectedFilter === FilterSections.CALENDAR && (React__default.createElement("div", { id: "will-dates-filter" },
12221
- React__default.createElement(Dates, { autoFocus: true, ref: filtersRef, onClose: function () { return handleSelectedFilter(false); }, calendarRange: calendarRange, setCalendarRange: setCalendarRange, disableCalendarDates: disableCalendarDates, selectedPath: selectedPath, language: language, filtersRef: filtersRef }))),
12222
- selectedFilter === FilterSections.GUESTS && (React__default.createElement("div", { id: "will-guests-filter" },
12223
- React__default.createElement(Guests, { updateGuestsCount: updateGuestsCount, ageCategories: ageCategories, ageCategoryCounts: ageCategoryCounts, ref: filtersRef, autoFocus: true, onClose: function () { return handleSelectedFilter(false); } }))),
12224
- selectedFilter === FilterSections.CATEGORIES && (React__default.createElement("div", { id: "will-categories-filter" },
12225
- React__default.createElement(Categories, { categories: categories, setCategories: setCategories }))),
12226
- selectedFilter === FilterSections.LOCATIONS && (React__default.createElement("div", { id: "will-locations-filter" },
12227
- 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); } })))))));
12228
- }
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
+ };
12229
12280
  ////////////
12230
- var AGE_CATEGORIES_FALLBACK = [
12231
- {
12232
- id: '1',
12233
- name: 'Adults',
12234
- sortOrder: 1,
12235
- minVal: 0,
12236
- },
12237
- {
12238
- id: '2',
12239
- name: 'Kids',
12240
- sortOrder: 2,
12241
- minVal: 0,
12242
- },
12243
- ];
12244
12281
  var REDIRECT_URL_FALLBACK = 'http://localhost:3000/';
12245
12282
  var LANGUAGE_FALLBACK = 'en';
12246
12283