willba-component-library 0.3.14 → 0.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +1142 -1117
  33. package/lib/index.esm.js.map +1 -1
  34. package/lib/index.js +1141 -1116
  35. package/lib/index.js.map +1 -1
  36. package/lib/index.umd.js +1141 -1116
  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.css +1 -1
  48. package/src/components/FilterBar/components/{dates → FilterPanels/Dates}/Dates.tsx +11 -11
  49. package/src/components/FilterBar/components/FilterPanels/FilterPanels.css +24 -0
  50. package/src/components/FilterBar/components/FilterPanels/FilterPanels.tsx +115 -0
  51. package/src/components/FilterBar/components/{guests → FilterPanels/Guests}/GuestCount/GuestCount.tsx +1 -1
  52. package/src/components/FilterBar/components/{guests → FilterPanels/Guests}/Guests.css +9 -4
  53. package/src/components/FilterBar/components/{guests → FilterPanels/Guests}/Guests.tsx +7 -7
  54. package/src/components/FilterBar/components/{locations → FilterPanels/Locations}/Locations.css +2 -3
  55. package/src/components/FilterBar/components/{locations → FilterPanels/Locations}/Locations.tsx +7 -6
  56. package/src/components/FilterBar/components/{common/FilterSectionHeader.tsx → FilterPanels/SectionHeader/SectionHeader.tsx} +2 -2
  57. package/src/components/FilterBar/components/FilterTabs/FilterTabs.css +10 -0
  58. package/src/components/FilterBar/components/FilterTabs/FilterTabs.tsx +47 -0
  59. package/src/components/FilterBar/components/{buttons/select-button → SelectButton}/SelectButton.css +1 -0
  60. package/src/components/FilterBar/components/{buttons/select-button → SelectButton}/SelectButton.tsx +7 -6
  61. package/src/components/FilterBar/components/index.ts +6 -6
  62. package/src/components/FilterBar/hooks/index.ts +4 -1
  63. package/src/components/FilterBar/hooks/useFilterActions.tsx +126 -0
  64. package/src/components/FilterBar/hooks/useFilterState.tsx +86 -0
  65. package/src/components/FilterBar/hooks/useFilterUi.tsx +19 -0
  66. package/src/components/FilterBar/hooks/usePanelPosition.tsx +53 -0
  67. package/src/components/FilterBar/index.ts +1 -1
  68. package/src/components/FilterBar/providers/FilterBarProvider.tsx +169 -0
  69. package/src/components/FilterBar/providers/index.ts +1 -0
  70. package/src/components/FilterBar/utils/ageCategoriesRules.ts +27 -0
  71. package/src/components/FilterBar/utils/index.tsx +1 -1
  72. package/src/components/FilterBar/utils/parseGuests.tsx +20 -9
  73. package/src/components/FilterBar/utils/{parseLocations.tsx → parseLocations.ts} +3 -4
  74. package/src/components/FilterCalendar/FilterCalendar.tsx +2 -2
  75. package/src/core/components/index.ts +5 -2
  76. package/src/index.ts +1 -1
  77. package/src/themes/useTheme.tsx +1 -1
  78. package/src/components/FilterBar/components/buttons/index.ts +0 -5
  79. package/src/components/FilterBar/components/cards/index.ts +0 -1
  80. package/src/components/FilterBar/components/dates/index.ts +0 -1
  81. package/src/components/FilterBar/hooks/useFilterBar.tsx +0 -208
  82. package/src/components/FilterBar/utils/calculateDropdownPosition.tsx +0 -96
  83. /package/src/components/FilterBar/components/{divider → Divider}/Divider.css +0 -0
  84. /package/src/components/FilterBar/components/{divider → Divider}/Divider.tsx +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, useLayoutEffect, 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
@@ -2701,96 +2361,355 @@ class I18n extends EventEmitter {
2701
2361
  instance.createInstance = I18n.createInstance;
2702
2362
  return instance;
2703
2363
  }
2704
- cloneInstance(options = {}, callback = noop) {
2705
- const forkResourceStore = options.forkResourceStore;
2706
- if (forkResourceStore) delete options.forkResourceStore;
2707
- const mergedOptions = {
2708
- ...this.options,
2709
- ...options,
2710
- ...{
2711
- isClone: true
2364
+ cloneInstance(options = {}, callback = noop) {
2365
+ const forkResourceStore = options.forkResourceStore;
2366
+ if (forkResourceStore) delete options.forkResourceStore;
2367
+ const mergedOptions = {
2368
+ ...this.options,
2369
+ ...options,
2370
+ ...{
2371
+ isClone: true
2372
+ }
2373
+ };
2374
+ const clone = new I18n(mergedOptions);
2375
+ if (options.debug !== undefined || options.prefix !== undefined) {
2376
+ clone.logger = clone.logger.clone(options);
2377
+ }
2378
+ const membersToCopy = ['store', 'services', 'language'];
2379
+ membersToCopy.forEach(m => {
2380
+ clone[m] = this[m];
2381
+ });
2382
+ clone.services = {
2383
+ ...this.services
2384
+ };
2385
+ clone.services.utils = {
2386
+ hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)
2387
+ };
2388
+ if (forkResourceStore) {
2389
+ const clonedData = Object.keys(this.store.data).reduce((prev, l) => {
2390
+ prev[l] = {
2391
+ ...this.store.data[l]
2392
+ };
2393
+ prev[l] = Object.keys(prev[l]).reduce((acc, n) => {
2394
+ acc[n] = {
2395
+ ...prev[l][n]
2396
+ };
2397
+ return acc;
2398
+ }, prev[l]);
2399
+ return prev;
2400
+ }, {});
2401
+ clone.store = new ResourceStore(clonedData, mergedOptions);
2402
+ clone.services.resourceStore = clone.store;
2403
+ }
2404
+ if (options.interpolation) {
2405
+ const defOpts = get();
2406
+ const mergedInterpolation = {
2407
+ ...defOpts.interpolation,
2408
+ ...this.options.interpolation,
2409
+ ...options.interpolation
2410
+ };
2411
+ const mergedForInterpolator = {
2412
+ ...mergedOptions,
2413
+ interpolation: mergedInterpolation
2414
+ };
2415
+ clone.services.interpolator = new Interpolator(mergedForInterpolator);
2416
+ }
2417
+ clone.translator = new Translator(clone.services, mergedOptions);
2418
+ clone.translator.on('*', (event, ...args) => {
2419
+ clone.emit(event, ...args);
2420
+ });
2421
+ clone.init(mergedOptions, callback);
2422
+ clone.translator.options = mergedOptions;
2423
+ clone.translator.backendConnector.services.utils = {
2424
+ hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)
2425
+ };
2426
+ return clone;
2427
+ }
2428
+ toJSON() {
2429
+ return {
2430
+ options: this.options,
2431
+ store: this.store,
2432
+ language: this.language,
2433
+ languages: this.languages,
2434
+ resolvedLanguage: this.resolvedLanguage
2435
+ };
2436
+ }
2437
+ }
2438
+ const instance = I18n.createInstance();
2439
+
2440
+ instance.createInstance;
2441
+ instance.dir;
2442
+ instance.init;
2443
+ instance.loadResources;
2444
+ instance.reloadResources;
2445
+ instance.use;
2446
+ instance.changeLanguage;
2447
+ instance.getFixedT;
2448
+ instance.t;
2449
+ instance.exists;
2450
+ instance.setDefaultNamespace;
2451
+ instance.hasLoadedNamespace;
2452
+ instance.loadNamespaces;
2453
+ instance.loadLanguages;
2454
+
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
+ });
2712
2676
  }
2713
- };
2714
- const clone = new I18n(mergedOptions);
2715
- if (options.debug !== undefined || options.prefix !== undefined) {
2716
- clone.logger = clone.logger.clone(options);
2717
2677
  }
2718
- const membersToCopy = ['store', 'services', 'language'];
2719
- membersToCopy.forEach(m => {
2720
- clone[m] = this[m];
2721
- });
2722
- clone.services = {
2723
- ...this.services
2724
- };
2725
- clone.services.utils = {
2726
- hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)
2727
- };
2728
- if (forkResourceStore) {
2729
- const clonedData = Object.keys(this.store.data).reduce((prev, l) => {
2730
- prev[l] = {
2731
- ...this.store.data[l]
2732
- };
2733
- prev[l] = Object.keys(prev[l]).reduce((acc, n) => {
2734
- acc[n] = {
2735
- ...prev[l][n]
2736
- };
2737
- return acc;
2738
- }, prev[l]);
2739
- return prev;
2740
- }, {});
2741
- clone.store = new ResourceStore(clonedData, mergedOptions);
2742
- clone.services.resourceStore = clone.store;
2678
+ if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) {
2679
+ setT(getT);
2743
2680
  }
2744
- if (options.interpolation) {
2745
- const defOpts = get();
2746
- const mergedInterpolation = {
2747
- ...defOpts.interpolation,
2748
- ...this.options.interpolation,
2749
- ...options.interpolation
2750
- };
2751
- const mergedForInterpolator = {
2752
- ...mergedOptions,
2753
- interpolation: mergedInterpolation
2754
- };
2755
- clone.services.interpolator = new Interpolator(mergedForInterpolator);
2681
+ function boundReset() {
2682
+ if (isMounted.current) setT(getT);
2756
2683
  }
2757
- clone.translator = new Translator(clone.services, mergedOptions);
2758
- clone.translator.on('*', (event, ...args) => {
2759
- clone.emit(event, ...args);
2760
- });
2761
- clone.init(mergedOptions, callback);
2762
- clone.translator.options = mergedOptions;
2763
- clone.translator.backendConnector.services.utils = {
2764
- hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)
2765
- };
2766
- return clone;
2767
- }
2768
- toJSON() {
2769
- return {
2770
- options: this.options,
2771
- store: this.store,
2772
- language: this.language,
2773
- languages: this.languages,
2774
- resolvedLanguage: this.resolvedLanguage
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));
2775
2690
  };
2776
- }
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
+ });
2777
2712
  }
2778
- const instance = I18n.createInstance();
2779
-
2780
- instance.createInstance;
2781
- instance.dir;
2782
- instance.init;
2783
- instance.loadResources;
2784
- instance.reloadResources;
2785
- instance.use;
2786
- instance.changeLanguage;
2787
- instance.getFixedT;
2788
- instance.t;
2789
- instance.exists;
2790
- instance.setDefaultNamespace;
2791
- instance.hasLoadedNamespace;
2792
- instance.loadNamespaces;
2793
- instance.loadLanguages;
2794
2713
 
2795
2714
  var locations$1 = {
2796
2715
  label: "Location",
@@ -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) {
@@ -6603,37 +6628,379 @@ function setMonth(dirtyDate, dirtyMonth) {
6603
6628
  return date;
6604
6629
  }
6605
6630
 
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);
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
6642
+ * @throws {TypeError} 2 arguments required
6643
+ *
6644
+ * @example
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
6648
+ */
6649
+ function setYear(dirtyDate, dirtyYear) {
6650
+ requiredArgs(2, arguments);
6651
+ var date = toDate(dirtyDate);
6652
+ var year = toInteger(dirtyYear);
6653
+
6654
+ // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date
6655
+ if (isNaN(date.getTime())) {
6656
+ return new Date(NaN);
6657
+ }
6658
+ date.setFullYear(year);
6659
+ return date;
6660
+ }
6661
+
6662
+ var parseGuests = function (_a) {
6663
+ var guestLabel = _a.guestLabel, guestsLabel = _a.guestsLabel, guestsPlaceholder = _a.guestsPlaceholder, ageCategoryCounts = _a.ageCategoryCounts, ageCategories = _a.ageCategories;
6664
+ var parsedData = Object.entries(ageCategoryCounts).reduce(function (acc, _a) {
6665
+ var _b = __read(_a, 2), key = _b[0], value = _b[1];
6666
+ var parts = key.split('-');
6667
+ if (parts.length < 2)
6668
+ return acc;
6669
+ var ageCategoryId = parts[1];
6670
+ var ageCategory = ageCategories === null || ageCategories === void 0 ? void 0 : ageCategories.find(function (c) { return c.id === ageCategoryId; });
6671
+ if (ageCategory && value) {
6672
+ return {
6673
+ total: acc.total + value,
6674
+ html: __spreadArray$1(__spreadArray$1([], __read(acc.html), false), ["".concat(value)], false),
6675
+ };
6676
+ }
6677
+ return acc;
6678
+ }, { total: 0, html: [] });
6679
+ if (!parsedData.total) {
6680
+ return {
6681
+ content: guestsPlaceholder,
6682
+ data: parsedData,
6683
+ };
6684
+ }
6685
+ var breakdown = parsedData.html.length > 1 ? parsedData.html.join(' + ') : null;
6686
+ return {
6687
+ content: (React__default.createElement(React__default.Fragment, null,
6688
+ React__default.createElement("span", { className: "will-guest-count" }, parsedData.total),
6689
+ ' ',
6690
+ parsedData.total > 1 ? guestsLabel : guestLabel,
6691
+ breakdown && React__default.createElement(React__default.Fragment, null,
6692
+ " \u00A0 ( ",
6693
+ breakdown,
6694
+ " )"))),
6695
+ data: parsedData,
6696
+ };
6697
+ };
6698
+
6699
+ var parseLocations = function (_a) {
6700
+ var selectedLocations = _a.selectedLocations, locationsPlaceholder = _a.locationsPlaceholder, _b = _a.locationsSelectedLabel, locationsSelectedLabel = _b === void 0 ? 'locations' : _b;
6701
+ if (!selectedLocations.length) {
6702
+ return locationsPlaceholder;
6703
+ }
6704
+ if (selectedLocations.length === 1) {
6705
+ var singleSelection = selectedLocations[0].label;
6706
+ if (!singleSelection) {
6707
+ return locationsPlaceholder;
6708
+ }
6709
+ return singleSelection;
6710
+ }
6711
+ return "".concat(selectedLocations.length, " ").concat(locationsSelectedLabel);
6712
+ };
6713
+
6714
+ var ageCategoryRules = function (_a) {
6715
+ var ageCategoryCounts = _a.ageCategoryCounts, ageCategories = _a.ageCategories;
6716
+ if (ageCategories === null || ageCategories === void 0 ? void 0 : ageCategories.length) {
6717
+ ageCategories === null || ageCategories === void 0 ? void 0 : ageCategories.map(function (a) {
6718
+ if (a.minVal) {
6719
+ var ageCategory = ageCategoryCounts["guests-".concat(a.id)];
6720
+ if (!ageCategory) {
6721
+ ageCategoryCounts["guests-".concat(a.id)] = a.minVal;
6722
+ }
6723
+ }
6724
+ });
6725
+ }
6726
+ return Object.entries(ageCategoryCounts).length
6727
+ ? JSON.stringify(ageCategoryCounts)
6728
+ : '';
6729
+ };
6730
+
6731
+ var useFilterActions = function (_a) {
6732
+ var tabs = _a.tabs, calendarRange = _a.calendarRange, ageCategoryCounts = _a.ageCategoryCounts, ageCategories = _a.ageCategories, selectedLocations = _a.selectedLocations, selectedPath = _a.selectedPath, redirectUrl = _a.redirectUrl, setSelectedPath = _a.setSelectedPath, setAgeCategoryCounts = _a.setAgeCategoryCounts, setSelectedFilter = _a.setSelectedFilter, setCalendarRange = _a.setCalendarRange, onSubmit = _a.onSubmit, setInnerLoading = _a.setInnerLoading;
6733
+ useEffect(function () {
6734
+ if (typeof window === 'undefined')
6735
+ return;
6736
+ var defaultTab = (tabs === null || tabs === void 0 ? void 0 : tabs.length) === 1 ? tabs[0] : tabs === null || tabs === void 0 ? void 0 : tabs.find(function (tab) { return tab.default; });
6737
+ var paths = [Pages.EVENTS, Pages.ROOMS, Pages.SALES];
6738
+ var currentPath = paths.find(function (path) { return window.location.pathname.includes(path); }) ||
6739
+ (defaultTab === null || defaultTab === void 0 ? void 0 : defaultTab.path) ||
6740
+ Pages.EVENTS;
6741
+ setSelectedPath(currentPath);
6742
+ }, [tabs]);
6743
+ var updateGuestsCount = function (id, newCount) {
6744
+ setAgeCategoryCounts(function (prev) {
6745
+ var _a;
6746
+ return (__assign$2(__assign$2({}, prev), (_a = {}, _a[id] = newCount, _a)));
6747
+ });
6748
+ };
6749
+ var handleSelectedFilter = function (id) {
6750
+ setSelectedFilter(id);
6751
+ };
6752
+ var handleSubmit = function () {
6753
+ var e_1, _a;
6754
+ if (typeof window === 'undefined')
6755
+ return;
6756
+ var newParams = {
6757
+ startDate: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from)
6758
+ ? format(calendarRange.from, 'yyyy-MM-dd')
6759
+ : '',
6760
+ endDate: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) ? format(calendarRange.to, 'yyyy-MM-dd') : '',
6761
+ ageCategoryCounts: ageCategoryRules({
6762
+ ageCategoryCounts: ageCategoryCounts,
6763
+ ageCategories: ageCategories,
6764
+ }),
6765
+ selectedLocations: selectedLocations
6766
+ .map(function (l) { return l.id.toString(); })
6767
+ .join(','),
6768
+ };
6769
+ var querySearchParams = new URLSearchParams();
6770
+ try {
6771
+ for (var _b = __values(Object.entries(newParams)), _c = _b.next(); !_c.done; _c = _b.next()) {
6772
+ var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
6773
+ if (!value)
6774
+ continue;
6775
+ if (key === 'selectedLocations' && selectedLocations.length) {
6776
+ selectedLocations.forEach(function (location) {
6777
+ return querySearchParams.append('locationId', location.id.toString());
6778
+ });
6779
+ }
6780
+ else {
6781
+ querySearchParams.append(key, value.toString());
6782
+ }
6783
+ }
6784
+ }
6785
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
6786
+ finally {
6787
+ try {
6788
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
6789
+ }
6790
+ finally { if (e_1) throw e_1.error; }
6791
+ }
6792
+ setSelectedFilter(false);
6793
+ if (onSubmit && window.location.href.includes(selectedPath)) {
6794
+ onSubmit(newParams);
6795
+ return;
6796
+ }
6797
+ var paramString = querySearchParams.toString();
6798
+ var path = "".concat(redirectUrl).concat(selectedPath);
6799
+ setInnerLoading(true);
6800
+ window.location.href = paramString ? "".concat(path, "?").concat(paramString) : path;
6801
+ };
6802
+ var handleResetFilters = function () {
6803
+ setAgeCategoryCounts({});
6804
+ setCalendarRange(undefined);
6805
+ };
6806
+ return {
6807
+ updateGuestsCount: updateGuestsCount,
6808
+ handleSelectedFilter: handleSelectedFilter,
6809
+ handleSubmit: handleSubmit,
6810
+ handleResetFilters: handleResetFilters,
6811
+ };
6812
+ };
6813
+
6814
+ var useFilterUi = function (selectedFilter) {
6815
+ var buttonRefs = useRef({});
6816
+ var panelRef = useRef(null);
6817
+ var previouslyFocusedButtonRef = useRef(null);
6818
+ var _a = useScrollInToView({ selectedFilter: selectedFilter }), isMobile = _a.isMobile, targetFilterBarRef = _a.targetFilterBarRef;
6819
+ return {
6820
+ previouslyFocusedButtonRef: previouslyFocusedButtonRef,
6821
+ isMobile: isMobile,
6822
+ targetFilterBarRef: targetFilterBarRef,
6823
+ panelRef: panelRef,
6824
+ buttonRefs: buttonRefs,
6825
+ };
6826
+ };
6827
+
6828
+ var usePanelPosition = function (_a) {
6829
+ var selectedFilter = _a.selectedFilter, panelRef = _a.panelRef, targetFilterBarRef = _a.targetFilterBarRef, buttonRefs = _a.buttonRefs, isMobile = _a.isMobile;
6830
+ var _b = __read(useState({}), 2), localStyles = _b[0], setLocalStyles = _b[1];
6831
+ useLayoutEffect(function () {
6832
+ if (!selectedFilter || typeof selectedFilter !== 'string' || isMobile) {
6833
+ setLocalStyles({});
6834
+ return;
6835
+ }
6836
+ var panel = panelRef.current;
6837
+ var container = targetFilterBarRef.current;
6838
+ var button = buttonRefs.current[selectedFilter];
6839
+ if (!panel || !container || !button)
6840
+ return;
6841
+ var panelRect = panel.getBoundingClientRect();
6842
+ var containerRect = container.getBoundingClientRect();
6843
+ var buttonRect = button.getBoundingClientRect();
6844
+ var buttonLeft = buttonRect.left - containerRect.left;
6845
+ var left = Math.max(0, Math.min(buttonLeft, containerRect.width - panelRect.width));
6846
+ setLocalStyles({ left: left });
6847
+ }, [selectedFilter, isMobile]);
6848
+ return { localStyles: localStyles };
6849
+ };
6850
+
6851
+ var FilterBarContext = createContext(undefined);
6852
+ var FilterBarProvider = function (_a) {
6853
+ 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;
6854
+ 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;
6855
+ var filterActions = useFilterActions({
6856
+ tabs: tabs,
6857
+ ageCategoryCounts: ageCategoryCounts,
6858
+ ageCategories: ageCategories,
6859
+ selectedLocations: selectedLocations,
6860
+ selectedPath: selectedPath,
6861
+ redirectUrl: redirectUrl,
6862
+ setSelectedPath: setSelectedPath,
6863
+ setAgeCategoryCounts: setAgeCategoryCounts,
6864
+ setSelectedFilter: setSelectedFilter,
6865
+ setCalendarRange: setCalendarRange,
6866
+ onSubmit: onSubmit,
6867
+ setInnerLoading: setInnerLoading,
6868
+ });
6869
+ var filterUi = useFilterUi(selectedFilter);
6870
+ 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)); }, [
6871
+ selectedFilter,
6872
+ ageCategoryCounts,
6873
+ categories,
6874
+ calendarRange,
6875
+ selectedPath,
6876
+ innerLoading,
6877
+ selectedLocations,
6878
+ language,
6879
+ ageCategories,
6880
+ redirectUrl,
6881
+ palette,
6882
+ onSubmit,
6883
+ fullWidth,
6884
+ disableCalendarDates,
6885
+ mode,
6886
+ tabs,
6887
+ outerLoading,
6888
+ locations,
6889
+ filterUi.isMobile,
6890
+ filterUi.targetFilterBarRef,
6891
+ ]);
6892
+ return (React__default.createElement(FilterBarContext.Provider, { value: contextValue }, children));
6893
+ };
6894
+ var useFilterBar = function () {
6895
+ var context = useContext(FilterBarContext);
6896
+ if (!context) {
6897
+ throw new Error('useFilterBar must be used within FilterBarProvider');
6898
+ }
6899
+ return context;
6900
+ };
6901
+
6902
+ var DefaultContext = {
6903
+ color: undefined,
6904
+ size: undefined,
6905
+ className: undefined,
6906
+ style: undefined,
6907
+ attr: undefined
6908
+ };
6909
+ var IconContext = React__default.createContext && React__default.createContext(DefaultContext);
6910
+
6911
+ var __assign$1 = undefined && undefined.__assign || function () {
6912
+ __assign$1 = Object.assign || function (t) {
6913
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
6914
+ s = arguments[i];
6915
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
6916
+ }
6917
+ return t;
6918
+ };
6919
+ return __assign$1.apply(this, arguments);
6920
+ };
6921
+ var __rest$1 = undefined && undefined.__rest || function (s, e) {
6922
+ var t = {};
6923
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
6924
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
6925
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
6926
+ }
6927
+ return t;
6928
+ };
6929
+ function Tree2Element(tree) {
6930
+ return tree && tree.map(function (node, i) {
6931
+ return React__default.createElement(node.tag, __assign$1({
6932
+ key: i
6933
+ }, node.attr), Tree2Element(node.child));
6934
+ });
6935
+ }
6936
+ function GenIcon(data) {
6937
+ // eslint-disable-next-line react/display-name
6938
+ return function (props) {
6939
+ return React__default.createElement(IconBase, __assign$1({
6940
+ attr: __assign$1({}, data.attr)
6941
+ }, props), Tree2Element(data.child));
6942
+ };
6943
+ }
6944
+ function IconBase(props) {
6945
+ var elem = function (conf) {
6946
+ var attr = props.attr,
6947
+ size = props.size,
6948
+ title = props.title,
6949
+ svgProps = __rest$1(props, ["attr", "size", "title"]);
6950
+ var computedSize = size || conf.size || "1em";
6951
+ var className;
6952
+ if (conf.className) className = conf.className;
6953
+ if (props.className) className = (className ? className + " " : "") + props.className;
6954
+ return React__default.createElement("svg", __assign$1({
6955
+ stroke: "currentColor",
6956
+ fill: "currentColor",
6957
+ strokeWidth: "0"
6958
+ }, conf.attr, attr, svgProps, {
6959
+ className: className,
6960
+ style: __assign$1(__assign$1({
6961
+ color: props.color || conf.color
6962
+ }, conf.style), props.style),
6963
+ height: computedSize,
6964
+ width: computedSize,
6965
+ xmlns: "http://www.w3.org/2000/svg"
6966
+ }), title && React__default.createElement("title", null, title), props.children);
6967
+ };
6968
+ return IconContext !== undefined ? React__default.createElement(IconContext.Consumer, null, function (conf) {
6969
+ return elem(conf);
6970
+ }) : elem(DefaultContext);
6971
+ }
6972
+
6973
+ // THIS FILE IS AUTO GENERATED
6974
+ function FaSearch (props) {
6975
+ 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);
6976
+ }function FaSpinner (props) {
6977
+ 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);
6978
+ }
6979
+
6980
+ 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";
6981
+ styleInject(css_248z$g);
6982
+
6983
+ var SubmitButton = function (_a) {
6984
+ var onClick = _a.onClick, startIcon = _a.startIcon, label = _a.label, disabled = _a.disabled, isLoading = _a.isLoading, variant = _a.variant;
6985
+ return (React__default.createElement("button", { className: "will-filter-bar-submit-button ".concat(variant || 'default'), onClick: onClick, disabled: disabled || isLoading },
6986
+ isLoading ? (React__default.createElement("span", null, React__default.createElement(FaSpinner, { style: { animation: 'spin 1s linear infinite' } }))) : (startIcon && React__default.createElement("span", null, startIcon)),
6987
+ label || 'Label'));
6988
+ };
6628
6989
 
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;
6990
+ // THIS FILE IS AUTO GENERATED
6991
+ function IoIosCloseCircleOutline (props) {
6992
+ 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
6993
  }
6636
6994
 
6995
+ 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";
6996
+ styleInject(css_248z$f);
6997
+
6998
+ var CloseButton = function (_a) {
6999
+ var handleClose = _a.handleClose;
7000
+ return (React__default.createElement("button", { className: "will-filter-bar-close-button", onClick: handleClose },
7001
+ React__default.createElement(IoIosCloseCircleOutline, null)));
7002
+ };
7003
+
6637
7004
  function futureSeconds(text) {
6638
7005
  return text.replace(/sekuntia?/, 'sekunnin');
6639
7006
  }
@@ -11476,11 +11843,11 @@ var useUpdateDisabledDates = function (_a) {
11476
11843
  return { newDisableCalendarDates: newDisableCalendarDates, overlappingDate: overlappingDate, lastPossibleCheckout: lastPossibleCheckout };
11477
11844
  };
11478
11845
 
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);
11846
+ 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}";
11847
+ styleInject(css_248z$e);
11481
11848
 
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);
11849
+ 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";
11850
+ styleInject(css_248z$d);
11484
11851
 
11485
11852
  var Calendar = forwardRef(function (_a, ref) {
11486
11853
  var _b;
@@ -11550,413 +11917,100 @@ var Calendar = forwardRef(function (_a, ref) {
11550
11917
  // No gap between check-in and first possible check-out, nothing to disable
11551
11918
  addDays(currentSelectionAvailability.checkIn, 1) >=
11552
11919
  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;
11920
+ return [];
11870
11921
  }
11922
+ // Disable dates between current check-in and first possible check-out
11923
+ return [
11924
+ {
11925
+ from: addDays(currentSelectionAvailability.checkIn, 1),
11926
+ to: addDays(currentSelectionAvailability.firstCheckOut, -1),
11927
+ },
11928
+ ];
11871
11929
  };
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
- };
11930
+ var base = disabledDatesByPage$1.length
11931
+ ? disabledDatesByPage$1
11932
+ : (disabledDates === null || disabledDates === void 0 ? void 0 : disabledDates.length)
11933
+ ? disabledDates
11934
+ : (newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.disabledDates) || [];
11935
+ var disabled = disabledDatesByPage$1.length
11936
+ ? base
11937
+ : __spreadArray$1(__spreadArray$1(__spreadArray$1(__spreadArray$1([
11938
+ lastPossibleCheckout
11939
+ ], __read(base), false), __read(firstPossibleRangeContextCheckIn), false), __read(lastPossibleRangeContextCheckOut), false), __read(disabledInsideSelectableRange()), false);
11940
+ return (React__default.createElement("div", { className: "will-filter-bar-calendar", ref: ref },
11941
+ React__default.createElement("div", { className: "will-calendar-filter-container", ref: calendarContainerRef },
11942
+ 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) ||
11943
+ selectedStartDate ||
11944
+ rangeContextStartDate ||
11945
+ (((_b = newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.length)
11946
+ ? newDisableCalendarDates.disabledDates[0].from
11947
+ : today), disabled: disabled, fromMonth: today, onMonthChange: function (val) {
11948
+ requestDates === null || requestDates === void 0 ? void 0 : requestDates(val);
11949
+ setUpdateCalendarMonthNavigation === null || setUpdateCalendarMonthNavigation === void 0 ? void 0 : setUpdateCalendarMonthNavigation(function (prev) { return !prev; });
11950
+ }, classNames: {
11951
+ day_range_start: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) ? 'rdp-day_range_start' : '',
11952
+ day_range_end: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) ? 'rdp-day_range_end' : '',
11953
+ }, modifiersClassNames: {
11954
+ today: 'my-today',
11955
+ booked: 'booked',
11956
+ disabledAfterCheckIn: 'disabled-after-check-in',
11957
+ overlappingDate: 'overlapping-date',
11958
+ noActiveSelectionStart: 'no-active-selection-start',
11959
+ noActiveSelectionMid: 'no-active-selection-mid',
11960
+ noActiveSelectionEnd: 'no-active-selection-end',
11961
+ checkoutOptionsMid: 'rdp-day_selected rdp-day_range_middle checkout-option',
11962
+ checkInOnly: 'check-in-only',
11963
+ checkOutOnly: 'check-out-only',
11964
+ }, modifiers:
11965
+ // This function handles conditions for applying the modifiersClassNames
11966
+ handleCalendarModifiers({
11967
+ calendarRange: calendarRange,
11968
+ disabledDates: disabled,
11969
+ overlappingDate: overlappingDate,
11970
+ rangeContext: rangeContext,
11971
+ findFirstPossibleRangeContextCheckIn: findFirstPossibleRangeContextCheckIn,
11972
+ findLastPossibleRangeContextCheckOut: findLastPossibleRangeContextCheckOut,
11973
+ currentSelectionLastCheckoutDate: currentSelectionAvailability,
11974
+ }) }),
11975
+ React__default.createElement("div", { className: 'will-calendar-tooltip' },
11976
+ React__default.createElement("div", null, t('noCheckIn'))),
11977
+ React__default.createElement("div", { className: 'will-calendar-tooltip-check-out' },
11978
+ React__default.createElement("div", null, t('noCheckOut'))),
11979
+ React__default.createElement("div", { className: 'will-calendar-tooltip-overlapping-date' },
11980
+ React__default.createElement("div", null, t('checkOutOnly'))),
11981
+ React__default.createElement("div", { className: 'will-calendar-tooltip-check-in-only' },
11982
+ React__default.createElement("div", null, t('checkInOnly'))),
11983
+ React__default.createElement("div", { className: 'will-calendar-tooltip-check-out-only' },
11984
+ React__default.createElement("div", null, t('checkOutOnly'))),
11985
+ React__default.createElement("div", { className: 'will-calendar-spinner' },
11986
+ React__default.createElement(IconsSvg, { fill: (palette === null || palette === void 0 ? void 0 : palette.primary) || 'inherit', size: 50, icon: "spinner" })))));
11987
+ });
11914
11988
 
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 };
11989
+ 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";
11990
+ styleInject(css_248z$c);
11991
+
11992
+ var SectionHeader = function (_a) {
11993
+ var title = _a.title, action = _a.action;
11994
+ return (React__default.createElement("div", { className: "will-filter-section-header" },
11995
+ React__default.createElement("h3", { className: "will-filter-section-title" }, title),
11996
+ action && React__default.createElement("div", { className: "will-filter-section-action" }, action)));
11934
11997
  };
11935
11998
 
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";
11999
+ var css_248z$b = ".will-dates-filter-container {\n padding: 0 16px 16px 16px;\n}\n";
11937
12000
  styleInject(css_248z$b);
11938
12001
 
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 } })))));
12002
+ var Dates = forwardRef(function (_a, ref) {
12003
+ var onClose = _a.onClose, autoFocus = _a.autoFocus, calendarRange = _a.calendarRange, setCalendarRange = _a.setCalendarRange, disableCalendarDates = _a.disableCalendarDates, selectedPath = _a.selectedPath, language = _a.language;
12004
+ return (React__default.createElement("div", { id: "will-filter-bar-dates", ref: ref },
12005
+ React__default.createElement(SectionHeader, { title: '', action: onClose && React__default.createElement(CloseButton, { handleClose: onClose }) }),
12006
+ React__default.createElement("div", { className: "will-dates-filter-container" },
12007
+ React__default.createElement(Calendar, { autoFocus: autoFocus, calendarRange: calendarRange, setCalendarRange: setCalendarRange, disableCalendarDates: disableCalendarDates, selectedPath: selectedPath, language: language }))));
11946
12008
  });
11947
- SelectButton.displayName = 'SelectButton';
12009
+ Dates.displayName = 'Dates';
11948
12010
 
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";
12011
+ 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
12012
  styleInject(css_248z$a);
11951
12013
 
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
12014
  var GuestCount = function (_a) {
11961
12015
  var label = _a.label, sortOrder = _a.sortOrder, id = _a.id, updateGuestsCount = _a.updateGuestsCount, count = _a.count, minVal = _a.minVal;
11962
12016
  useEffect(function () {
@@ -11988,65 +12042,21 @@ var GuestCount = function (_a) {
11988
12042
  React__default.createElement("path", { d: "M10 4V16M4 10H16", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }))))));
11989
12043
  };
11990
12044
 
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);
12045
+ 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: 0 16px 16px 16px;\n}\n\n@media (max-width: 960px) {\n .will-guests-filter-container {\n min-width: auto;\n }\n}\n\n/**/\n.will-guest-count {\n display: inline-block;\n min-width: 10px;\n}\n";
12046
+ styleInject(css_248z$9);
12003
12047
 
12004
12048
  var Guests = forwardRef(function (_a, ref) {
12005
12049
  var ageCategories = _a.ageCategories, updateGuestsCount = _a.updateGuestsCount, ageCategoryCounts = _a.ageCategoryCounts, autoFocus = _a.autoFocus, onClose = _a.onClose;
12006
12050
  var t = useTranslation('filterBar').t;
12007
12051
  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 }) }),
12052
+ return (React__default.createElement("div", { id: "will-filter-bar-guests", ref: ref },
12053
+ React__default.createElement(SectionHeader, { title: t('guests.title'), action: onClose && React__default.createElement(CloseButton, { handleClose: onClose }) }),
12010
12054
  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
12055
  });
12012
12056
  Guests.displayName = 'Guests';
12013
12057
 
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);
12058
+ 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";
12059
+ styleInject(css_248z$8);
12050
12060
 
12051
12061
  var ImageCard = forwardRef(function (_a, ref) {
12052
12062
  var title = _a.title, description = _a.description, imageUrl = _a.imageUrl, isSelected = _a.isSelected, onClick = _a.onClick;
@@ -12064,6 +12074,9 @@ var ImageCard = forwardRef(function (_a, ref) {
12064
12074
  });
12065
12075
  ImageCard.displayName = 'ImageCard';
12066
12076
 
12077
+ var css_248z$7 = "#will-filter-bar-locations {\n text-align: initial;\n}\n\n.will-locations-filter-container {\n display: flex;\n flex-direction: column;\n min-width: 400px;\n padding-bottom: 16px;\n}\n\n@media (max-width: 960px) {\n .will-locations-filter-container {\n margin-top: 15px;\n min-width: 100%;\n }\n}\n";
12078
+ styleInject(css_248z$7);
12079
+
12067
12080
  var Locations = forwardRef(function (_a, ref) {
12068
12081
  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
12082
  var t = useTranslation('filterBar').t;
@@ -12092,8 +12105,8 @@ var Locations = forwardRef(function (_a, ref) {
12092
12105
  onClose === null || onClose === void 0 ? void 0 : onClose();
12093
12106
  }
12094
12107
  };
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 }) }),
12108
+ return (React__default.createElement("div", { id: "will-filter-bar-locations", ref: ref },
12109
+ React__default.createElement(SectionHeader, { title: t('locations.title'), action: onClose && React__default.createElement(CloseButton, { handleClose: onClose }) }),
12097
12110
  React__default.createElement("div", { className: "will-locations-filter-container" }, !!((locations === null || locations === void 0 ? void 0 : locations.length) && language) &&
12098
12111
  locations.map(function (location, index) {
12099
12112
  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 +12114,75 @@ var Locations = forwardRef(function (_a, ref) {
12101
12114
  });
12102
12115
  Locations.displayName = 'Locations';
12103
12116
 
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);
12117
+ 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";
12118
+ styleInject(css_248z$6);
12106
12119
 
12107
- var css_248z$1 = ".will-dates-filter-container {\n padding: 0 16px;\n}\n";
12108
- styleInject(css_248z$1);
12120
+ var Categories = function (_a) {
12121
+ _a.categories; var setCategories = _a.setCategories;
12122
+ var t = useTranslation('filterBar').t;
12123
+ var categoriesPlaceholder = [
12124
+ 'Weekend',
12125
+ 'Week',
12126
+ 'Summer camp',
12127
+ 'Winter camp',
12128
+ ];
12129
+ var _b = __read(useState(''), 2), selectedCategory = _b[0], setSelectedCategory = _b[1];
12130
+ var handleCategoryChange = function (selectedCategory) {
12131
+ setSelectedCategory(selectedCategory);
12132
+ setCategories(selectedCategory);
12133
+ };
12134
+ return (React__default.createElement("div", { id: "will-filter-bar-categories" },
12135
+ React__default.createElement("h3", { className: "will-categories-filter-title" }, t('categories.label')),
12136
+ React__default.createElement("div", { className: "will-categories-filter-inner" }, categoriesPlaceholder.map(function (itm, idx) { return (React__default.createElement("div", { key: idx },
12137
+ React__default.createElement("input", { type: "radio", value: itm, checked: selectedCategory === itm, onChange: function () { return handleCategoryChange(itm); } }),
12138
+ React__default.createElement("span", null, itm))); }))));
12139
+ };
12140
+ Categories.displayName = 'Categories';
12109
12141
 
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';
12142
+ 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";
12143
+ styleInject(css_248z$5);
12118
12144
 
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;
12145
+ var FilterPanels = function () {
12146
+ 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
12147
  // Handle close filter section
12145
12148
  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);
12149
+ var localStyles = usePanelPosition({
12150
+ selectedFilter: selectedFilter,
12151
+ panelRef: panelRef,
12152
+ targetFilterBarRef: targetFilterBarRef,
12153
+ buttonRefs: buttonRefs,
12154
+ isMobile: isMobile,
12155
+ }).localStyles;
12156
+ var renderContent = function () {
12157
+ switch (selectedFilter) {
12158
+ case FilterSections.CALENDAR:
12159
+ return (React__default.createElement(Dates, { autoFocus: true, ref: filtersRef, onClose: function () { return handleSelectedFilter(false); }, calendarRange: calendarRange, setCalendarRange: setCalendarRange, disableCalendarDates: disableCalendarDates, selectedPath: selectedPath, language: language }));
12160
+ case FilterSections.GUESTS:
12161
+ return (React__default.createElement(Guests, { autoFocus: true, ref: filtersRef, ageCategories: ageCategories, ageCategoryCounts: ageCategoryCounts, updateGuestsCount: updateGuestsCount, onClose: function () { return handleSelectedFilter(false); } }));
12162
+ case FilterSections.CATEGORIES:
12163
+ return (React__default.createElement(Categories, { categories: categories, setCategories: setCategories }));
12164
+ case FilterSections.LOCATIONS:
12165
+ 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); } }));
12166
+ default:
12167
+ return null;
12158
12168
  }
12159
- handleSelectedFilter(filter);
12160
12169
  };
12170
+ return (selectedFilter && (React__default.createElement("div", { ref: panelRef, className: "will-filter-bar-panels ".concat(mode || 'light'), style: (!tabs || tabs.length < 2) && !isMobile
12171
+ ? { top: 66 }
12172
+ : __assign$2({}, localStyles) }, renderContent())));
12173
+ };
12174
+
12175
+ 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";
12176
+ styleInject(css_248z$4);
12177
+
12178
+ var FilterControls = function () {
12179
+ var _a;
12180
+ var t = useTranslation('filterBar').t;
12181
+ 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,
12182
+ // Refs
12183
+ previouslyFocusedButtonRef = _b.previouslyFocusedButtonRef, buttonRefs = _b.buttonRefs,
12184
+ //
12185
+ targetFilterBarRef = _b.targetFilterBarRef;
12161
12186
  // Store previously focused button and restore focus when closing
12162
12187
  useEffect(function () {
12163
12188
  if (!selectedFilter && previouslyFocusedButtonRef.current) {
@@ -12165,8 +12190,6 @@ function FilterBar(_a) {
12165
12190
  previouslyFocusedButtonRef.current = null;
12166
12191
  }
12167
12192
  }, [selectedFilter]);
12168
- // Display component after fully loaded
12169
- useAwaitRender();
12170
12193
  // Parsed data for filter section description
12171
12194
  var parsedDates = parseDates({ calendarRange: calendarRange });
12172
12195
  var parsedGuests = parseGuests({
@@ -12181,66 +12204,68 @@ function FilterBar(_a) {
12181
12204
  locationsPlaceholder: t('locations.placeholder'),
12182
12205
  locationsSelectedLabel: t('locations.selected'),
12183
12206
  });
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
- }
12207
+ 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 },
12208
+ !!((_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,
12209
+ React__default.createElement(SelectButton, { ref: function (el) { return (buttonRefs.current[FilterSections.LOCATIONS] = el); }, label: t('locations.label'), description: parsedLocations, onClick: function (e) {
12210
+ previouslyFocusedButtonRef.current = e.currentTarget;
12211
+ handleSelectedFilter(FilterSections.LOCATIONS);
12212
+ }, active: !!selectedLocations.length, disabled: locations === null || locations === void 0 ? void 0 : locations.disabled, ariaExpanded: selectedFilter === FilterSections.LOCATIONS, ariaControls: "will-filter-bar-locations" }),
12213
+ React__default.createElement(Divider, null))),
12214
+ React__default.createElement(SelectButton, { ref: function (el) { return (buttonRefs.current[FilterSections.CALENDAR] = el); }, label: t('calendar.label'), description: parsedDates
12215
+ ? parsedDates
12216
+ : selectedPath === Pages.ROOMS
12217
+ ? t('calendar.roomsLabelPlaceholder')
12218
+ : t('calendar.eventsLabelPlaceholder'), onClick: function (e) {
12219
+ previouslyFocusedButtonRef.current = e.currentTarget;
12220
+ handleSelectedFilter(FilterSections.CALENDAR);
12221
+ }, active: !!parsedDates, ariaExpanded: selectedFilter === FilterSections.CALENDAR, ariaControls: "will-filter-bar-dates" }),
12222
+ selectedPath !== Pages.EVENTS && (React__default.createElement(React__default.Fragment, null,
12223
+ React__default.createElement(Divider, null),
12224
+ React__default.createElement(SelectButton, { ref: function (el) { return (buttonRefs.current[FilterSections.GUESTS] = el); }, label: t('guests.label'), description: parsedGuests.content, onClick: function (e) {
12225
+ previouslyFocusedButtonRef.current = e.currentTarget;
12226
+ handleSelectedFilter(FilterSections.GUESTS);
12227
+ }, active: !!parsedGuests.data.total, ariaExpanded: selectedFilter === FilterSections.GUESTS, ariaControls: "will-guests-filter" }))),
12228
+ React__default.createElement(SubmitButton, { onClick: handleSubmit, startIcon: React__default.createElement(FaSearch, null), label: t('common:search'), isLoading: innerLoading || outerLoading })));
12229
+ };
12230
+
12231
+ 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";
12232
+ styleInject(css_248z$3);
12233
+
12234
+ var FilterTabs = function () {
12235
+ var t = useTranslation('filterBar').t;
12236
+ var _a = useFilterBar(), selectedPath = _a.selectedPath, mode = _a.mode, tabs = _a.tabs, handleSelectedFilter = _a.handleSelectedFilter, setSelectedPath = _a.setSelectedPath, handleResetFilters = _a.handleResetFilters,
12237
+ //
12238
+ targetFilterBarRef = _a.targetFilterBarRef;
12239
+ return (tabs &&
12240
+ tabs.length > 1 && (React__default.createElement("div", { className: "will-filter-bar-tabs", ref: targetFilterBarRef }, tabs
12241
+ .sort(function (a, b) { return a.order - b.order; })
12242
+ .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 () {
12243
+ setSelectedPath(tab.path);
12244
+ handleResetFilters();
12245
+ handleSelectedFilter(false);
12246
+ }, active: selectedPath === tab.path, mode: mode })); }))));
12247
+ };
12248
+
12249
+ 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";
12250
+ styleInject(css_248z$2);
12251
+
12252
+ 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";
12253
+ styleInject(css_248z$1);
12254
+
12255
+ var FilterBar = function (_a) {
12256
+ 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;
12257
+ var themePalette = useTheme({ palette: palette });
12258
+ // Translations
12259
+ useUpdateTranslations({ language: language });
12260
+ // Display component after fully loaded
12261
+ useAwaitRender();
12262
+ 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 },
12263
+ React__default.createElement("div", { className: "will-root ".concat(fullWidth ? 'is-full-width' : ''), style: themePalette },
12264
+ React__default.createElement(FilterTabs, null),
12265
+ React__default.createElement(FilterControls, null),
12266
+ React__default.createElement(FilterPanels, null))));
12267
+ };
12229
12268
  ////////////
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
12269
  var REDIRECT_URL_FALLBACK = 'http://localhost:3000/';
12245
12270
  var LANGUAGE_FALLBACK = 'en';
12246
12271