wickes-css2 2.113.0 → 2.117.0-develop.1

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 (233) hide show
  1. package/Readme.md +1 -1
  2. package/build/css/category-main.css +1 -1
  3. package/build/css/components/checkout-payment-details-v2.css +1 -1
  4. package/build/css/components/checkout-payment-repayment-terms.css +1 -1
  5. package/build/css/components/price-block-v2-critical.css +1 -1
  6. package/build/css/components/price-block-v2.css +1 -1
  7. package/build/css/kitchen-plp-main.css +1 -1
  8. package/build/css/main.css +1 -1
  9. package/build/css/my-account-main-v2.css +1 -1
  10. package/build/css/my-account-main.css +1 -1
  11. package/build/css/pages/checkout-new.css +1 -1
  12. package/build/css/pages/checkout.css +1 -1
  13. package/build/css/pages/page_checkout_delivery-new.css +1 -1
  14. package/build/css/pages/page_product-details-v2-critical.css +1 -1
  15. package/build/css/pages/page_product-details-v2.css +1 -1
  16. package/build/css/pages/page_product-details.css +1 -1
  17. package/build/css/pages/page_products-list-combined.css +1 -1
  18. package/build/css/pages/page_products-list_v2.css +1 -1
  19. package/build/css/pages/tradePro-signup.css +1 -1
  20. package/build/css/pdp-main-before-combine.css +1 -1
  21. package/build/css/pdp-main-critical.css +1 -1
  22. package/build/css/pdp-main-non-critical.css +1 -1
  23. package/build/css/pdp-main.css +1 -1
  24. package/build/css/plp-main.css +1 -1
  25. package/build/css/store-locator-main.css +1 -1
  26. package/build/img/file-pdf-solid-full.svg +3 -0
  27. package/build/img/lorem_ipsum.pdf +150 -0
  28. package/build/js/account-members.min.js +1 -1
  29. package/build/js/add-project-list-id.min.js +1 -1
  30. package/build/js/address-book.min.js +1 -1
  31. package/build/js/basket.min.js +2 -2
  32. package/build/js/bloomreach-widget.min.js +1 -1
  33. package/build/js/bundle.min.js +1 -1
  34. package/build/js/change-password.min.js +1 -1
  35. package/build/js/checkout.min.js +2 -2
  36. package/build/js/emulation.min.js +400 -192
  37. package/build/js/general.bundle.min.js +1 -1
  38. package/build/js/gift-cards.min.js +1 -1
  39. package/build/js/kitchen/kitchen-plp.min.js +1 -1
  40. package/build/js/merged-checkout.min.js +2 -2
  41. package/build/js/package-bulk-add.min.js +1 -0
  42. package/build/js/page/bloomreach-widget/bloomreach-recommendation-carousel-widget.js +7 -6
  43. package/build/js/page/bloomreach-widget/bloomreach-widget-core.js +47 -27
  44. package/build/js/page/bloomreach-widget/bloomreach-widget.js +5 -0
  45. package/build/js/page/bloomreach-widget/complete-your-project/view.js +11 -6
  46. package/build/js/page/bloomreach-widget/complete-your-project/widget.js +0 -1
  47. package/build/js/page/bloomreach-widget/similar-products-widget.js +17 -0
  48. package/build/js/page/plp-load-more.js +81 -66
  49. package/build/js/page/ripple/bulk-add.js +71 -0
  50. package/build/js/page/ripple/package-bulk-add.js +43 -0
  51. package/build/js/page/ripple/postcode-checker.js +83 -0
  52. package/build/js/page/ripple/thumb-gallery.js +236 -0
  53. package/build/js/page/utils/validation.js +1 -1
  54. package/build/js/pdf-preview.min.js +1 -0
  55. package/build/js/pdp.bundle.min.js +2 -2
  56. package/build/js/personal-details.min.js +1 -1
  57. package/build/js/plp.bundle.min.js +1 -1
  58. package/build/js/postcode-checker.min.js +1 -0
  59. package/build/js/project-list.min.js +2 -2
  60. package/build/js/quiz.min.js +1 -1
  61. package/build/js/track-my-order.min.js +1 -1
  62. package/package.json +1 -1
  63. package/src/badges-ripple.html +120 -0
  64. package/src/badges.html +9 -18
  65. package/src/components/bloomreach/complete-card.hbs +1 -1
  66. package/src/components/bloomreach/why-not-add-card.hbs +26 -7
  67. package/src/components/bloomreach/why-not-add.hbs +1 -1
  68. package/src/components/fulfilment-accordions.hbs +1 -1
  69. package/src/components/image-accordion.hbs +18 -0
  70. package/src/components/kitchen/price.hbs +49 -29
  71. package/src/components/kitchen/strip-stickers.hbs +9 -3
  72. package/src/components/modal-capture.hbs +1 -1
  73. package/src/components/modal-id-type.hbs +271 -0
  74. package/src/components/modal-pdf-preview.hbs +70 -0
  75. package/src/components/package-card.hbs +30 -0
  76. package/src/components/partner-signup-form.hbs +1 -231
  77. package/src/components/pdp-price-actions.hbs +17 -0
  78. package/src/components/postcode-checker.hbs +24 -0
  79. package/src/components/price-badges.hbs +12 -10
  80. package/src/components/price-block-v2.hbs +289 -199
  81. package/src/components/product-main-info-v2.hbs +2 -0
  82. package/src/components/suite-includes.hbs +66 -0
  83. package/src/components/suite-product-card.hbs +47 -0
  84. package/src/components/thumb-gallery.hbs +23 -0
  85. package/src/data/data_badges.json +143 -0
  86. package/src/data/data_bathroom-plp.json +814 -0
  87. package/src/data/data_suite-includes-products.json +134 -0
  88. package/src/img/file-pdf-solid-full.svg +3 -0
  89. package/src/img/lorem_ipsum.pdf +150 -0
  90. package/src/js/components/banner-placement-manager.js +25 -9
  91. package/src/js/components/general/image-accordion.js +54 -0
  92. package/src/js/components/general/switchVat.js +8 -1
  93. package/src/js/components/package-card.js +69 -0
  94. package/src/js/components/store-locator-cards.js +76 -0
  95. package/src/js/emulation/banner-placement-manager.js +219 -188
  96. package/src/js/emulation/bloomreach-widget-calculations.js +1 -1
  97. package/src/js/emulation/mock.js +66 -34
  98. package/src/js/emulation/plp-load-more.js +13 -4
  99. package/src/js/emulation/postcode-checker.js +11 -0
  100. package/src/js/emulation/similar-products-loading.js +22 -0
  101. package/src/js/emulation/tradepro-id-pdf.js +182 -0
  102. package/src/js/libs/pdf-preview.js +1177 -0
  103. package/src/js/page/bloomreach-widget/bloomreach-recommendation-carousel-widget.js +7 -6
  104. package/src/js/page/bloomreach-widget/bloomreach-widget-core.js +47 -27
  105. package/src/js/page/bloomreach-widget/bloomreach-widget.js +5 -0
  106. package/src/js/page/bloomreach-widget/complete-your-project/view.js +11 -6
  107. package/src/js/page/bloomreach-widget/complete-your-project/widget.js +0 -1
  108. package/src/js/page/bloomreach-widget/similar-products-widget.js +17 -0
  109. package/src/js/page/plp-load-more.js +81 -66
  110. package/src/js/page/ripple/bulk-add.js +71 -0
  111. package/src/js/page/ripple/package-bulk-add.js +43 -0
  112. package/src/js/page/ripple/postcode-checker.js +83 -0
  113. package/src/js/page/ripple/thumb-gallery.js +236 -0
  114. package/src/js/page/utils/validation.js +1 -1
  115. package/src/page_bathroom-plp-vat.html +81 -0
  116. package/src/page_bathroom-plp-without-load-more.html +83 -0
  117. package/src/page_bathroom-plp.html +98 -0
  118. package/src/page_checkout_confirmation-billie.html +5 -231
  119. package/src/page_checkout_confirmation-clearpay.html +5 -231
  120. package/src/page_checkout_confirmation-new-apple.html +5 -231
  121. package/src/page_checkout_confirmation-new-google.html +5 -231
  122. package/src/page_checkout_confirmation-new-klarna.html +5 -231
  123. package/src/page_checkout_confirmation-new-paypal.html +5 -231
  124. package/src/page_checkout_delivery-details-v2-calendar-not-loaded.html +167 -0
  125. package/src/page_checkout_payment-details-v2-asm.html +2 -3
  126. package/src/page_checkout_payment-details-v2.html +2 -3
  127. package/src/page_checkout_payment-details_with-card-loader.html +2 -3
  128. package/src/page_checkout_payment-details_with-klarna-loader.html +2 -3
  129. package/src/page_checkout_payment-details_with-loader-v2.html +2 -3
  130. package/src/page_klarna_payment-details_with-klarna.html +2 -3
  131. package/src/page_payment-details-billie-registered-only.html +2 -3
  132. package/src/page_payment-details-billie-unregistered-only.html +2 -3
  133. package/src/page_payment-details-with-billie.html +2 -3
  134. package/src/page_payment-details-with-clearpay.html +2 -3
  135. package/src/page_payment-details-with-gift-card.html +2 -3
  136. package/src/page_payment-details_with_apple-pay.html +0 -1
  137. package/src/page_payment-details_with_google-pay.html +2 -3
  138. package/src/page_pdf-preview-example.html +955 -0
  139. package/src/page_product-details-banner.html +1 -3
  140. package/src/page_product-details-big-wins-disabled-delivery.html +1 -3
  141. package/src/page_product-details-big-wins-non-registered.html +1 -3
  142. package/src/page_product-details-big-wins-out-nearest.html +1 -3
  143. package/src/page_product-details-big-wins-unhappy.html +1 -3
  144. package/src/page_product-details-big-wins.html +1 -3
  145. package/src/page_product-details-billie.html +1 -3
  146. package/src/page_product-details-calculator.html +1 -3
  147. package/src/page_product-details-cashback-v2.html +1 -3
  148. package/src/page_product-details-clearpay.html +1 -3
  149. package/src/page_product-details-cnc-error-notification.html +1 -3
  150. package/src/page_product-details-cnc-success-notification-vat.html +1 -4
  151. package/src/page_product-details-cnc-success-notification.html +1 -3
  152. package/src/page_product-details-default-store.html +1 -3
  153. package/src/page_product-details-energy-efficiency.html +1 -3
  154. package/src/page_product-details-flooring-with-pr-placeholder.html +1 -3
  155. package/src/page_product-details-flooring.html +1 -3
  156. package/src/page_product-details-gallery-actual.html +1 -3
  157. package/src/page_product-details-mfe-calculator.html +1 -3
  158. package/src/page_product-details-mtm-doors.html +1 -3
  159. package/src/page_product-details-only-clearpay.html +1 -3
  160. package/src/page_product-details-paint-mixing.html +1 -3
  161. package/src/page_product-details-ripple-gallery-1-image.html +120 -0
  162. package/src/page_product-details-ripple-gallery-missing-image.html +121 -0
  163. package/src/page_product-details-ripple-gallery.html +121 -0
  164. package/src/page_product-details-saved-pl.html +1 -3
  165. package/src/page_product-details-suite-includes-banners.html +139 -0
  166. package/src/page_product-details-suite-includes-billie.html +128 -0
  167. package/src/page_product-details-suite-includes-klarna.html +120 -0
  168. package/src/page_product-details-suite-includes-vat.html +126 -0
  169. package/src/page_product-details-suite-includes.html +122 -0
  170. package/src/page_product-details-tile-steps-klarna-widget-with-method-ids.html +1 -3
  171. package/src/page_product-details-tile-steps-logout.html +1 -3
  172. package/src/page_product-details-tile-steps-no-new-project-list.html +1 -3
  173. package/src/page_product-details-tile-steps-with-klarna.html +1 -3
  174. package/src/page_product-details-tile-steps.html +1 -3
  175. package/src/page_product-details-v2.html +1 -3
  176. package/src/page_product-details-vat.html +1 -3
  177. package/src/page_product-details-wisdom-mcfc-registered.html +1 -3
  178. package/src/page_product-details-wisdom-mcfc.html +1 -3
  179. package/src/page_product-details-wisdom-oos-registered.html +1 -3
  180. package/src/page_product-details-wisdom-oos.html +1 -3
  181. package/src/page_product-details-wisdom-registered.html +1 -3
  182. package/src/page_product-details-wisdom.html +1 -3
  183. package/src/page_product-details-with-favourite.html +1 -3
  184. package/src/page_product-details-with-global-search-v2.html +2 -3
  185. package/src/page_product-details-with-similar-products-widget.html +132 -0
  186. package/src/page_product-details-with-why-not-add-single.html +1 -0
  187. package/src/page_product-details_no-previous-default.html +1 -3
  188. package/src/page_tradePro-checkout-summary-klarna.html +4 -231
  189. package/src/page_tradePro-checkout-summary.html +4 -231
  190. package/src/page_tradePro-signup.html +5 -0
  191. package/src/scss/common/_loading-button.scss +3 -1
  192. package/src/scss/components/_date-selection-add-new-styles.scss +53 -3
  193. package/src/scss/components/_gift-cards.scss +1 -1
  194. package/src/scss/components/_id-type-modal.scss +39 -0
  195. package/src/scss/components/_image-accordion.scss +54 -0
  196. package/src/scss/components/_kitchen-card.scss +1 -0
  197. package/src/scss/components/_map.scss +38 -0
  198. package/src/scss/components/_package-card.scss +65 -0
  199. package/src/scss/components/_package-plp.scss +88 -0
  200. package/src/scss/components/_pdf-preview-modal.scss +122 -0
  201. package/src/scss/components/_postcode-checker.scss +115 -0
  202. package/src/scss/components/_price-badges-critical.scss +10 -0
  203. package/src/scss/components/_price-badges.scss +10 -0
  204. package/src/scss/components/_price-block-critical.scss +1 -0
  205. package/src/scss/components/_price-block.scss +1 -0
  206. package/src/scss/components/_suite-includes.scss +141 -0
  207. package/src/scss/components/_suite-product-card.scss +98 -0
  208. package/src/scss/components/_thumb-gallery-critical.scss +35 -0
  209. package/src/scss/components/_thumb-gallery.scss +200 -0
  210. package/src/scss/components/bloomreach/_why-not-add.scss +3 -1
  211. package/src/scss/components/checkout-payment-details-v2.scss +44 -20
  212. package/src/scss/components/checkout-payment-repayment-terms.scss +0 -1
  213. package/src/scss/components/kitchen/_price.scss +10 -0
  214. package/src/scss/components/kitchen/_strip-stickers.scss +46 -0
  215. package/src/scss/components/price-block-v2-critical.scss +62 -0
  216. package/src/scss/components/price-block-v2.scss +62 -0
  217. package/src/scss/pages/_checkout-tradepro.scss +1 -0
  218. package/src/scss/pages/_checkout_delivery-details.scss +16 -104
  219. package/src/scss/pages/page_checkout_delivery-new.scss +252 -164
  220. package/src/scss/pages/page_product-details-v2-critical.scss +216 -109
  221. package/src/scss/pages/page_product-details-v2.scss +168 -107
  222. package/src/scss/pages/page_product-details.scss +11 -0
  223. package/src/scss/pages/page_products-list-combined.scss +8 -6
  224. package/src/scss/pages/page_products-list_v2.scss +8 -6
  225. package/src/scss/pages/tradePro-signup.scss +1 -0
  226. package/src/scss/pdp-main-critical.scss +1 -0
  227. package/src/scss/pdp-main.scss +6 -0
  228. package/src/scss/plp-main.scss +5 -0
  229. package/src/sitemap.html +30 -6
  230. package/build/css/components/kitchen/strip-stickers.css +0 -1
  231. package/build/css/components/strip-stickers.css +0 -1
  232. package/src/scss/components/kitchen/strip-stickers.scss +0 -18
  233. package/src/scss/components/strip-stickers.scss +0 -18
@@ -0,0 +1,83 @@
1
+ import { isValidPostcodeField } from '../utils/validation';
2
+ import { createBulkAddHelper, dispatchWindowEvent } from './bulk-add';
3
+
4
+ var Wick = window.Wick || {};
5
+
6
+ Wick.PostcodeChecker = (function () {
7
+ const POSTCODE_CHECK_AVAILABILITY_EVENT = 'postcodeCheckAviability';
8
+ const QUANTITY = 1;
9
+
10
+ const selectors = {
11
+ root: '.postcode-checker',
12
+ input: '.postcode-checker__input',
13
+ button: '.postcode-checker__button',
14
+ productCodeInput: '.pdp-price input[name=productCodePost]',
15
+ };
16
+
17
+ const modifiers = {
18
+ hasError: 'postcode-checker--error',
19
+ };
20
+
21
+ const bulkAdd = createBulkAddHelper({ productCodeSelector: selectors.productCodeInput });
22
+
23
+ function checkPostcodeAvailability(postcode) {
24
+ const payload = { postcode, productCode: bulkAdd.getProductCode(), quantity: QUANTITY };
25
+
26
+ return dispatchWindowEvent(POSTCODE_CHECK_AVAILABILITY_EVENT, payload);
27
+ }
28
+
29
+ async function bulkAddForPostcode(postcode) {
30
+ try {
31
+ await checkPostcodeAvailability(postcode);
32
+ bulkAdd.showBulkAddResult(await bulkAdd.addProductToCart(postcode));
33
+ Wick.MiniBasketSliderFE.isMiniBasketLoaded = false;
34
+ } catch {
35
+ bulkAdd.showBulkAddFailed();
36
+ }
37
+ }
38
+
39
+ function isPostcodeValid($component, $postcodeInput) {
40
+ const isValid = isValidPostcodeField($postcodeInput.val());
41
+ $component.toggleClass(modifiers.hasError, !isValid);
42
+ console.log({ isValid, val: $postcodeInput.val() });
43
+ return isValid;
44
+ }
45
+
46
+ function handleSubmitClick($component, $postcodeInput, $submitButton) {
47
+ if (
48
+ bulkAdd.loadingButton.isLoading($submitButton) ||
49
+ !isPostcodeValid($component, $postcodeInput)
50
+ ) {
51
+ return;
52
+ }
53
+
54
+ bulkAdd.loadingButton.start($submitButton);
55
+
56
+ const postcode = $postcodeInput.val();
57
+
58
+ bulkAddForPostcode(postcode).finally(function () {
59
+ bulkAdd.loadingButton.stop($submitButton);
60
+ });
61
+ }
62
+
63
+ function init() {
64
+ bulkAdd.init();
65
+
66
+ $(selectors.root).each(function () {
67
+ const $component = $(this);
68
+ const $postcodeInput = $component.find(selectors.input);
69
+ const $submitButton = $component.find(selectors.button);
70
+
71
+ $component.removeClass(modifiers.hasError);
72
+
73
+ $submitButton.on('click', function (e) {
74
+ e.preventDefault();
75
+ handleSubmitClick($component, $postcodeInput, $submitButton);
76
+ });
77
+ });
78
+ }
79
+
80
+ return { init };
81
+ })();
82
+
83
+ $(document).ready(Wick.PostcodeChecker.init);
@@ -0,0 +1,236 @@
1
+ var Wick = window.Wick || {};
2
+
3
+ Wick.ThumbGallery = (function () {
4
+ const IMG_BREAKPOINTS = [
5
+ { media: '(max-width: 576px)', w: 576, h: 324 },
6
+ { media: '(max-width: 768px)', w: 510, h: 287 },
7
+ { media: '(max-width: 992px)', w: 310, h: 174 },
8
+ ];
9
+
10
+ const MAIN_DEFAULT = { w: 710, h: 399 };
11
+ const THUMB = { w: 100, h: 56 };
12
+
13
+ function getMediaDomain() {
14
+ return (typeof window !== 'undefined' && window.mediaDomain) || 'media.wickes.co.uk';
15
+ }
16
+
17
+ function getProductName() {
18
+ return (typeof window !== 'undefined' && window.pdpProduct && window.pdpProduct.name) || '';
19
+ }
20
+
21
+ function getBaseUrl(customDomain) {
22
+ const domain = customDomain || getMediaDomain();
23
+ const cleanDomain = domain.replace(/^https?:\/\//, '').replace(/\/$/, '');
24
+ return `https://${cleanDomain}/image/upload/`;
25
+ }
26
+
27
+ function buildCloudinaryUrl(publicId, w, h, baseUrl) {
28
+ const base = baseUrl || getBaseUrl();
29
+ const cleanId = String(publicId).replace(/^\/+/, '');
30
+ const transforms = `b_rgb:FFFFFF,c_pad,dpr_1.0,f_jpg,h_${h},q_auto:good,w_${w}`;
31
+ return `${base}${transforms}/c_pad,h_${h},w_${w}/v1/${cleanId}?pgw=1`;
32
+ }
33
+
34
+ function parseIdentifiers(hybrisString) {
35
+ if (Array.isArray(hybrisString)) {
36
+ return hybrisString.filter(Boolean);
37
+ }
38
+ if (!hybrisString || typeof hybrisString !== 'string') {
39
+ return [];
40
+ }
41
+ const trimmed = hybrisString.trim();
42
+ const content = trimmed.startsWith('[') && trimmed.endsWith(']')
43
+ ? trimmed.slice(1, -1)
44
+ : trimmed;
45
+
46
+ return content
47
+ .split(',')
48
+ .map((s) => s.trim())
49
+ .filter(Boolean);
50
+ }
51
+
52
+ function renderMainSlide(src, sourcesHtml = '') {
53
+ const productName = getProductName();
54
+ return `<div class="thumb-gallery__slide-wrapper swiper-slide">
55
+ <picture>
56
+ ${sourcesHtml}
57
+ <img class="swiper-slide-main" src="${src}" alt="${productName}">
58
+ </picture>
59
+ </div>`;
60
+ }
61
+
62
+ function renderThumbSlide(src) {
63
+ const productName = getProductName();
64
+ return `<div class="thumb-gallery__slide-wrapper swiper-slide">
65
+ <img class="swiper-slide-thumbs" src="${src}" alt="${productName}">
66
+ </div>`;
67
+ }
68
+
69
+ function generateCloudinaryMainSlide(publicId, baseUrl) {
70
+ const sourcesHtml = IMG_BREAKPOINTS.map(
71
+ (bp) => `<source srcset="${buildCloudinaryUrl(publicId, bp.w, bp.h, baseUrl)}" media="${bp.media}">`
72
+ ).join('\n ');
73
+ const fallbackSrc = buildCloudinaryUrl(publicId, MAIN_DEFAULT.w, MAIN_DEFAULT.h, baseUrl);
74
+ return renderMainSlide(fallbackSrc, sourcesHtml);
75
+ }
76
+
77
+ function generateCloudinaryThumbSlide(publicId, baseUrl) {
78
+ const src = buildCloudinaryUrl(publicId, THUMB.w, THUMB.h, baseUrl);
79
+ return renderThumbSlide(src);
80
+ }
81
+
82
+ const SELECTORS = {
83
+ galleryCarousel: '.thumb-gallery',
84
+ swiperContainerMain: '.swiper-container-main',
85
+ swiperContainerThumbs: '.swiper-container-thumbs',
86
+ swiperMainWrapper: '.swiper-container-main .swiper-wrapper',
87
+ swiperThumbsWrapper: '.swiper-container-thumbs .swiper-wrapper',
88
+ nextBtn: '.thumb-gallery__next-btn',
89
+ prevBtn: '.thumb-gallery__prev-btn',
90
+ thumbNextBtn: '.swiper-container-thumbs__next-btn',
91
+ thumbPrevBtn: '.swiper-container-thumbs__prev-btn',
92
+ swiperSlide: '.swiper-slide',
93
+ activeThumbClass: 'swiper-true-active',
94
+ };
95
+
96
+ const THUMBS_SWIPER_CONFIG = {
97
+ spaceBetween: 8,
98
+ slidesPerView: 8,
99
+ watchSlidesVisibility: true,
100
+ watchSlidesProgress: true,
101
+ watchOverflow: true,
102
+ observer: true,
103
+ observeParents: true,
104
+ simulateTouch: false,
105
+ };
106
+
107
+ const THUMBS_BREAKPOINTS = {
108
+ 991: { slidesPerView: 5 },
109
+ 767: { allowTouchMove: true, slidesPerView: 5 },
110
+ };
111
+
112
+ const MAIN_SWIPER_CONFIG = {
113
+ speed: 400,
114
+ slidesPerView: 1,
115
+ loop: true,
116
+ observer: true,
117
+ observeParents: true,
118
+ simulateTouch: false,
119
+ };
120
+
121
+ function handleThumbClick(swiper) {
122
+ return function () {
123
+ const clickedIndex = $(this).index();
124
+ if (swiper.params && swiper.params.loop) {
125
+ swiper.slideToLoop(clickedIndex);
126
+ } else {
127
+ swiper.slideTo(clickedIndex);
128
+ }
129
+ };
130
+ }
131
+
132
+ function updateActiveThumbnail(swiper, thumbsSwiper) {
133
+ const activeIndex = swiper.realIndex;
134
+ thumbsSwiper.slides.removeClass(SELECTORS.activeThumbClass);
135
+ thumbsSwiper.slides.eq(activeIndex).addClass(SELECTORS.activeThumbClass);
136
+ }
137
+
138
+ function getThumbsConfig($thumbNextBtn, $thumbPrevBtn) {
139
+ return {
140
+ ...THUMBS_SWIPER_CONFIG,
141
+ navigation: {
142
+ nextEl: $thumbNextBtn[0],
143
+ prevEl: $thumbPrevBtn[0],
144
+ },
145
+ breakpoints: { ...THUMBS_BREAKPOINTS },
146
+ };
147
+ }
148
+
149
+ function getMainSwiperConfig($nextBtn, $prevBtn, thumbsSwiper, onSlideChange, count) {
150
+ return {
151
+ ...MAIN_SWIPER_CONFIG,
152
+ loop: count > 1,
153
+ simulateTouch: count > 1,
154
+ navigation: {
155
+ nextEl: $nextBtn[0],
156
+ prevEl: $prevBtn[0],
157
+ },
158
+ thumbs: { swiper: thumbsSwiper },
159
+ on: { slideChange: onSlideChange },
160
+ };
161
+ }
162
+
163
+ function initializeCarousel($slider, ids, baseUrl, missingImage) {
164
+ const isMissing = ids.length === 0 && Boolean(missingImage);
165
+ if (ids.length === 0 && !missingImage) {
166
+ return;
167
+ }
168
+
169
+ const $container = $slider.find(SELECTORS.swiperContainerMain);
170
+ const $thumbContainer = $slider.find(SELECTORS.swiperContainerThumbs);
171
+ if (!$container.length || !$thumbContainer.length) {
172
+ return;
173
+ }
174
+
175
+ if ($container[0].swiper) {
176
+ $container[0].swiper.destroy(true, true);
177
+ }
178
+ if ($thumbContainer[0].swiper) {
179
+ $thumbContainer[0].swiper.destroy(true, true);
180
+ }
181
+
182
+ const total = isMissing ? 1 : ids.length;
183
+ $slider.attr('data-length', total);
184
+
185
+ if (isMissing) {
186
+ $slider.addClass('thumb-gallery--missing-image');
187
+ $slider.find(SELECTORS.swiperMainWrapper).html(renderMainSlide(missingImage));
188
+ $slider.find(SELECTORS.swiperThumbsWrapper).html(renderThumbSlide(missingImage));
189
+ } else {
190
+ $slider.removeClass('thumb-gallery--missing-image');
191
+ $slider
192
+ .find(SELECTORS.swiperMainWrapper)
193
+ .html(ids.map((id) => generateCloudinaryMainSlide(id, baseUrl)).join('\n'));
194
+ $slider
195
+ .find(SELECTORS.swiperThumbsWrapper)
196
+ .html(ids.map((id) => generateCloudinaryThumbSlide(id, baseUrl)).join('\n'));
197
+ }
198
+
199
+ const $nextBtn = $slider.find(SELECTORS.nextBtn);
200
+ const $prevBtn = $slider.find(SELECTORS.prevBtn);
201
+ const $thumbNextBtn = $slider.find(SELECTORS.thumbNextBtn);
202
+ const $thumbPrevBtn = $slider.find(SELECTORS.thumbPrevBtn);
203
+
204
+ const thumbsSwiper = new Swiper(
205
+ $thumbContainer[0],
206
+ getThumbsConfig($thumbNextBtn, $thumbPrevBtn)
207
+ );
208
+
209
+ const swiper = new Swiper(
210
+ $container[0],
211
+ getMainSwiperConfig($nextBtn, $prevBtn, thumbsSwiper, () => {
212
+ updateActiveThumbnail(swiper, thumbsSwiper);
213
+ }, total)
214
+ );
215
+
216
+ $thumbContainer
217
+ .off('click', SELECTORS.swiperSlide)
218
+ .on('click', SELECTORS.swiperSlide, handleThumbClick(swiper));
219
+
220
+ updateActiveThumbnail(swiper, thumbsSwiper);
221
+ }
222
+
223
+ function init(hybrisString, options = {}) {
224
+ const ids = parseIdentifiers(hybrisString);
225
+
226
+ const opts = typeof options === 'string' ? { mediaDomain: options } : (options || {});
227
+ const baseUrl = getBaseUrl(opts.mediaDomain);
228
+ const missingImage = opts.missingImage || '';
229
+
230
+ $(SELECTORS.galleryCarousel).each(function (_, slider) {
231
+ initializeCarousel($(slider), ids, baseUrl, missingImage);
232
+ });
233
+ }
234
+
235
+ return { init };
236
+ })();
@@ -148,7 +148,7 @@ export function validatePostcode(element, ifConvert) {
148
148
  export function isValidPostcodeField(value) {
149
149
  const transformedValue = value.toUpperCase().replaceAll(' ', '');
150
150
  const regExp = new RegExp(
151
- '^(GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))[0-9][A-BD-HJLNP-UW-Z]{2})$'
151
+ '^((GIR0AA)|((([A-PR-UWYZ][0-9][0-9]?)|([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))[0-9][A-BD-HJLNP-UW-Z]{2}))$'
152
152
  );
153
153
  return transformedValue.replace(/\s+/g, '').length > 4 && regExp.test(transformedValue);
154
154
  }
@@ -0,0 +1 @@
1
+ !function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():t.PdfPreview=e()}("undefined"!=typeof self?self:this,function(){"use strict";var a={scale:1.5,pageClass:"",src:null,fitWidth:!0,maxPixelRatio:2,height:"50vh",spacing:null,injectStyles:!0,pdfjsLib:null,pdfjsUrl:"https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.min.js",pdfjsWorkerUrl:"https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.worker.min.js"},s={width:160,height:null,page:1,maxPixelRatio:a.maxPixelRatio,type:"image/jpeg",quality:.85,background:"#ffffff",pdfjsLib:a.pdfjsLib,pdfjsUrl:a.pdfjsUrl,pdfjsWorkerUrl:a.pdfjsWorkerUrl},l={root:"[data-pdf-preview]",pages:"[data-pdf-preview-pages]",first:"[data-pdf-preview-first]",prev:"[data-pdf-preview-prev]",next:"[data-pdf-preview-next]",last:"[data-pdf-preview-last]",pageInput:"[data-pdf-preview-page]",pageTotal:"[data-pdf-preview-total]",thumbnail:"[data-pdf-thumbnail]"},p={pages:"pdfp-pages",page:"pdfp-page",pageAuto:"pdfp-page--auto"},d="pdf-preview-base-styles",u="."+p.pages+"{overflow-y:auto;overflow-x:hidden;max-height:var(--pdfp-height);scrollbar-gutter:stable;padding:var(--pdfp-spacing,16px);-webkit-overflow-scrolling:touch}."+p.page+"{display:block;width:100%;height:auto;margin:0 auto}."+p.pageAuto+"{width:var(--pdfp-page-width,auto);max-width:100%}."+p.page+"+."+p.page+"{margin-top:var(--pdfp-spacing,16px)}",i=16777216,h="__pdfPreview",c="__pdfThumbnail",t=null,g=!1;function f(){}function m(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];if(i)for(var r in i)Object.prototype.hasOwnProperty.call(i,r)&&void 0!==i[r]&&(t[r]=i[r])}return t}function v(t,e,i){var r;try{r=new CustomEvent(e,{detail:i,bubbles:!0})}catch(t){(r=document.createEvent("CustomEvent")).initCustomEvent(e,!0,!1,i)}t.dispatchEvent(r)}function w(t,e){t=t.width*t.height*e*e;return i<t?e*Math.sqrt(i/t):e}function b(t){return null==t||""===t?null:/^-?\d+(\.\d+)?$/.test(String(t))?t+"px":String(t)}function _(t,e){for(var i=t?String(t).split(/\s+/):[],r=0;r<i.length;r++)if(i[r]===e)return t;return i.push(e),i.join(" ").replace(/^\s+/,"")}function P(t){return t?"string"==typeof t?document.querySelector(t):1!==t.nodeType&&"number"==typeof t.length?t[0]||null:1===t.nodeType?t:null:null}function y(e){var r;return e.pdfjsLib?Promise.resolve(e.pdfjsLib):window.pdfjsLib?Promise.resolve(window.pdfjsLib):(t||(r=e.pdfjsUrl,t=new Promise(function(t,e){var i=document.createElement("script");i.src=r,i.onload=t,i.onerror=function(){e(new Error("PdfPreview: failed to load "+r))},document.head.appendChild(i)}).then(function(){var t=window.pdfjsLib||window["pdfjs-dist/build/pdf"];if(t)return e.pdfjsWorkerUrl&&t.GlobalWorkerOptions&&(t.GlobalWorkerOptions.workerSrc=e.pdfjsWorkerUrl),window.pdfjsLib=t;throw new Error("PdfPreview: pdf.js did not register itself")})),t)}function n(t,e){var i,r=t.getViewport({scale:1}),n=(s=r,a=e,o=parseFloat(a.width),a=parseFloat(a.height),i=1/0,0<o&&(i=Math.min(i,o/s.width)),(i=0<a?Math.min(i,a/s.height):i)===1/0?1:i),o=Math.min(window.devicePixelRatio||1,e.maxPixelRatio),a=w(r,n*o),s=t.getViewport({scale:a}),l=document.createElement("canvas");return l.width=Math.floor(s.width),l.height=Math.floor(s.height),t.render({canvasContext:l.getContext("2d"),viewport:s,background:e.background}).promise.then(function(){var t=l.toDataURL(e.type,e.quality);return l.width=0,l.height=0,{dataUrl:t,width:Math.round(r.width*n),height:Math.round(r.height*n)}})}function C(e,i){var t=parseInt(i.page,10),r=Math.min(Math.max(isNaN(t)?1:t,1),e.numPages);return e.getPage(r).then(function(t){return n(t,i).then(function(t){return t.page=r,t.pageCount=e.numPages,t})})}function j(t,e){var i,r,t=P(t);if(!t)throw new Error("PdfPreview: root element not found");if(t[h])return t[h];if(!(this instanceof j))return new j(t,e);this.element=t,this.options=m({},a,(o=t,r=parseFloat(o.getAttribute("data-pdf-preview-scale")),n=parseFloat(o.getAttribute("data-pdf-preview-max-pixel-ratio")),i=o.getAttribute("data-pdf-preview-fit-width"),{scale:isNaN(r)?void 0:r,maxPixelRatio:isNaN(n)?void 0:n,pageClass:o.getAttribute("data-pdf-preview-page-class")||void 0,src:o.getAttribute("data-pdf-preview-src")||void 0,height:o.getAttribute("data-pdf-preview-height")||void 0,spacing:o.getAttribute("data-pdf-preview-spacing")||void 0,fitWidth:null===i?void 0:"false"!==i}),e),this.selectors=m({},l,(e||{}).selectors),this.pagesContainer=t.querySelector(this.selectors.pages)||t,this.doc=null,this.canvases=[],this.objectUrl=null,this._loadId=0,this._loadingTask=null,(t[h]=this).options.injectStyles&&(g=(g||document.getElementById(d)||((r=document.createElement("style")).id=d,r.appendChild(document.createTextNode(u)),document.head.insertBefore(r,document.head.firstChild)),!0),this.pagesContainer.className=_(this.pagesContainer.className,p.pages));var n=b(this.options.height),o=b(this.options.spacing);this.pagesContainer.style.setProperty&&(n&&this.pagesContainer.style.setProperty("--pdfp-height",n),o)&&this.pagesContainer.style.setProperty("--pdfp-spacing",o),this._bind(),this.options.src&&this.load(this.options.src)}return j.prototype._find=function(t){return t?this.element.querySelector(t):null},j.prototype._emit=function(t,e){v(this.element,t,e)},j.prototype._bind=function(){var r=this;this._onClick=function(t){var e=t.target;function i(t){return t&&e.closest(t)}if(i(r.selectors.first))r.goToPage(1);else if(i(r.selectors.prev))r.goToPage(r.getCurrentPage()-1);else if(i(r.selectors.next))r.goToPage(r.getCurrentPage()+1);else{if(!i(r.selectors.last))return;r.goToPage(r.getPageCount())}t.preventDefault()},this._onChange=function(t){r.selectors.pageInput&&t.target.closest(r.selectors.pageInput)&&(t=parseInt(t.target.value,10),!isNaN(t)&&1<=t&&t<=r.getPageCount()?r.goToPage(t):r._setPageInput(r.getCurrentPage()))},this._onScroll=function(t){t=t.target;(t===document||t.contains&&t.contains(r.pagesContainer))&&(r._scrollLocked?r._lockPageSync(150):r._scrollFrame||(r._scrollFrame=requestAnimationFrame(function(){r._scrollFrame=null,r._setPageInput(r.getCurrentPage())})))},this.element.addEventListener("click",this._onClick),this.element.addEventListener("change",this._onChange),document.addEventListener("scroll",this._onScroll,!0)},j.prototype._isScrollViewport=function(){return this.pagesContainer.scrollHeight>this.pagesContainer.clientHeight},j.prototype._lockPageSync=function(t){var e=this;this._scrollLocked=!0,clearTimeout(this._scrollTimer),this._scrollTimer=setTimeout(function(){e._scrollLocked=!1,e._setPageInput(e._targetPage||e.getCurrentPage()),e._targetPage=null},t)},j.prototype._setPageInput=function(t){var e=this._find(this.selectors.pageInput);e&&String(e.value)!==String(t)&&(e.value=t,this._emit("pdfpreview:pagechange",{page:t}))},j.prototype._setPageTotal=function(t){var e=this._find(this.selectors.pageTotal);e&&(e.textContent=t)},j.prototype._isCurrentLoad=function(t){return t===this._loadId},j.prototype._contentWidth=function(){var t=this.pagesContainer,e=window.getComputedStyle(t);return t.clientWidth-(parseFloat(e.paddingLeft)||0)-(parseFloat(e.paddingRight)||0)},j.prototype._displayScale=function(t){return this.options.fitWidth&&0<this._availableWidth?this._availableWidth/t:this.options.scale},j.prototype._renderPage=function(o,a){var s=this;return this.doc.getPage(o).then(function(t){var e,i,r,n;if(s._isCurrentLoad(a))return i=w(n=t.getViewport({scale:1}),(e=s._displayScale(n.width))*Math.min(window.devicePixelRatio||1,s.options.maxPixelRatio)),i=t.getViewport({scale:i}),(r=document.createElement("canvas")).width=Math.floor(i.width),r.height=Math.floor(i.height),r.setAttribute("data-page",o),r.style.setProperty&&r.style.setProperty("--pdfp-page-width",Math.round(n.width*e)+"px"),n="",s.options.injectStyles&&(n=_(n,p.page),s.options.fitWidth||(n=_(n,p.pageAuto))),(n=s.options.pageClass?_(n,s.options.pageClass):n)&&(r.className=n),s.pagesContainer.appendChild(r),s.canvases.push(r),t.render({canvasContext:r.getContext("2d"),viewport:i}).promise})},j.prototype._renderFrom=function(t,e){var i=this;return!this._isCurrentLoad(e)||!this.doc||t>this.doc.numPages?Promise.resolve():this._renderPage(t,e).then(function(){return i._renderFrom(t+1,e)})},j.prototype.load=function(i){var r=this;if(!i)return Promise.reject(new Error("PdfPreview: no source given"));this.reset();var n=++this._loadId;return y(this.options).then(function(t){var e;return r._isCurrentLoad(n)?("string"!=typeof(e=i)&&(r.objectUrl=URL.createObjectURL(i),e=r.objectUrl),r._loadingTask=t.getDocument({url:e,isEvalSupported:!1}),r._loadingTask.promise):null}).then(function(t){if(t){var e;if(r._isCurrentLoad(n))return r.doc=t,r._setPageTotal(t.numPages),(e=r._find(r.selectors.pageInput))&&(e.setAttribute("max",t.numPages),e.value=1),r._emit("pdfpreview:loaded",{pageCount:t.numPages}),r._availableWidth=r._contentWidth(),r._renderFrom(1,n).then(function(){return r._isCurrentLoad(n)?t:void 0});t.destroy()}}).catch(function(t){if(r._isCurrentLoad(n))throw r._emit("pdfpreview:error",{error:t}),t})},j.prototype.reset=function(){for(this._loadId++,this._loadingTask&&(this._loadingTask.destroy(),this._loadingTask=null);this.pagesContainer.firstChild;)this.pagesContainer.removeChild(this.pagesContainer.firstChild);this.canvases=[],this.doc=null,clearTimeout(this._scrollTimer),cancelAnimationFrame(this._scrollFrame),this._scrollFrame=null,this._scrollLocked=!1,this._targetPage=null,this._setPageTotal("");var t=this._find(this.selectors.pageInput);t&&(t.value=1),this.objectUrl&&(URL.revokeObjectURL(this.objectUrl),this.objectUrl=null)},j.prototype.getPageCount=function(){return this.doc?this.doc.numPages:0},j.prototype.getThumbnail=function(t){var e,i=this;return this.doc?(t=m({},s,{maxPixelRatio:this.options.maxPixelRatio},t),e=this._loadId,C(this.doc,t).then(function(t){return i._isCurrentLoad(e)?t:void 0},function(t){if(i._isCurrentLoad(e))throw t})):Promise.reject(new Error("PdfPreview: no document loaded"))},j.prototype.getCurrentPage=function(){var t=this.canvases.length;if(!t)return 1;if(this._isScrollViewport()){var e=this.pagesContainer;if(e.scrollTop+e.clientHeight>=e.scrollHeight-1)return t;if(e.scrollTop<=0)return 1;var e=e.getBoundingClientRect(),i=e.top+e.height/2}else i=window.innerHeight/2;for(var r=1,n=1/0,o=0;o<t;o++){var a=this.canvases[o].getBoundingClientRect();if(a.top<=i&&a.bottom>=i)return o+1;a=Math.min(Math.abs(a.top-i),Math.abs(a.bottom-i));a<n&&(n=a,r=o+1)}return r},j.prototype.goToPage=function(t){var e,i,r=this.canvases[t-1];return!r||t<1||t>this.getPageCount()||(e=this.pagesContainer,this._setPageInput(t),this._targetPage=t,this._lockPageSync(700),this._isScrollViewport()?(t=r.getBoundingClientRect().top-e.getBoundingClientRect().top,i=parseFloat(window.getComputedStyle(e).paddingTop)||0,t=e.scrollTop+t-i,"scrollBehavior"in document.documentElement.style&&e.scrollTo?e.scrollTo({top:t,behavior:"smooth"}):e.scrollTop=t):r.scrollIntoView({behavior:"smooth",block:"start"})),this},j.prototype.destroy=function(){this.reset(),clearTimeout(this._scrollTimer),this._scrollLocked=!1,this.element.removeEventListener("click",this._onClick),this.element.removeEventListener("change",this._onChange),document.removeEventListener("scroll",this._onScroll,!0),delete this.element[h]},j.thumbnail=function(i,t){var e,r,n;return i?(e=m({},s,t),n=r=null,y(e).then(function(t){var e=i;return"string"!=typeof i&&(e=r=URL.createObjectURL(i)),(n=t.getDocument({url:e,isEvalSupported:!1})).promise}).then(function(t){return C(t,e)}).then(function(t){return o(),t},function(t){throw o(),t})):Promise.reject(new Error("PdfPreview.thumbnail: no source given"));function o(){n&&(n.destroy(),n=null),r&&(URL.revokeObjectURL(r),r=null)}},j.thumbnailInto=function(t,e,i){var r,n,o,a,s=P(t);return s?"IMG"!==s.tagName?Promise.reject(new Error("PdfPreview.thumbnailInto: expects an <img> element")):(r=m({},(t=s,r=parseFloat(t.getAttribute("data-pdf-thumbnail-width")),n=parseFloat(t.getAttribute("data-pdf-thumbnail-height")),o=parseInt(t.getAttribute("data-pdf-thumbnail-page"),10),a=parseFloat(t.getAttribute("data-pdf-thumbnail-quality")),{src:t.getAttribute("data-pdf-thumbnail-src")||void 0,width:isNaN(r)?void 0:r,height:isNaN(n)?void 0:n,page:isNaN(o)?void 0:o,type:t.getAttribute("data-pdf-thumbnail-type")||void 0,quality:isNaN(a)?void 0:a}),i),j.thumbnail(e||r.src,r).then(function(t){return s.src=t.dataUrl,s.setAttribute("width",t.width),s.setAttribute("height",t.height),v(s,"pdfthumbnail:loaded",t),t},function(t){throw v(s,"pdfthumbnail:error",{error:t}),t})):Promise.reject(new Error("PdfPreview.thumbnailInto: element not found"))},j.initThumbnails=function(t,e){for(var i=(P(t)||document).querySelectorAll(l.thumbnail),r=[],n=0;n<i.length;n++){var o=i[n];o[c]||(o[c]=j.thumbnailInto(o,null,e),o[c].catch(f)),r.push(o[c])}return r},j.get=function(t){t=P(t);return t&&t[h]||null},j.initAll=function(t,e){for(var i=(P(t)||document).querySelectorAll(l.root),r=[],n=0;n<i.length;n++)r.push(new j(i[n],e));return r},j.defaults=a,j.thumbnailDefaults=s,j.selectors=l,j.classes=p,j});