wickes-css2 2.106.0-develop.1 → 2.106.0-develop.3
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 +1 -1
- package/build/css/category-main.css +1 -1
- package/build/css/homepage-main.css +1 -1
- package/build/css/kitchen-plp-main.css +1 -1
- package/build/css/main.css +1 -1
- package/build/css/my-account-main-v2.css +1 -1
- package/build/css/my-account-main.css +1 -1
- package/build/css/pdp-main-before-combine.css +1 -1
- package/build/css/pdp-main-non-critical.css +1 -1
- package/build/css/pdp-main.css +1 -1
- package/build/css/plp-main.css +1 -1
- package/build/css/store-locator-main.css +1 -1
- package/build/js/emulation.min.js +61 -20
- package/build/js/page/basket-v2.js +5 -5
- package/build/js/page/components/billie-modal.js +20 -20
- package/build/js/page/count-stepper/pdp-count-stepper.js +29 -0
- package/build/js/page/filters/plp-filters.js +2 -2
- package/build/js/page/kitchen/colour-swatches.js +152 -152
- package/build/js/page/quick-filter.js +106 -103
- package/build/js/page/utils/create-count-stepper.js +141 -0
- package/build/js/pdp-count-stepper.min.js +1 -0
- package/build/js/plp-filters.min.js +1 -1
- package/package.json +1 -1
- package/src/components/home-movers/form.hbs +1 -1
- package/src/components/price-block-v2.hbs +1 -1
- package/src/elements/count-button.hbs +10 -0
- package/src/js/components/pdp-billie-modal-scroll-reset.js +46 -42
- package/src/js/emulation/billie-modal.js +6 -6
- package/src/js/emulation/mock.js +88 -21
- package/src/js/emulation/validity-emulation.js +33 -0
- package/src/js/page/basket-v2.js +5 -5
- package/src/js/page/components/billie-modal.js +20 -20
- package/src/js/page/count-stepper/pdp-count-stepper.js +29 -0
- package/src/js/page/filters/plp-filters.js +2 -2
- package/src/js/page/kitchen/colour-swatches.js +152 -152
- package/src/js/page/quick-filter.js +106 -103
- package/src/js/page/utils/create-count-stepper.js +141 -0
- package/src/partials/scripts.hbs +1 -0
- package/src/scss/components/_custom-slider.scss +5 -4
- package/src/scss/components/_input-counter.scss +65 -0
- package/src/scss/components/_quick-filter.scss +32 -10
- package/src/scss/components/kitchen/_price-tooltip.scss +3 -2
- package/src/scss/components/kitchen/_price.scss +2 -2
- package/src/scss/helpers/_variables.scss +1 -1
- package/src/scss/pdp-main.scss +1 -0
|
@@ -1,108 +1,111 @@
|
|
|
1
1
|
$(document).ready(function () {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
const CSS_CLASSES = {
|
|
11
|
-
locked: 'quick-filter--locked',
|
|
12
|
-
colourSwatch: 'quick-filter--colour',
|
|
13
|
-
textOnly: 'quick-filter--text',
|
|
14
|
-
bulletClass: 'swiper-pagination-bullet',
|
|
15
|
-
bulletActiveClass: 'swiper-pagination-bullet-active'
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const CONFIG = {
|
|
19
|
-
speed: 400,
|
|
20
|
-
defaultSpaceBetween: 16,
|
|
21
|
-
textOnlySpaceBetween: 8,
|
|
22
|
-
resizeDebounceTime: 250,
|
|
23
|
-
breakpoints: {
|
|
24
|
-
mobile: 767,
|
|
25
|
-
mobileSpaceBetween: 8,
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
function shouldSkipSlider($slider) {
|
|
30
|
-
return $slider.hasClass(CSS_CLASSES.colourSwatch);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function getSpaceBetween($slider) {
|
|
34
|
-
const isTextOnly = $slider.hasClass(CSS_CLASSES.textOnly);
|
|
35
|
-
return isTextOnly ? CONFIG.textOnlySpaceBetween : CONFIG.defaultSpaceBetween;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function getSwiperConfig($pagination, $nextBtn, $prevBtn, spaceBetween) {
|
|
39
|
-
return {
|
|
40
|
-
speed: CONFIG.speed,
|
|
41
|
-
spaceBetween: spaceBetween,
|
|
42
|
-
slidesPerView: 'auto',
|
|
43
|
-
watchOverflow: true,
|
|
44
|
-
pagination: {
|
|
45
|
-
el: $pagination[0],
|
|
46
|
-
type: 'bullets',
|
|
47
|
-
clickable: true,
|
|
48
|
-
bulletClass: CSS_CLASSES.bulletClass,
|
|
49
|
-
bulletActiveClass: CSS_CLASSES.bulletActiveClass,
|
|
50
|
-
},
|
|
51
|
-
navigation: {
|
|
52
|
-
nextEl: $nextBtn[0],
|
|
53
|
-
prevEl: $prevBtn[0],
|
|
54
|
-
},
|
|
55
|
-
breakpoints: {
|
|
56
|
-
[CONFIG.breakpoints.mobile]: {
|
|
57
|
-
spaceBetween: CONFIG.breakpoints.mobileSpaceBetween,
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
on: {
|
|
61
|
-
lock: handleLock,
|
|
62
|
-
unlock: handleUnlock,
|
|
63
|
-
},
|
|
2
|
+
const SELECTORS = {
|
|
3
|
+
quickFilter: '.quick-filter',
|
|
4
|
+
swiperContainer: '.swiper-container',
|
|
5
|
+
pagination: '.swiper-pagination',
|
|
6
|
+
nextButton: '.quick-filter__next-btn',
|
|
7
|
+
prevButton: '.quick-filter__prev-btn',
|
|
64
8
|
};
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function handleLock() {
|
|
68
|
-
this.el.parentElement.classList.add(CSS_CLASSES.locked);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function handleUnlock() {
|
|
72
|
-
this.el.parentElement.classList.remove(CSS_CLASSES.locked);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function initializeSwiper($slider) {
|
|
76
|
-
const $container = $slider.find(SELECTORS.swiperContainer);
|
|
77
|
-
const $pagination = $slider.find(SELECTORS.pagination);
|
|
78
|
-
const $nextBtn = $slider.find(SELECTORS.nextButton);
|
|
79
|
-
const $prevBtn = $slider.find(SELECTORS.prevButton);
|
|
80
|
-
|
|
81
|
-
const spaceBetween = getSpaceBetween($slider);
|
|
82
|
-
const config = getSwiperConfig($pagination, $nextBtn, $prevBtn, spaceBetween);
|
|
83
|
-
|
|
84
|
-
const swiper = new Swiper($container[0], config);
|
|
85
9
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function init() {
|
|
96
|
-
$(SELECTORS.quickFilter).each(function (index, slider) {
|
|
97
|
-
const $slider = $(slider);
|
|
98
|
-
|
|
99
|
-
if (shouldSkipSlider($slider)) {
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
10
|
+
const CSS_CLASSES = {
|
|
11
|
+
locked: 'quick-filter--locked',
|
|
12
|
+
colourSwatch: 'quick-filter--colour',
|
|
13
|
+
textOnly: 'quick-filter--text',
|
|
14
|
+
bulletClass: 'swiper-pagination-bullet',
|
|
15
|
+
bulletActiveClass: 'swiper-pagination-bullet-active',
|
|
16
|
+
};
|
|
102
17
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
18
|
+
const CONFIG = {
|
|
19
|
+
speed: 400,
|
|
20
|
+
defaultSpaceBetween: 16,
|
|
21
|
+
textOnlySpaceBetween: 8,
|
|
22
|
+
resizeDebounceTime: 250,
|
|
23
|
+
breakpoints: {
|
|
24
|
+
mobile: 767,
|
|
25
|
+
mobileSpaceBetween: 8,
|
|
26
|
+
},
|
|
27
|
+
};
|
|
106
28
|
|
|
107
|
-
|
|
108
|
-
|
|
29
|
+
function shouldSkipSlider($slider) {
|
|
30
|
+
return $slider.hasClass(CSS_CLASSES.colourSwatch);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function getSpaceBetween($slider) {
|
|
34
|
+
const isTextOnly = $slider.hasClass(CSS_CLASSES.textOnly);
|
|
35
|
+
return isTextOnly ? CONFIG.textOnlySpaceBetween : CONFIG.defaultSpaceBetween;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function getSwiperConfig($pagination, $nextBtn, $prevBtn, spaceBetween) {
|
|
39
|
+
return {
|
|
40
|
+
speed: CONFIG.speed,
|
|
41
|
+
spaceBetween: spaceBetween,
|
|
42
|
+
slidesPerView: 'auto',
|
|
43
|
+
watchOverflow: true,
|
|
44
|
+
pagination: {
|
|
45
|
+
el: $pagination[0],
|
|
46
|
+
type: 'bullets',
|
|
47
|
+
clickable: true,
|
|
48
|
+
bulletClass: CSS_CLASSES.bulletClass,
|
|
49
|
+
bulletActiveClass: CSS_CLASSES.bulletActiveClass,
|
|
50
|
+
},
|
|
51
|
+
navigation: {
|
|
52
|
+
nextEl: $nextBtn[0],
|
|
53
|
+
prevEl: $prevBtn[0],
|
|
54
|
+
},
|
|
55
|
+
breakpoints: {
|
|
56
|
+
[CONFIG.breakpoints.mobile]: {
|
|
57
|
+
spaceBetween: CONFIG.breakpoints.mobileSpaceBetween,
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
on: {
|
|
61
|
+
lock: handleLock,
|
|
62
|
+
unlock: handleUnlock,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function handleLock() {
|
|
68
|
+
this.el.parentElement.classList.add(CSS_CLASSES.locked);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function handleUnlock() {
|
|
72
|
+
this.el.parentElement.classList.remove(CSS_CLASSES.locked);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function initializeSwiper($slider) {
|
|
76
|
+
const $container = $slider.find(SELECTORS.swiperContainer);
|
|
77
|
+
const $pagination = $slider.find(SELECTORS.pagination);
|
|
78
|
+
const $nextBtn = $slider.find(SELECTORS.nextButton);
|
|
79
|
+
const $prevBtn = $slider.find(SELECTORS.prevButton);
|
|
80
|
+
|
|
81
|
+
const spaceBetween = getSpaceBetween($slider);
|
|
82
|
+
const config = getSwiperConfig($pagination, $nextBtn, $prevBtn, spaceBetween);
|
|
83
|
+
|
|
84
|
+
const swiper = new Swiper($container[0], config);
|
|
85
|
+
|
|
86
|
+
bindResizeHandler(swiper);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function bindResizeHandler(swiper) {
|
|
90
|
+
$(window).on(
|
|
91
|
+
'resize',
|
|
92
|
+
_.debounce(function () {
|
|
93
|
+
swiper.update();
|
|
94
|
+
}, CONFIG.resizeDebounceTime)
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function init() {
|
|
99
|
+
$(SELECTORS.quickFilter).each(function (index, slider) {
|
|
100
|
+
const $slider = $(slider);
|
|
101
|
+
|
|
102
|
+
if (shouldSkipSlider($slider)) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
initializeSwiper($slider);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
init();
|
|
111
|
+
});
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import countButton from '../../../elements/count-button.hbs';
|
|
2
|
+
|
|
3
|
+
// ===== HELPERS =====
|
|
4
|
+
|
|
5
|
+
function normalizeOptions(options) {
|
|
6
|
+
return {
|
|
7
|
+
inputSel: '#quantity-field',
|
|
8
|
+
|
|
9
|
+
min: 1,
|
|
10
|
+
|
|
11
|
+
enhancedInputClass: 'count-stepper__input',
|
|
12
|
+
enhancedParentClass: 'count-stepper',
|
|
13
|
+
|
|
14
|
+
onChange: null,
|
|
15
|
+
|
|
16
|
+
...options,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function toInt(value) {
|
|
21
|
+
const n = parseInt(String(value || '').trim(), 10);
|
|
22
|
+
return Number.isFinite(n) ? n : NaN;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function clampMin(n, min) {
|
|
26
|
+
return Math.max(min, n);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function ensureQty(value, fallback) {
|
|
30
|
+
const n = toInt(value);
|
|
31
|
+
return Number.isFinite(n) ? n : fallback;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function buildBtn(type, disabled) {
|
|
35
|
+
return countButton({
|
|
36
|
+
type,
|
|
37
|
+
icon: type === 'plus' ? 'fa-plus' : 'fa-minus',
|
|
38
|
+
ariaLabel: type === 'plus' ? 'Increase quantity' : 'Decrease quantity',
|
|
39
|
+
disabled: !!disabled,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function getButtonsWrap($input) {
|
|
44
|
+
return $input.parent();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function getMinusBtn($wrap) {
|
|
48
|
+
return $wrap.find('[data-count-btn][data-count-type="minus"]').first();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function getPlusBtn($wrap) {
|
|
52
|
+
return $wrap.find('[data-count-btn][data-count-type="plus"]').first();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function updateButtons($input, opt) {
|
|
56
|
+
const $wrap = getButtonsWrap($input);
|
|
57
|
+
const qty = ensureQty($input.val(), opt.min);
|
|
58
|
+
|
|
59
|
+
const $minus = getMinusBtn($wrap);
|
|
60
|
+
|
|
61
|
+
if ($minus.length) $minus.prop('disabled', qty <= opt.min);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function setQty($input, opt, qty) {
|
|
65
|
+
const next = clampMin(qty, opt.min);
|
|
66
|
+
$input.val(String(next));
|
|
67
|
+
updateButtons($input, opt);
|
|
68
|
+
|
|
69
|
+
if (typeof opt.onChange === 'function') {
|
|
70
|
+
opt.onChange(next, $input.get(0));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function ensureButtons($input, opt) {
|
|
75
|
+
const $parent = getButtonsWrap($input);
|
|
76
|
+
|
|
77
|
+
$input.addClass(opt.enhancedInputClass);
|
|
78
|
+
$parent.addClass(opt.enhancedParentClass);
|
|
79
|
+
|
|
80
|
+
const hasMinus = getMinusBtn($parent).length;
|
|
81
|
+
const hasPlus = getPlusBtn($parent).length;
|
|
82
|
+
|
|
83
|
+
if (!hasMinus) {
|
|
84
|
+
$input.before(buildBtn('minus', true));
|
|
85
|
+
}
|
|
86
|
+
if (!hasPlus) {
|
|
87
|
+
$input.after(buildBtn('plus', false));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const initial = ensureQty($input.val(), opt.min);
|
|
91
|
+
setQty($input, opt, initial);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function getInputs($root, inputSel) {
|
|
95
|
+
const $scope = $root && $root.length ? $root : $(document);
|
|
96
|
+
const $self = $scope.is(inputSel) ? $scope : $();
|
|
97
|
+
const $found = $scope.find(inputSel);
|
|
98
|
+
return $self.add($found);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// ===== FACTORY =====
|
|
102
|
+
|
|
103
|
+
export function createCountStepper(options = {}) {
|
|
104
|
+
const OPT = normalizeOptions(options);
|
|
105
|
+
if (!OPT.inputSel) throw new Error('[createCountStepper] Missing inputSel');
|
|
106
|
+
|
|
107
|
+
const NS = `.cnt_${Math.random().toString(16).slice(2)}`;
|
|
108
|
+
|
|
109
|
+
function init($root) {
|
|
110
|
+
getInputs($root, OPT.inputSel).each(function () {
|
|
111
|
+
ensureButtons($(this), OPT);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// +/- click
|
|
116
|
+
$(document)
|
|
117
|
+
.off(`click${NS}`, '[data-count-btn]')
|
|
118
|
+
.on(`click${NS}`, '[data-count-btn]', function (e) {
|
|
119
|
+
const $btn = $(this);
|
|
120
|
+
const $parent = $btn.parent();
|
|
121
|
+
const $input = $parent.find(OPT.inputSel).first();
|
|
122
|
+
|
|
123
|
+
if (!$input.length) return;
|
|
124
|
+
|
|
125
|
+
e.preventDefault();
|
|
126
|
+
|
|
127
|
+
const type = ($btn.attr('data-count-type') || '').toLowerCase();
|
|
128
|
+
const current = ensureQty($input.val(), OPT.min);
|
|
129
|
+
|
|
130
|
+
if (type === 'plus') setQty($input, OPT, current + 1);
|
|
131
|
+
if (type === 'minus') setQty($input, OPT, current - 1);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
$(document)
|
|
135
|
+
.off(`input${NS} change${NS}`, OPT.inputSel)
|
|
136
|
+
.on(`input${NS} change${NS}`, OPT.inputSel, function () {
|
|
137
|
+
updateButtons($(this), OPT);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
return { init };
|
|
141
|
+
}
|
package/src/partials/scripts.hbs
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
{{/ifCond}}
|
|
16
16
|
{{!-- BUNDLES END --}}
|
|
17
17
|
<script src="./js/mini-basket-slider.min.js"></script>
|
|
18
|
+
<script src="./js/pdp-count-stepper.min.js"></script>
|
|
18
19
|
<script src="./js/emulation.min.js"></script>
|
|
19
20
|
<script defer src="https://kit.fontawesome.com/b73abc6840.js" crossorigin="anonymous"></script>
|
|
20
21
|
{{#if pagePdp}}
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
position: fixed;
|
|
8
8
|
background-color: $white;
|
|
9
9
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
|
|
10
|
-
|
|
11
|
-
transition:
|
|
10
|
+
transition-property: transform, opacity;
|
|
11
|
+
transition-duration: 0.4s;
|
|
12
|
+
transition-timing-function: ease;
|
|
12
13
|
opacity: 0;
|
|
13
14
|
display: flex;
|
|
14
15
|
flex-direction: column;
|
|
@@ -291,7 +292,7 @@
|
|
|
291
292
|
}
|
|
292
293
|
|
|
293
294
|
&[disabled] {
|
|
294
|
-
border:
|
|
295
|
+
border: 0;
|
|
295
296
|
opacity: 0.6;
|
|
296
297
|
}
|
|
297
298
|
}
|
|
@@ -496,7 +497,7 @@
|
|
|
496
497
|
|
|
497
498
|
.icon {
|
|
498
499
|
margin-left: 10px;
|
|
499
|
-
color: $
|
|
500
|
+
color: $polished-pine;
|
|
500
501
|
}
|
|
501
502
|
}
|
|
502
503
|
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
.count-stepper {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
gap: 8px;
|
|
5
|
+
margin-top: 6px;
|
|
6
|
+
|
|
7
|
+
.quantity-label {
|
|
8
|
+
padding-right: 9px;
|
|
9
|
+
margin: 0 !important;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
&__input {
|
|
13
|
+
height: 40px;
|
|
14
|
+
width: 46px;
|
|
15
|
+
border: 1px solid $gray;
|
|
16
|
+
border-radius: 3px;
|
|
17
|
+
margin-right: 0 !important;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.count-btn {
|
|
22
|
+
font-size: 1.3rem;
|
|
23
|
+
width: 24px;
|
|
24
|
+
height: 24px;
|
|
25
|
+
padding: 0;
|
|
26
|
+
border: 0;
|
|
27
|
+
background: transparent;
|
|
28
|
+
display: inline-flex;
|
|
29
|
+
align-items: center;
|
|
30
|
+
justify-content: center;
|
|
31
|
+
cursor: pointer;
|
|
32
|
+
color: $blue;
|
|
33
|
+
outline: none;
|
|
34
|
+
box-shadow: none;
|
|
35
|
+
-webkit-tap-highlight-color: transparent;
|
|
36
|
+
|
|
37
|
+
i {
|
|
38
|
+
font-size: 16px;
|
|
39
|
+
line-height: 1;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&[disabled] {
|
|
43
|
+
cursor: not-allowed;
|
|
44
|
+
opacity: 0.6;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
&:focus {
|
|
48
|
+
outline: none;
|
|
49
|
+
box-shadow: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&:focus-visible {
|
|
53
|
+
border-radius: 4px;
|
|
54
|
+
box-shadow: 0 0 0 3px rgba($blue, 0.35);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&:focus:not(:focus-visible) {
|
|
58
|
+
box-shadow: none;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
&::-moz-focus-inner {
|
|
62
|
+
border: 0;
|
|
63
|
+
padding: 0;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
$page-bullet-color: $gray;
|
|
2
|
+
$page-bullet-active-color: $blue;
|
|
3
|
+
$quick-filter-shadow: rgba(0, 0, 0, 0.12);
|
|
4
|
+
|
|
1
5
|
.page-header {
|
|
2
6
|
&_border-all:has(~ .quick-filter) {
|
|
3
7
|
padding: 0;
|
|
@@ -18,7 +22,11 @@
|
|
|
18
22
|
display: flex;
|
|
19
23
|
flex-direction: column;
|
|
20
24
|
align-items: center;
|
|
25
|
+
|
|
26
|
+
// sass-lint:disable no-misspelled-properties
|
|
21
27
|
gap: 8px;
|
|
28
|
+
// sass-lint:enable no-misspelled-properties
|
|
29
|
+
|
|
22
30
|
padding: 12px;
|
|
23
31
|
width: 104px;
|
|
24
32
|
height: auto;
|
|
@@ -64,20 +72,24 @@
|
|
|
64
72
|
svg {
|
|
65
73
|
position: relative;
|
|
66
74
|
z-index: 1;
|
|
75
|
+
|
|
76
|
+
// sass-lint:disable no-important
|
|
67
77
|
width: 38px !important;
|
|
78
|
+
// sass-lint:enable no-important
|
|
79
|
+
|
|
68
80
|
height: 38px;
|
|
69
81
|
margin-top: -30px;
|
|
70
82
|
}
|
|
71
83
|
}
|
|
72
84
|
|
|
73
85
|
&__next-btn {
|
|
74
|
-
right:
|
|
86
|
+
right: 0;
|
|
75
87
|
|
|
76
88
|
&::before {
|
|
77
89
|
content: '';
|
|
78
90
|
position: absolute;
|
|
79
91
|
top: 0;
|
|
80
|
-
right:
|
|
92
|
+
right: 0;
|
|
81
93
|
bottom: 0;
|
|
82
94
|
width: 71px;
|
|
83
95
|
background: linear-gradient(270deg, $white 37%, transparent 100%);
|
|
@@ -86,13 +98,13 @@
|
|
|
86
98
|
}
|
|
87
99
|
|
|
88
100
|
&__prev-btn {
|
|
89
|
-
left:
|
|
101
|
+
left: 0;
|
|
90
102
|
|
|
91
103
|
&::before {
|
|
92
104
|
content: '';
|
|
93
105
|
position: absolute;
|
|
94
106
|
top: 0;
|
|
95
|
-
left:
|
|
107
|
+
left: 0;
|
|
96
108
|
bottom: 0;
|
|
97
109
|
width: 71px;
|
|
98
110
|
background: linear-gradient(90deg, $white 37%, transparent 100%);
|
|
@@ -118,14 +130,16 @@
|
|
|
118
130
|
|
|
119
131
|
.swiper-pagination-bullet {
|
|
120
132
|
border-radius: 5px;
|
|
121
|
-
background-color:
|
|
133
|
+
background-color: $page-bullet-color;
|
|
122
134
|
height: 6px;
|
|
123
135
|
width: 6px;
|
|
124
|
-
transition: width
|
|
136
|
+
transition-property: width, background-color;
|
|
137
|
+
transition-duration: 0.3s;
|
|
138
|
+
transition-timing-function: ease-in;
|
|
125
139
|
}
|
|
126
140
|
|
|
127
141
|
.swiper-pagination-bullet-active {
|
|
128
|
-
background-color:
|
|
142
|
+
background-color: $page-bullet-active-color;
|
|
129
143
|
width: 24px;
|
|
130
144
|
}
|
|
131
145
|
|
|
@@ -140,6 +154,7 @@
|
|
|
140
154
|
}
|
|
141
155
|
|
|
142
156
|
&--selected img {
|
|
157
|
+
// prettier-ignore
|
|
143
158
|
filter: brightness(0) saturate(100%) invert(27%) sepia(98%) saturate(1821%) hue-rotate(188deg) brightness(95%) contrast(101%);
|
|
144
159
|
}
|
|
145
160
|
}
|
|
@@ -155,6 +170,7 @@
|
|
|
155
170
|
}
|
|
156
171
|
|
|
157
172
|
&--selected img {
|
|
173
|
+
// prettier-ignore
|
|
158
174
|
filter: brightness(0) saturate(100%) invert(27%) sepia(98%) saturate(1821%) hue-rotate(188deg) brightness(95%) contrast(101%);
|
|
159
175
|
}
|
|
160
176
|
}
|
|
@@ -213,7 +229,10 @@
|
|
|
213
229
|
|
|
214
230
|
.swiper-wrapper {
|
|
215
231
|
flex-wrap: wrap;
|
|
232
|
+
|
|
233
|
+
// sass-lint:disable no-misspelled-properties
|
|
216
234
|
gap: 4px;
|
|
235
|
+
// sass-lint:enable no-misspelled-properties
|
|
217
236
|
}
|
|
218
237
|
|
|
219
238
|
.swiper-pagination {
|
|
@@ -267,17 +286,20 @@
|
|
|
267
286
|
|
|
268
287
|
.tooltip {
|
|
269
288
|
display: flex;
|
|
270
|
-
filter: drop-shadow(0 0 8px
|
|
289
|
+
filter: drop-shadow(0 0 8px $quick-filter-shadow);
|
|
271
290
|
margin-bottom: 4px;
|
|
272
291
|
|
|
273
292
|
.arrow {
|
|
274
|
-
|
|
293
|
+
&::before {
|
|
275
294
|
border-top-color: $white;
|
|
276
295
|
}
|
|
277
296
|
}
|
|
278
297
|
|
|
279
298
|
&-inner {
|
|
299
|
+
// sass-lint:disable no-important
|
|
280
300
|
padding: 8px 16px !important;
|
|
301
|
+
// sass-lint:enable no-important
|
|
302
|
+
|
|
281
303
|
background-color: $white;
|
|
282
304
|
color: $gray-dark;
|
|
283
305
|
font-size: 14px;
|
|
@@ -285,4 +307,4 @@
|
|
|
285
307
|
}
|
|
286
308
|
}
|
|
287
309
|
}
|
|
288
|
-
}
|
|
310
|
+
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
padding: 8px 12px !important;
|
|
10
10
|
border-radius: 4px;
|
|
11
11
|
font-weight: 400;
|
|
12
|
-
font-size: .75rem;
|
|
12
|
+
font-size: 0.75rem;
|
|
13
13
|
line-height: 1rem;
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
border-top-color: $white;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
p,
|
|
20
|
+
p,
|
|
21
|
+
ul {
|
|
21
22
|
margin: 0;
|
|
22
23
|
}
|
|
23
24
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
$blue-dark: #0a3055; // Base brand color for background
|
|
5
5
|
$blue: #0277bd; // CTAs
|
|
6
6
|
$green: #67a509; // Tick icons; Buttons in the checkout
|
|
7
|
-
$
|
|
7
|
+
$polished-pine: #67a589;
|
|
8
8
|
$green-dark: #487306; // Active state of button-action
|
|
9
9
|
|
|
10
10
|
// Additional colors
|