willba-component-library 0.1.7 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/lib/components/FilterBar/FilterBar.d.ts +5 -4
- package/lib/index.d.ts +7 -1
- package/lib/index.esm.js +198 -157
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +198 -157
- package/lib/index.js.map +1 -1
- package/lib/index.umd.js +198 -157
- package/lib/index.umd.js.map +1 -1
- package/lib/themes/useTheme.d.ts +13 -4
- package/package.json +4 -4
- package/rollup.config.mjs +0 -1
- package/src/components/FilterBar/FilterBar.css +6 -8
- package/src/components/FilterBar/FilterBar.stories.tsx +5 -2
- package/src/components/FilterBar/FilterBar.tsx +31 -16
- package/src/components/FilterBar/components/close-button/CloseButton.css +9 -5
- package/src/components/FilterBar/components/submit-button/SubmitButton.css +1 -1
- package/src/components/FilterBar/hooks/useFilterBar.tsx +1 -1
- package/src/themes/Default.css +1 -10
- package/src/themes/useTheme.tsx +20 -10
package/README.md
CHANGED
|
@@ -37,21 +37,21 @@ or you can add the willba-component-library using scripts:
|
|
|
37
37
|
const filterBarElement = React.createElement
|
|
38
38
|
const filterBarContainer = document.getElementById('will-filter-bar')
|
|
39
39
|
const WillFilterBar = WillbaComponentLibrary.FilterBar
|
|
40
|
+
const root = ReactDOM.createRoot(filterBarContainer)
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
root.render(
|
|
42
43
|
filterBarElement(WillFilterBar, {
|
|
43
|
-
redirectUrl: 'http://localhost:
|
|
44
|
-
})
|
|
45
|
-
filterBarContainer
|
|
44
|
+
redirectUrl: 'http://localhost:4000/',
|
|
45
|
+
})
|
|
46
46
|
)
|
|
47
47
|
</script>
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
## Props of FilterBar
|
|
51
51
|
|
|
52
|
-
| Name | Value | Description
|
|
53
|
-
| ------------- | ------------- |
|
|
54
|
-
| redirectUrl | `"string"` | Define the URL where the component showld redirect on filtering.
|
|
55
|
-
| language | `"fi" , "en"` | Specify the language, available languages Finnish and English.
|
|
56
|
-
| ageCategories | `[{}]` | Specify age categories for guests filter: [{id: string, name: string, minAge: number , maxAge: number , minVal: number}] |
|
|
57
|
-
|
|
|
52
|
+
| Name | Value | Description |
|
|
53
|
+
| ------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
54
|
+
| redirectUrl | `"string"` | Define the URL where the component showld redirect on filtering. |
|
|
55
|
+
| language | `"fi" , "en"` | Specify the language, available languages Finnish and English. |
|
|
56
|
+
| ageCategories | `[{}]` | Specify age categories for guests: filter: [{id: string, name: string, minAge: number , maxAge: number , minVal: number}] |
|
|
57
|
+
| palette | `{}` | Override color: palette: {primary: string, secondary: string}. |
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { Palette } from '../../themes/useTheme';
|
|
3
3
|
import './FilterBar.css';
|
|
4
4
|
import '../../themes/Default.css';
|
|
5
|
-
|
|
5
|
+
import { AgeCategoryType } from './FilterBarTypes';
|
|
6
|
+
export interface FilterBarProps {
|
|
6
7
|
vendor?: string;
|
|
7
8
|
language?: string;
|
|
8
9
|
ageCategories?: AgeCategoryType[];
|
|
9
10
|
redirectUrl: string;
|
|
11
|
+
palette?: Palette;
|
|
10
12
|
}
|
|
11
|
-
export default function FilterBar({
|
|
12
|
-
export {};
|
|
13
|
+
export default function FilterBar({ language, ageCategories, redirectUrl, palette, }: FilterBarProps): React.JSX.Element;
|
package/lib/index.d.ts
CHANGED
|
@@ -27,6 +27,11 @@ interface ButtonProps {
|
|
|
27
27
|
*/
|
|
28
28
|
declare const Button: ({ type, textColor, size, onClick, label, }: ButtonProps) => React.JSX.Element;
|
|
29
29
|
|
|
30
|
+
interface Palette {
|
|
31
|
+
primary: string;
|
|
32
|
+
secondary: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
30
35
|
interface AgeCategoryType {
|
|
31
36
|
id: string;
|
|
32
37
|
name: string;
|
|
@@ -40,7 +45,8 @@ interface FilterBarProps {
|
|
|
40
45
|
language?: string;
|
|
41
46
|
ageCategories?: AgeCategoryType[];
|
|
42
47
|
redirectUrl: string;
|
|
48
|
+
palette?: Palette;
|
|
43
49
|
}
|
|
44
|
-
declare function FilterBar({
|
|
50
|
+
declare function FilterBar({ language, ageCategories, redirectUrl, palette, }: FilterBarProps): React.JSX.Element;
|
|
45
51
|
|
|
46
52
|
export { Button, FilterBar };
|
package/lib/index.esm.js
CHANGED
|
@@ -458,7 +458,7 @@ function FaSearch (props) {
|
|
|
458
458
|
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);
|
|
459
459
|
}
|
|
460
460
|
|
|
461
|
-
var css_248z$8 = ".will-filter-bar-submit-button {\r\n width: auto;\r\n height: auto;\r\n background-color: var(--will-primary);\r\n color: var(--will-white);\r\n padding: 10px 20px;\r\n border-radius: 20px;\r\n cursor: pointer;\r\n border: none;\r\n white-space: nowrap;\r\n text-transform: uppercase;\r\n font-size: 12px;\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n.will-filter-bar-submit-button span {\r\n margin-right: 10px;\r\n display: flex;\r\n}\r\n\r\n@media (max-width: 960px) {\r\n .will-filter-bar-submit-button {\r\n justify-content: center;\r\n margin-bottom:
|
|
461
|
+
var css_248z$8 = ".will-filter-bar-submit-button {\r\n width: auto;\r\n height: auto;\r\n background-color: var(--will-primary);\r\n color: var(--will-white);\r\n padding: 10px 20px;\r\n border-radius: 20px;\r\n cursor: pointer;\r\n border: none;\r\n white-space: nowrap;\r\n text-transform: uppercase;\r\n font-size: 12px;\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n.will-filter-bar-submit-button span {\r\n margin-right: 10px;\r\n display: flex;\r\n}\r\n\r\n@media (max-width: 960px) {\r\n .will-filter-bar-submit-button {\r\n justify-content: center;\r\n margin-bottom: 15px;\r\n }\r\n}\r\n";
|
|
462
462
|
styleInject(css_248z$8);
|
|
463
463
|
|
|
464
464
|
function SubmitButton(_a) {
|
|
@@ -470,104 +470,14 @@ function SubmitButton(_a) {
|
|
|
470
470
|
t('submit.label')));
|
|
471
471
|
}
|
|
472
472
|
|
|
473
|
-
function
|
|
474
|
-
return function () {
|
|
475
|
-
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
476
|
-
// TODO: Remove String()
|
|
477
|
-
var width = options.width ? String(options.width) : args.defaultWidth;
|
|
478
|
-
var format = args.formats[width] || args.formats[args.defaultWidth];
|
|
479
|
-
return format;
|
|
480
|
-
};
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
function buildLocalizeFn(args) {
|
|
484
|
-
return function (dirtyIndex, options) {
|
|
485
|
-
var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';
|
|
486
|
-
var valuesArray;
|
|
487
|
-
if (context === 'formatting' && args.formattingValues) {
|
|
488
|
-
var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;
|
|
489
|
-
var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;
|
|
490
|
-
valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];
|
|
491
|
-
} else {
|
|
492
|
-
var _defaultWidth = args.defaultWidth;
|
|
493
|
-
var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;
|
|
494
|
-
valuesArray = args.values[_width] || args.values[_defaultWidth];
|
|
495
|
-
}
|
|
496
|
-
var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex;
|
|
497
|
-
// @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!
|
|
498
|
-
return valuesArray[index];
|
|
499
|
-
};
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
function buildMatchFn(args) {
|
|
503
|
-
return function (string) {
|
|
504
|
-
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
505
|
-
var width = options.width;
|
|
506
|
-
var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];
|
|
507
|
-
var matchResult = string.match(matchPattern);
|
|
508
|
-
if (!matchResult) {
|
|
509
|
-
return null;
|
|
510
|
-
}
|
|
511
|
-
var matchedString = matchResult[0];
|
|
512
|
-
var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];
|
|
513
|
-
var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {
|
|
514
|
-
return pattern.test(matchedString);
|
|
515
|
-
}) : findKey(parsePatterns, function (pattern) {
|
|
516
|
-
return pattern.test(matchedString);
|
|
517
|
-
});
|
|
518
|
-
var value;
|
|
519
|
-
value = args.valueCallback ? args.valueCallback(key) : key;
|
|
520
|
-
value = options.valueCallback ? options.valueCallback(value) : value;
|
|
521
|
-
var rest = string.slice(matchedString.length);
|
|
522
|
-
return {
|
|
523
|
-
value: value,
|
|
524
|
-
rest: rest
|
|
525
|
-
};
|
|
526
|
-
};
|
|
527
|
-
}
|
|
528
|
-
function findKey(object, predicate) {
|
|
529
|
-
for (var key in object) {
|
|
530
|
-
if (object.hasOwnProperty(key) && predicate(object[key])) {
|
|
531
|
-
return key;
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
return undefined;
|
|
535
|
-
}
|
|
536
|
-
function findIndex(array, predicate) {
|
|
537
|
-
for (var key = 0; key < array.length; key++) {
|
|
538
|
-
if (predicate(array[key])) {
|
|
539
|
-
return key;
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
return undefined;
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
function buildMatchPatternFn(args) {
|
|
546
|
-
return function (string) {
|
|
547
|
-
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
548
|
-
var matchResult = string.match(args.matchPattern);
|
|
549
|
-
if (!matchResult) return null;
|
|
550
|
-
var matchedString = matchResult[0];
|
|
551
|
-
var parseResult = string.match(args.parsePattern);
|
|
552
|
-
if (!parseResult) return null;
|
|
553
|
-
var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];
|
|
554
|
-
value = options.valueCallback ? options.valueCallback(value) : value;
|
|
555
|
-
var rest = string.slice(matchedString.length);
|
|
556
|
-
return {
|
|
557
|
-
value: value,
|
|
558
|
-
rest: rest
|
|
559
|
-
};
|
|
560
|
-
};
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
function _typeof(obj) {
|
|
473
|
+
function _typeof(o) {
|
|
564
474
|
"@babel/helpers - typeof";
|
|
565
475
|
|
|
566
|
-
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (
|
|
567
|
-
return typeof
|
|
568
|
-
} : function (
|
|
569
|
-
return
|
|
570
|
-
}, _typeof(
|
|
476
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
|
|
477
|
+
return typeof o;
|
|
478
|
+
} : function (o) {
|
|
479
|
+
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
|
|
480
|
+
}, _typeof(o);
|
|
571
481
|
}
|
|
572
482
|
|
|
573
483
|
function toInteger(dirtyNumber) {
|
|
@@ -2677,6 +2587,16 @@ var formatDistance = function formatDistance(token, count, options) {
|
|
|
2677
2587
|
};
|
|
2678
2588
|
var formatDistance$1 = formatDistance;
|
|
2679
2589
|
|
|
2590
|
+
function buildFormatLongFn(args) {
|
|
2591
|
+
return function () {
|
|
2592
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
2593
|
+
// TODO: Remove String()
|
|
2594
|
+
var width = options.width ? String(options.width) : args.defaultWidth;
|
|
2595
|
+
var format = args.formats[width] || args.formats[args.defaultWidth];
|
|
2596
|
+
return format;
|
|
2597
|
+
};
|
|
2598
|
+
}
|
|
2599
|
+
|
|
2680
2600
|
var dateFormats = {
|
|
2681
2601
|
full: 'EEEE, MMMM do, y',
|
|
2682
2602
|
long: 'MMMM do, y',
|
|
@@ -2724,6 +2644,25 @@ var formatRelative = function formatRelative(token, _date, _baseDate, _options)
|
|
|
2724
2644
|
};
|
|
2725
2645
|
var formatRelative$1 = formatRelative;
|
|
2726
2646
|
|
|
2647
|
+
function buildLocalizeFn(args) {
|
|
2648
|
+
return function (dirtyIndex, options) {
|
|
2649
|
+
var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';
|
|
2650
|
+
var valuesArray;
|
|
2651
|
+
if (context === 'formatting' && args.formattingValues) {
|
|
2652
|
+
var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;
|
|
2653
|
+
var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;
|
|
2654
|
+
valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];
|
|
2655
|
+
} else {
|
|
2656
|
+
var _defaultWidth = args.defaultWidth;
|
|
2657
|
+
var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;
|
|
2658
|
+
valuesArray = args.values[_width] || args.values[_defaultWidth];
|
|
2659
|
+
}
|
|
2660
|
+
var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex;
|
|
2661
|
+
// @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!
|
|
2662
|
+
return valuesArray[index];
|
|
2663
|
+
};
|
|
2664
|
+
}
|
|
2665
|
+
|
|
2727
2666
|
var eraValues = {
|
|
2728
2667
|
narrow: ['B', 'A'],
|
|
2729
2668
|
abbreviated: ['BC', 'AD'],
|
|
@@ -2867,6 +2806,67 @@ var localize = {
|
|
|
2867
2806
|
};
|
|
2868
2807
|
var localize$1 = localize;
|
|
2869
2808
|
|
|
2809
|
+
function buildMatchFn(args) {
|
|
2810
|
+
return function (string) {
|
|
2811
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
2812
|
+
var width = options.width;
|
|
2813
|
+
var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];
|
|
2814
|
+
var matchResult = string.match(matchPattern);
|
|
2815
|
+
if (!matchResult) {
|
|
2816
|
+
return null;
|
|
2817
|
+
}
|
|
2818
|
+
var matchedString = matchResult[0];
|
|
2819
|
+
var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];
|
|
2820
|
+
var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {
|
|
2821
|
+
return pattern.test(matchedString);
|
|
2822
|
+
}) : findKey(parsePatterns, function (pattern) {
|
|
2823
|
+
return pattern.test(matchedString);
|
|
2824
|
+
});
|
|
2825
|
+
var value;
|
|
2826
|
+
value = args.valueCallback ? args.valueCallback(key) : key;
|
|
2827
|
+
value = options.valueCallback ? options.valueCallback(value) : value;
|
|
2828
|
+
var rest = string.slice(matchedString.length);
|
|
2829
|
+
return {
|
|
2830
|
+
value: value,
|
|
2831
|
+
rest: rest
|
|
2832
|
+
};
|
|
2833
|
+
};
|
|
2834
|
+
}
|
|
2835
|
+
function findKey(object, predicate) {
|
|
2836
|
+
for (var key in object) {
|
|
2837
|
+
if (object.hasOwnProperty(key) && predicate(object[key])) {
|
|
2838
|
+
return key;
|
|
2839
|
+
}
|
|
2840
|
+
}
|
|
2841
|
+
return undefined;
|
|
2842
|
+
}
|
|
2843
|
+
function findIndex(array, predicate) {
|
|
2844
|
+
for (var key = 0; key < array.length; key++) {
|
|
2845
|
+
if (predicate(array[key])) {
|
|
2846
|
+
return key;
|
|
2847
|
+
}
|
|
2848
|
+
}
|
|
2849
|
+
return undefined;
|
|
2850
|
+
}
|
|
2851
|
+
|
|
2852
|
+
function buildMatchPatternFn(args) {
|
|
2853
|
+
return function (string) {
|
|
2854
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
2855
|
+
var matchResult = string.match(args.matchPattern);
|
|
2856
|
+
if (!matchResult) return null;
|
|
2857
|
+
var matchedString = matchResult[0];
|
|
2858
|
+
var parseResult = string.match(args.parsePattern);
|
|
2859
|
+
if (!parseResult) return null;
|
|
2860
|
+
var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];
|
|
2861
|
+
value = options.valueCallback ? options.valueCallback(value) : value;
|
|
2862
|
+
var rest = string.slice(matchedString.length);
|
|
2863
|
+
return {
|
|
2864
|
+
value: value,
|
|
2865
|
+
rest: rest
|
|
2866
|
+
};
|
|
2867
|
+
};
|
|
2868
|
+
}
|
|
2869
|
+
|
|
2870
2870
|
var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i;
|
|
2871
2871
|
var parseOrdinalNumberPattern = /\d+/i;
|
|
2872
2872
|
var matchEraPatterns = {
|
|
@@ -3956,7 +3956,12 @@ function __spreadArray(to, from, pack) {
|
|
|
3956
3956
|
}
|
|
3957
3957
|
}
|
|
3958
3958
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
3959
|
-
}
|
|
3959
|
+
}
|
|
3960
|
+
|
|
3961
|
+
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
3962
|
+
var e = new Error(message);
|
|
3963
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
3964
|
+
};
|
|
3960
3965
|
|
|
3961
3966
|
/** Returns true when the props are of type {@link DayPickerMultipleProps}. */
|
|
3962
3967
|
function isDayPickerMultiple(props) {
|
|
@@ -4503,7 +4508,7 @@ function CaptionDropdowns(props) {
|
|
|
4503
4508
|
var _b = useDayPicker(), classNames = _b.classNames, styles = _b.styles, components = _b.components;
|
|
4504
4509
|
var goToMonth = useNavigation().goToMonth;
|
|
4505
4510
|
var handleMonthChange = function (newMonth) {
|
|
4506
|
-
goToMonth(newMonth);
|
|
4511
|
+
goToMonth(addMonths(newMonth, props.displayIndex ? -props.displayIndex : 0));
|
|
4507
4512
|
};
|
|
4508
4513
|
var CaptionLabelComponent = (_a = components === null || components === void 0 ? void 0 : components.CaptionLabel) !== null && _a !== void 0 ? _a : CaptionLabel;
|
|
4509
4514
|
var captionLabel = (React__default__default.createElement(CaptionLabelComponent, { id: props.id, displayMonth: props.displayMonth }));
|
|
@@ -4611,12 +4616,12 @@ function Caption(props) {
|
|
|
4611
4616
|
}
|
|
4612
4617
|
else if (captionLayout === 'dropdown-buttons') {
|
|
4613
4618
|
caption = (React__default__default.createElement(React__default__default.Fragment, null,
|
|
4614
|
-
React__default__default.createElement(CaptionDropdowns, { displayMonth: props.displayMonth, id: props.id }),
|
|
4615
|
-
React__default__default.createElement(CaptionNavigation, { displayMonth: props.displayMonth, id: props.id })));
|
|
4619
|
+
React__default__default.createElement(CaptionDropdowns, { displayMonth: props.displayMonth, displayIndex: props.displayIndex, id: props.id }),
|
|
4620
|
+
React__default__default.createElement(CaptionNavigation, { displayMonth: props.displayMonth, displayIndex: props.displayIndex, id: props.id })));
|
|
4616
4621
|
}
|
|
4617
4622
|
else {
|
|
4618
4623
|
caption = (React__default__default.createElement(React__default__default.Fragment, null,
|
|
4619
|
-
React__default__default.createElement(CaptionLabelComponent, { id: props.id, displayMonth: props.displayMonth }),
|
|
4624
|
+
React__default__default.createElement(CaptionLabelComponent, { id: props.id, displayMonth: props.displayMonth, displayIndex: props.displayIndex }),
|
|
4620
4625
|
React__default__default.createElement(CaptionNavigation, { displayMonth: props.displayMonth, id: props.id })));
|
|
4621
4626
|
}
|
|
4622
4627
|
return (React__default__default.createElement("div", { className: classNames.caption, style: styles.caption }, caption));
|
|
@@ -4765,31 +4770,34 @@ function useSelectMultiple() {
|
|
|
4765
4770
|
*/
|
|
4766
4771
|
function addToRange(day, range) {
|
|
4767
4772
|
var _a = range || {}, from = _a.from, to = _a.to;
|
|
4768
|
-
if (
|
|
4769
|
-
|
|
4770
|
-
|
|
4771
|
-
|
|
4773
|
+
if (from && to) {
|
|
4774
|
+
if (isSameDay(to, day) && isSameDay(from, day)) {
|
|
4775
|
+
return undefined;
|
|
4776
|
+
}
|
|
4777
|
+
if (isSameDay(to, day)) {
|
|
4778
|
+
return { from: to, to: undefined };
|
|
4779
|
+
}
|
|
4780
|
+
if (isSameDay(from, day)) {
|
|
4781
|
+
return undefined;
|
|
4782
|
+
}
|
|
4783
|
+
if (isAfter(from, day)) {
|
|
4784
|
+
return { from: day, to: to };
|
|
4785
|
+
}
|
|
4772
4786
|
return { from: from, to: day };
|
|
4773
4787
|
}
|
|
4774
|
-
if (
|
|
4775
|
-
|
|
4788
|
+
if (to) {
|
|
4789
|
+
if (isAfter(day, to)) {
|
|
4790
|
+
return { from: to, to: day };
|
|
4791
|
+
}
|
|
4792
|
+
return { from: day, to: to };
|
|
4776
4793
|
}
|
|
4777
|
-
if (
|
|
4794
|
+
if (from) {
|
|
4795
|
+
if (isBefore(day, from)) {
|
|
4796
|
+
return { from: day, to: from };
|
|
4797
|
+
}
|
|
4778
4798
|
return { from: from, to: day };
|
|
4779
4799
|
}
|
|
4780
|
-
|
|
4781
|
-
return undefined;
|
|
4782
|
-
}
|
|
4783
|
-
if (isSameDay(to, day)) {
|
|
4784
|
-
return { from: to, to: undefined };
|
|
4785
|
-
}
|
|
4786
|
-
if (isSameDay(from, day)) {
|
|
4787
|
-
return undefined;
|
|
4788
|
-
}
|
|
4789
|
-
if (isAfter(from, day)) {
|
|
4790
|
-
return { from: day, to: to };
|
|
4791
|
-
}
|
|
4792
|
-
return { from: from, to: day };
|
|
4800
|
+
return { from: day, to: undefined };
|
|
4793
4801
|
}
|
|
4794
4802
|
|
|
4795
4803
|
/**
|
|
@@ -4850,6 +4858,10 @@ function SelectRangeProviderInternal(_a) {
|
|
|
4850
4858
|
}
|
|
4851
4859
|
}
|
|
4852
4860
|
}
|
|
4861
|
+
else if (selectedTo) {
|
|
4862
|
+
modifiers.range_start = [selectedTo];
|
|
4863
|
+
modifiers.range_end = [selectedTo];
|
|
4864
|
+
}
|
|
4853
4865
|
if (min) {
|
|
4854
4866
|
if (selectedFrom && !selectedTo) {
|
|
4855
4867
|
modifiers.disabled.push({
|
|
@@ -4863,6 +4875,12 @@ function SelectRangeProviderInternal(_a) {
|
|
|
4863
4875
|
before: addDays(selectedFrom, min - 1)
|
|
4864
4876
|
});
|
|
4865
4877
|
}
|
|
4878
|
+
if (!selectedFrom && selectedTo) {
|
|
4879
|
+
modifiers.disabled.push({
|
|
4880
|
+
after: subDays(selectedTo, min - 1),
|
|
4881
|
+
before: addDays(selectedTo, min - 1)
|
|
4882
|
+
});
|
|
4883
|
+
}
|
|
4866
4884
|
}
|
|
4867
4885
|
if (max) {
|
|
4868
4886
|
if (selectedFrom && !selectedTo) {
|
|
@@ -4883,6 +4901,14 @@ function SelectRangeProviderInternal(_a) {
|
|
|
4883
4901
|
after: addDays(selectedTo, offset)
|
|
4884
4902
|
});
|
|
4885
4903
|
}
|
|
4904
|
+
if (!selectedFrom && selectedTo) {
|
|
4905
|
+
modifiers.disabled.push({
|
|
4906
|
+
before: addDays(selectedTo, -max + 1)
|
|
4907
|
+
});
|
|
4908
|
+
modifiers.disabled.push({
|
|
4909
|
+
after: addDays(selectedTo, max - 1)
|
|
4910
|
+
});
|
|
4911
|
+
}
|
|
4886
4912
|
}
|
|
4887
4913
|
return (React__default__default.createElement(SelectRangeContext.Provider, { value: { selected: selected, onDayClick: onDayClick, modifiers: modifiers } }, children));
|
|
4888
4914
|
}
|
|
@@ -5029,22 +5055,22 @@ function isDayOfWeekType(value) {
|
|
|
5029
5055
|
function isDateInRange(date, range) {
|
|
5030
5056
|
var _a;
|
|
5031
5057
|
var from = range.from, to = range.to;
|
|
5032
|
-
if (
|
|
5033
|
-
|
|
5034
|
-
|
|
5035
|
-
|
|
5036
|
-
|
|
5058
|
+
if (from && to) {
|
|
5059
|
+
var isRangeInverted = differenceInCalendarDays(to, from) < 0;
|
|
5060
|
+
if (isRangeInverted) {
|
|
5061
|
+
_a = [to, from], from = _a[0], to = _a[1];
|
|
5062
|
+
}
|
|
5063
|
+
var isInRange = differenceInCalendarDays(date, from) >= 0 &&
|
|
5064
|
+
differenceInCalendarDays(to, date) >= 0;
|
|
5065
|
+
return isInRange;
|
|
5037
5066
|
}
|
|
5038
|
-
if (
|
|
5039
|
-
return
|
|
5067
|
+
if (to) {
|
|
5068
|
+
return isSameDay(to, date);
|
|
5040
5069
|
}
|
|
5041
|
-
|
|
5042
|
-
|
|
5043
|
-
_a = [to, from], from = _a[0], to = _a[1];
|
|
5070
|
+
if (from) {
|
|
5071
|
+
return isSameDay(from, date);
|
|
5044
5072
|
}
|
|
5045
|
-
|
|
5046
|
-
differenceInCalendarDays(to, date) >= 0;
|
|
5047
|
-
return isInRange;
|
|
5073
|
+
return false;
|
|
5048
5074
|
}
|
|
5049
5075
|
|
|
5050
5076
|
/** Returns true if `value` is a Date type. */
|
|
@@ -5760,7 +5786,7 @@ function Table(props) {
|
|
|
5760
5786
|
var FooterComponent = (_c = components === null || components === void 0 ? void 0 : components.Footer) !== null && _c !== void 0 ? _c : Footer;
|
|
5761
5787
|
return (React__default__default.createElement("table", { id: props.id, className: classNames.table, style: styles.table, role: "grid", "aria-labelledby": props['aria-labelledby'] },
|
|
5762
5788
|
!hideHead && React__default__default.createElement(HeadComponent, null),
|
|
5763
|
-
React__default__default.createElement("tbody", { className: classNames.tbody, style: styles.tbody
|
|
5789
|
+
React__default__default.createElement("tbody", { className: classNames.tbody, style: styles.tbody }, weeks.map(function (week) { return (React__default__default.createElement(RowComponent, { displayMonth: props.displayMonth, key: week.weekNumber, dates: week.dates, weekNumber: week.weekNumber })); })),
|
|
5764
5790
|
React__default__default.createElement(FooterComponent, { displayMonth: props.displayMonth })));
|
|
5765
5791
|
}
|
|
5766
5792
|
|
|
@@ -5874,7 +5900,7 @@ function Month(props) {
|
|
|
5874
5900
|
}
|
|
5875
5901
|
var CaptionComponent = (_b = components === null || components === void 0 ? void 0 : components.Caption) !== null && _b !== void 0 ? _b : Caption;
|
|
5876
5902
|
return (React__default__default.createElement("div", { key: props.displayIndex, className: className.join(' '), style: style },
|
|
5877
|
-
React__default__default.createElement(CaptionComponent, { id: captionId, displayMonth: props.displayMonth }),
|
|
5903
|
+
React__default__default.createElement(CaptionComponent, { id: captionId, displayMonth: props.displayMonth, displayIndex: props.displayIndex }),
|
|
5878
5904
|
React__default__default.createElement(Table, { id: tableId, "aria-labelledby": captionId, displayMonth: props.displayMonth })));
|
|
5879
5905
|
}
|
|
5880
5906
|
|
|
@@ -7944,13 +7970,12 @@ function Categories(_a) {
|
|
|
7944
7970
|
}
|
|
7945
7971
|
|
|
7946
7972
|
function useTheme(_a) {
|
|
7947
|
-
var
|
|
7948
|
-
var
|
|
7949
|
-
|
|
7950
|
-
:
|
|
7951
|
-
|
|
7952
|
-
|
|
7953
|
-
return themeClass;
|
|
7973
|
+
var palette = _a.palette;
|
|
7974
|
+
var themePalette = {
|
|
7975
|
+
'--will-primary': palette === null || palette === void 0 ? void 0 : palette.primary,
|
|
7976
|
+
'--will-secondary': palette === null || palette === void 0 ? void 0 : palette.secondary,
|
|
7977
|
+
};
|
|
7978
|
+
return themePalette;
|
|
7954
7979
|
}
|
|
7955
7980
|
|
|
7956
7981
|
/******************************************************************************
|
|
@@ -8024,7 +8049,7 @@ function useFilterBar(_a) {
|
|
|
8024
8049
|
: '',
|
|
8025
8050
|
endDate: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) ? format(calendarRange.to, 'yyyy-MM-dd') : '',
|
|
8026
8051
|
categories: categories,
|
|
8027
|
-
ageCategoryCounts: JSON.stringify(ageCategoryCounts),
|
|
8052
|
+
//ageCategoryCounts: JSON.stringify(ageCategoryCounts),
|
|
8028
8053
|
};
|
|
8029
8054
|
for (var _i = 0, _a = Object.entries(params); _i < _a.length; _i++) {
|
|
8030
8055
|
var _b = _a[_i], key = _b[0], value = _b[1];
|
|
@@ -8062,10 +8087,10 @@ function useFilterBar(_a) {
|
|
|
8062
8087
|
};
|
|
8063
8088
|
}
|
|
8064
8089
|
|
|
8065
|
-
var css_248z$2 = ".will-root {\r\n z-index: 99999;\r\n width: 100%;\r\n max-height: 100vh;\r\n position: relative;\r\n \r\n}\r\n\r\n.will-filter-bar {\r\n box-sizing: border-box;\r\n position: relative;\r\n}\r\n\r\n.will-filter-bar-underlay {\r\n background-color: rgba(0,0,0,.8);\r\n position: absolute;\r\n top:0
|
|
8090
|
+
var css_248z$2 = ".will-root {\r\n z-index: 99999;\r\n width: 100%;\r\n max-height: 100vh;\r\n position: relative;\r\n \r\n}\r\n\r\n.will-filter-bar {\r\n box-sizing: border-box;\r\n position: relative;\r\n}\r\n\r\n.will-filter-bar-underlay {\r\n background-color: rgba(0,0,0,.8);\r\n position: absolute;\r\n /* top:0; */\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n cursor: pointer;\r\n min-height: 200vh;\r\n z-index: 88888;\r\n\r\n transform: translateY(-50%);\r\n}\r\n\r\n/* Header */\r\n.will-filter-bar-header {\r\n display: flex;\r\n justify-content: space-between;\r\n padding: 10px 20px;\r\n position: relative;\r\n z-index: 222;\r\n \r\n \r\n border-radius: 40px;\r\n background-color: var(--will-white);\r\n box-shadow: var(--will-box-shadow);\r\n}\r\n\r\n@media (max-width: 960px) {\r\n .will-filter-bar-header {\r\n flex-direction: column;\r\n padding: 20px;\r\n }\r\n}\r\n\r\n/* Container */\r\n\r\n.will-filter-bar-container {\r\n background-color: var(--will-white);\r\n min-height: 100px;\r\n \r\n padding: 90px 40px 30px 40px;\r\n position: absolute;\r\n top: 0;\r\n z-index: 111;\r\n border-radius: 25px;\r\n width: -webkit-fill-available;\r\n box-shadow: var(--will-box-shadow);\r\n}\r\n\r\n@media (max-width: 960px) {\r\n .will-root { \r\n overflow-y: auto;\r\n padding: 40px 10px;\r\n top: 15px;\r\n z-index: 0;\r\n }\r\n\r\n .will-filter-bar-container {\r\n margin-top: 20px;\r\n padding: 30px 40px;\r\n position: relative;\r\n }\r\n\r\n .will-root.isMobileAbsolute {\r\n position: relative;\r\n z-index: 99999;\r\n }\r\n}\r\n\r\n";
|
|
8066
8091
|
styleInject(css_248z$2);
|
|
8067
8092
|
|
|
8068
|
-
var css_248z$1 = "@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap');\r\n\r\n.will-root * {\r\n font-family: 'Montserrat', sans-serif;\r\n}\r\n\r\n.will-root {\r\n \r\n box-sizing: border-box;\r\n font-size: 14px;\r\n \r\n color: #1E1E1E;\r\n\r\n /* Pallete */\r\n --will-primary: #374269;\r\n --will-grey: #ABA7AF;\r\n --will-white: #fff;\r\n --will-onahau: #CDEEFF;\r\n --will-text: #5A5959;\r\n\r\n /* Confines */\r\n --will-box-shadow: 0px 6px 11px 0px #a7a4a480;\r\n\r\n /* Breakpoints */\r\n\r\n --will-lg: 1140px;\r\n --will-md: 960px;\r\n --will-sm: 600px;\r\n --will-xl: 1280px;\r\n --will-xs: 0px;\r\n}\r\n\r\n/* Typography */\r\n\r\n.will-root h1, h2, h3, h4, h5, h6 {\r\n font-weight: 700;\r\n} \r\n\r\n.will-root p, h1, h2, h3, h4, h5, h6, span {\r\n margin: 0;\r\n padding: 0;\r\n}
|
|
8093
|
+
var css_248z$1 = "@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap');\r\n\r\n.will-root * {\r\n font-family: 'Montserrat', sans-serif;\r\n}\r\n\r\n.will-root {\r\n \r\n box-sizing: border-box;\r\n font-size: 14px;\r\n \r\n color: #1E1E1E;\r\n\r\n /* Pallete */\r\n --will-primary: #374269;\r\n --will-secondary: #374269;\r\n --will-grey: #ABA7AF;\r\n --will-white: #fff;\r\n --will-onahau: #CDEEFF;\r\n --will-text: #5A5959;\r\n\r\n /* Confines */\r\n --will-box-shadow: 0px 6px 11px 0px #a7a4a480;\r\n\r\n /* Breakpoints */\r\n\r\n --will-lg: 1140px;\r\n --will-md: 960px;\r\n --will-sm: 600px;\r\n --will-xl: 1280px;\r\n --will-xs: 0px;\r\n}\r\n\r\n/* Typography */\r\n\r\n.will-root h1, h2, h3, h4, h5, h6 {\r\n font-weight: 700;\r\n} \r\n\r\n.will-root p, h1, h2, h3, h4, h5, h6, span {\r\n margin: 0;\r\n padding: 0;\r\n}";
|
|
8069
8094
|
styleInject(css_248z$1);
|
|
8070
8095
|
|
|
8071
8096
|
const consoleLogger = {
|
|
@@ -8701,7 +8726,7 @@ class Translator extends EventEmitter {
|
|
|
8701
8726
|
res = this.i18nFormat.parse(res, {
|
|
8702
8727
|
...this.options.interpolation.defaultVariables,
|
|
8703
8728
|
...options
|
|
8704
|
-
}, resolved.usedLng, resolved.usedNS, resolved.usedKey, {
|
|
8729
|
+
}, options.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {
|
|
8705
8730
|
resolved
|
|
8706
8731
|
});
|
|
8707
8732
|
} else if (!options.skipInterpolation) {
|
|
@@ -10020,12 +10045,14 @@ class I18n extends EventEmitter {
|
|
|
10020
10045
|
const usedLng = typeof language === 'string' ? language : this.language;
|
|
10021
10046
|
if (typeof language === 'function') usedCallback = language;
|
|
10022
10047
|
if (!this.options.resources || this.options.partialBundledLanguages) {
|
|
10023
|
-
if (usedLng && usedLng.toLowerCase() === 'cimode') return usedCallback();
|
|
10048
|
+
if (usedLng && usedLng.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();
|
|
10024
10049
|
const toLoad = [];
|
|
10025
10050
|
const append = lng => {
|
|
10026
10051
|
if (!lng) return;
|
|
10052
|
+
if (lng === 'cimode') return;
|
|
10027
10053
|
const lngs = this.services.languageUtils.toResolveHierarchy(lng);
|
|
10028
10054
|
lngs.forEach(l => {
|
|
10055
|
+
if (l === 'cimode') return;
|
|
10029
10056
|
if (toLoad.indexOf(l) < 0) toLoad.push(l);
|
|
10030
10057
|
});
|
|
10031
10058
|
};
|
|
@@ -10411,7 +10438,7 @@ function IoIosCloseCircleOutline (props) {
|
|
|
10411
10438
|
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);
|
|
10412
10439
|
}
|
|
10413
10440
|
|
|
10414
|
-
var css_248z = ".will-filter-bar-close-button {\r\n width: auto;\r\n height: auto;\r\n background-color: var(--will-grey)
|
|
10441
|
+
var css_248z = ".will-filter-bar-close-button {\r\n width: auto;\r\n height: auto;\r\n /* background-color: var(--will-grey); */\r\n color: var(--will-grey);\r\n padding: 2px 7px;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n border: none;\r\n display: flex;\r\n align-items: center;\r\n font-size: 23px;\r\n display: none;\r\n\r\n position: absolute;\r\n top: 10px;\r\n right: 10px;\r\n\r\n}\r\n\r\n@media (max-width: 960px) {\r\n .will-filter-bar-close-button {\r\n min-height: 35px;\r\n border-radius: 25px;\r\n margin-left:0;\r\n \r\n display: flex;\r\n justify-content: center;\r\n }\r\n}\r\n";
|
|
10415
10442
|
styleInject(css_248z);
|
|
10416
10443
|
|
|
10417
10444
|
function CloseButton(_a) {
|
|
@@ -10421,27 +10448,41 @@ function CloseButton(_a) {
|
|
|
10421
10448
|
}
|
|
10422
10449
|
|
|
10423
10450
|
function FilterBar(_a) {
|
|
10424
|
-
var
|
|
10425
|
-
var
|
|
10451
|
+
var language = _a.language, _b = _a.ageCategories, ageCategories = _b === void 0 ? AGE_CATEGORIES_FALLBACK : _b, _c = _a.redirectUrl, redirectUrl = _c === void 0 ? REDIRECT_URL_FALLBACK : _c, palette = _a.palette;
|
|
10452
|
+
var themePalette = useTheme({ palette: palette });
|
|
10453
|
+
// Translations
|
|
10426
10454
|
var _d = useState(0); _d[0]; var setRerenderKey = _d[1];
|
|
10427
10455
|
useEffect(function () {
|
|
10428
10456
|
instance.changeLanguage(language);
|
|
10429
10457
|
setRerenderKey(function (prevKey) { return prevKey + 1; });
|
|
10430
10458
|
}, [language]);
|
|
10431
10459
|
var t = useTranslation('filterBar').t;
|
|
10432
|
-
|
|
10460
|
+
// Filters
|
|
10461
|
+
var _e = useFilterBar({ redirectUrl: redirectUrl }), selectedFilter = _e.selectedFilter, ageCategoryCounts = _e.ageCategoryCounts, categories = _e.categories, calendarRange = _e.calendarRange, setCalendarRange = _e.setCalendarRange, setCategories = _e.setCategories, handleSelectedFilter = _e.handleSelectedFilter, handleSubmit = _e.handleSubmit, updateGuestsCount = _e.updateGuestsCount;
|
|
10462
|
+
// Scroll in to view
|
|
10463
|
+
var targetFilterBarRef = useRef(null);
|
|
10464
|
+
useEffect(function () {
|
|
10465
|
+
if (targetFilterBarRef.current && selectedFilter) {
|
|
10466
|
+
window.scrollTo({
|
|
10467
|
+
behavior: 'smooth',
|
|
10468
|
+
top: targetFilterBarRef.current.getBoundingClientRect().top -
|
|
10469
|
+
document.body.getBoundingClientRect().top -
|
|
10470
|
+
30,
|
|
10471
|
+
});
|
|
10472
|
+
}
|
|
10473
|
+
}, [selectedFilter]);
|
|
10433
10474
|
return (React__default__default.createElement(React__default__default.Fragment, null,
|
|
10434
10475
|
selectedFilter && (React__default__default.createElement("div", { className: "will-filter-bar will-filter-bar-underlay", onClick: function () {
|
|
10435
10476
|
handleSelectedFilter(false);
|
|
10436
10477
|
} })),
|
|
10437
|
-
React__default__default.createElement("div", { className: "will-root ".concat(
|
|
10438
|
-
React__default__default.createElement("div", { className: "will-filter-bar-header" },
|
|
10478
|
+
React__default__default.createElement("div", { className: "will-root ".concat(selectedFilter ? 'isMobileAbsolute' : ''), style: themePalette },
|
|
10479
|
+
React__default__default.createElement("div", { className: "will-filter-bar-header", ref: targetFilterBarRef },
|
|
10439
10480
|
React__default__default.createElement(SelectButton, { style: fontWigthBold(selectedFilter === 1 || selectedFilter === 2), label: t('calendar.startDate'), onClick: function () { return handleSelectedFilter(1); } }),
|
|
10440
10481
|
React__default__default.createElement(Divider, null),
|
|
10441
10482
|
React__default__default.createElement(SelectButton, { style: fontWigthBold(selectedFilter === 1 || selectedFilter === 2), label: t('calendar.endDate'), onClick: function () { return handleSelectedFilter(2); } }),
|
|
10442
|
-
React__default__default.createElement(SubmitButton, { onClick: handleSubmit }),
|
|
10443
|
-
React__default__default.createElement(CloseButton, { handleClose: handleResetFilters })),
|
|
10483
|
+
React__default__default.createElement(SubmitButton, { onClick: handleSubmit })),
|
|
10444
10484
|
selectedFilter && (React__default__default.createElement("div", { className: "will-filter-bar-container" },
|
|
10485
|
+
React__default__default.createElement(CloseButton, { handleClose: function () { return handleSelectedFilter(false); } }),
|
|
10445
10486
|
(selectedFilter === 1 || selectedFilter === 2) && (React__default__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange })),
|
|
10446
10487
|
selectedFilter === 3 && (React__default__default.createElement(Guests, { updateGuestsCount: updateGuestsCount, ageCategories: ageCategories, ageCategoryCounts: ageCategoryCounts })),
|
|
10447
10488
|
selectedFilter === 4 && (React__default__default.createElement(Categories, { categories: categories, setCategories: setCategories })))))));
|