wickes-css2 2.106.0-develop.1 → 2.106.0-develop.10

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 (143) hide show
  1. package/Readme.md +2 -3
  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/global-search.css +1 -1
  5. package/build/css/homepage-main.css +1 -1
  6. package/build/css/kitchen-plp-main.css +1 -1
  7. package/build/css/main.css +1 -1
  8. package/build/css/my-account-main-v2.css +1 -1
  9. package/build/css/my-account-main.css +1 -1
  10. package/build/css/pages/page_checkout_delivery-new.css +1 -1
  11. package/build/css/pages/page_products-list-combined.css +1 -1
  12. package/build/css/pdp-main-before-combine.css +1 -1
  13. package/build/css/pdp-main-critical.css +1 -1
  14. package/build/css/pdp-main-non-critical.css +1 -1
  15. package/build/css/pdp-main.css +1 -1
  16. package/build/css/plp-main.css +1 -1
  17. package/build/css/store-locator-main.css +1 -1
  18. package/build/img/billie-pay-later.svg +13 -0
  19. package/build/img/giftcard.svg +28 -0
  20. package/build/js/account-members.min.js +1 -1
  21. package/build/js/add-project-list-id.min.js +1 -1
  22. package/build/js/address-book.min.js +1 -1
  23. package/build/js/basket.min.js +2 -2
  24. package/build/js/bundle.min.js +1 -1
  25. package/build/js/change-password.min.js +1 -1
  26. package/build/js/checkout.min.js +2 -2
  27. package/build/js/emulation.min.js +2175 -1857
  28. package/build/js/general.bundle.min.js +1 -1
  29. package/build/js/gift-cards.min.js +1 -0
  30. package/build/js/merged-checkout.min.js +2 -2
  31. package/build/js/mini-basket-slider.min.js +1 -1
  32. package/build/js/page/basket/basket-update-cart-action.js +4 -1
  33. package/build/js/page/basket/klarna.js +13 -3
  34. package/build/js/page/basket-v2.js +11 -7
  35. package/build/js/page/components/billie-modal.js +20 -20
  36. package/build/js/page/components/gift-cards.js +927 -0
  37. package/build/js/page/components/order-summary.js +57 -28
  38. package/build/js/page/components/toggle-password-visibility.js +22 -0
  39. package/build/js/page/components/voucher.js +52 -47
  40. package/build/js/page/count-stepper/pdp-count-stepper.js +29 -0
  41. package/build/js/page/filters/plp-filters-mobile.js +4 -7
  42. package/build/js/page/filters/plp-filters-utils.js +9 -0
  43. package/build/js/page/filters/plp-filters.js +13 -5
  44. package/build/js/page/kitchen/colour-swatches.js +152 -152
  45. package/build/js/page/quick-filter.js +106 -103
  46. package/build/js/page/share-project-list.js +151 -33
  47. package/build/js/page/utils/create-count-stepper.js +141 -0
  48. package/build/js/page/utils/gift-cards-utils.js +242 -0
  49. package/build/js/page/utils/input-handling.js +104 -0
  50. package/build/js/page/utils/show-hide-input.js +31 -0
  51. package/build/js/page/utils/validation.js +146 -96
  52. package/build/js/pdp-count-stepper.min.js +1 -0
  53. package/build/js/pdp.bundle.min.js +1 -1
  54. package/build/js/personal-details.min.js +1 -1
  55. package/build/js/plp-filters.min.js +2 -2
  56. package/build/js/plp.bundle.min.js +1 -1
  57. package/build/js/project-list.min.js +57 -14
  58. package/build/js/quiz.min.js +1 -1
  59. package/build/js/share-project-list.min.js +1 -1
  60. package/build/js/track-my-order.min.js +1 -1
  61. package/package.json +3 -3
  62. package/src/components/card_product_v2.hbs +6 -1
  63. package/src/components/checkout-payment-details-v2.hbs +4 -3
  64. package/src/components/gift-cards-hint.hbs +9 -0
  65. package/src/components/gift-cards.hbs +90 -0
  66. package/src/components/giftcard-chip.hbs +23 -0
  67. package/src/components/giftcard-summary.hbs +6 -0
  68. package/src/components/home-movers/form.hbs +1 -1
  69. package/src/components/price-block-v2.hbs +17 -16
  70. package/src/data/data_search-results_v2.json +2 -1
  71. package/src/elements/count-button.hbs +10 -0
  72. package/src/elements/form-row.hbs +1 -1
  73. package/src/elements/input.hbs +31 -2
  74. package/src/img/billie-pay-later.svg +13 -0
  75. package/src/img/giftcard.svg +28 -0
  76. package/src/js/components/general/notification.js +60 -40
  77. package/src/js/components/general/switchVat.js +151 -154
  78. package/src/js/components/pdp-billie-modal-scroll-reset.js +46 -42
  79. package/src/js/emulation/basket-data.js +2126 -2038
  80. package/src/js/emulation/billie-modal.js +6 -6
  81. package/src/js/emulation/checkLocalEnv.js +6 -5
  82. package/src/js/emulation/checkout-data.js +33 -0
  83. package/src/js/emulation/checkout-payment-details.js +23 -21
  84. package/src/js/emulation/forms.js +9 -2
  85. package/src/js/emulation/gift-cards.js +216 -0
  86. package/src/js/emulation/mock.js +98 -21
  87. package/src/js/emulation/plp-load-more.js +19 -13
  88. package/src/js/emulation/validity-emulation.js +33 -0
  89. package/src/js/page/basket/basket-update-cart-action.js +4 -1
  90. package/src/js/page/basket/klarna.js +13 -3
  91. package/src/js/page/basket-v2.js +11 -7
  92. package/src/js/page/components/billie-modal.js +20 -20
  93. package/src/js/page/components/gift-cards.js +927 -0
  94. package/src/js/page/components/order-summary.js +57 -28
  95. package/src/js/page/components/toggle-password-visibility.js +22 -0
  96. package/src/js/page/components/voucher.js +52 -47
  97. package/src/js/page/count-stepper/pdp-count-stepper.js +29 -0
  98. package/src/js/page/filters/plp-filters-mobile.js +4 -7
  99. package/src/js/page/filters/plp-filters-utils.js +9 -0
  100. package/src/js/page/filters/plp-filters.js +13 -5
  101. package/src/js/page/kitchen/colour-swatches.js +152 -152
  102. package/src/js/page/quick-filter.js +106 -103
  103. package/src/js/page/share-project-list.js +151 -33
  104. package/src/js/page/utils/create-count-stepper.js +141 -0
  105. package/src/js/page/utils/gift-cards-utils.js +242 -0
  106. package/src/js/page/utils/input-handling.js +104 -0
  107. package/src/js/page/utils/show-hide-input.js +31 -0
  108. package/src/js/page/utils/validation.js +146 -96
  109. package/src/layouts/checkout.hbs +1 -5
  110. package/src/page_my-account_change-password.html +1 -0
  111. package/src/page_payment-details-with-gift-card.html +8 -5
  112. package/src/page_plp-with-paint.html +1 -1
  113. package/src/page_plp_v2-energy-efficiency.html +1 -1
  114. package/src/page_plp_v2-favourite-products.html +1 -1
  115. package/src/page_plp_v2-vat.html +31 -26
  116. package/src/page_plp_v2.html +1 -1
  117. package/src/page_product-details-cnc-success-notification-vat.html +3 -2
  118. package/src/page_product_search-vat.html +1 -1
  119. package/src/page_product_search.html +1 -1
  120. package/src/page_search-results.html +1 -1
  121. package/src/partials/scripts.hbs +4 -0
  122. package/src/scss/components/_custom-slider.scss +7 -6
  123. package/src/scss/components/_gift-cards.scss +359 -0
  124. package/src/scss/components/_input-counter.scss +65 -0
  125. package/src/scss/components/_quick-filter.scss +32 -10
  126. package/src/scss/components/checkout-payment-details-v2.scss +6 -2
  127. package/src/scss/components/kitchen/_price-tooltip.scss +3 -2
  128. package/src/scss/components/kitchen/_price.scss +2 -2
  129. package/src/scss/helpers/_variables.scss +7 -16
  130. package/src/scss/pages/page_checkout_delivery-new.scss +30 -6
  131. package/src/scss/pages/page_products-list-combined.scss +34 -2
  132. package/src/scss/pdp-main.scss +1 -0
  133. package/build/js/page/plp-img-v2.js +0 -25
  134. package/src/components/.DS_Store +0 -0
  135. package/src/img/.DS_Store +0 -0
  136. package/src/img/placeholders/.DS_Store +0 -0
  137. package/src/js/.DS_Store +0 -0
  138. package/src/js/components/share-project-list.js +0 -56
  139. package/src/js/components/toggle-password-visibility.js +0 -58
  140. package/src/js/page/.DS_Store +0 -0
  141. package/src/js/page/plp-img-v2.js +0 -25
  142. package/src/scss/.DS_Store +0 -0
  143. package/src/scss/pages/.DS_Store +0 -0
@@ -0,0 +1,31 @@
1
+ export function initializeInputToggle($container) {
2
+ const $input = $container.find('input');
3
+ const $toggle = $container.find('.toggle-show');
4
+
5
+ if (!$input.length || !$toggle.length) return;
6
+
7
+ const handleToggleClick = (e) => {
8
+ e.preventDefault();
9
+
10
+ const isPassword = String($input.attr('type')) === 'password';
11
+ $input.attr('type', isPassword ? 'text' : 'password');
12
+ const $icon = $toggle.find('svg, i').first();
13
+
14
+ if ($icon.length) {
15
+ $icon
16
+ .removeClass('fa-eye fa-eye-slash')
17
+ .addClass(isPassword ? 'fa-eye' : 'fa-eye-slash');
18
+ }
19
+ };
20
+
21
+ const updateToggleVisibility = () => {
22
+ $toggle.toggle(($input.val() || '').length > 0);
23
+ };
24
+
25
+ $toggle
26
+ .off('click.passwordToggle mousedown.passwordToggle')
27
+ .on('mousedown.passwordToggle', handleToggleClick);
28
+
29
+ $input.off('input.passwordToggle').on('input.passwordToggle', updateToggleVisibility);
30
+ updateToggleVisibility();
31
+ }
@@ -1,97 +1,91 @@
1
1
  const validationEl = {
2
- idsOfInputsWithNoNeedToUpdateDuringTyping: ['address-lookup-query', 'modal-address-lookup-query']
3
- }
2
+ idsOfInputsWithNoNeedToUpdateDuringTyping: [
3
+ 'address-lookup-query',
4
+ 'modal-address-lookup-query',
5
+ ],
6
+ };
4
7
 
5
8
  const formElements = {
6
9
  formInvalid: 'form_invalid',
7
10
  fieldRow: '.form-row[data-row-required]',
8
11
  rowValidationError: 'form-row_validation-error',
9
- }
12
+ };
10
13
 
11
14
  const patterns = {
12
15
  guidPattern: /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i,
13
16
  userFriendlyIdPattern: /^[A-Za-z]{2,3}\d{6}$/,
14
- }
17
+ };
15
18
 
16
19
  export function addFieldValidation(fieldSelector, validationFunction) {
17
- $(fieldSelector).each(function(index, element) {
18
- $(element).blur(function() {
20
+ $(fieldSelector).each(function (index, element) {
21
+ $(element).blur(function () {
19
22
  updateInputValueBeforeValidation(this);
20
- validationFunction(this);
21
- if (!validationEl.idsOfInputsWithNoNeedToUpdateDuringTyping.includes(element.id)) {
22
- $(this).keyup(function() {
23
+ validationFunction(this);
24
+ if (!validationEl.idsOfInputsWithNoNeedToUpdateDuringTyping.includes(element.id)) {
25
+ $(this).keyup(function () {
23
26
  updateInputValueBeforeValidation(this);
24
27
  validationFunction(this);
25
28
  });
26
- }
29
+ }
27
30
  });
28
31
  });
29
32
  }
30
33
 
31
- export function updateInputValueBeforeValidation (element) {
34
+ export function updateInputValueBeforeValidation(element) {
32
35
  $(element).val($.trim($(element).val()));
33
36
  }
34
37
 
35
38
  export function validateEmail(element) {
36
- updateStylingError(element.id,
37
- isValidEmail(element.value),
38
- invalidEmailAddress);
39
- }
40
-
41
- export function isValidEmail (value) {
42
- const ipAddressPattern = "(?:(?:25[0-5]|2[0-4][\\d]|[01]?[\\d][\\d]?)\\.){3}(?:25[0-5]|2[0-4][\\d]|[01]?[\\d][\\d]?)",
43
- emailPattern = new RegExp("^(?=.{1,64}@)[\\w\\+-]+(\\.[\\w\\+-]+)*@(([A-Za-z\\d]+[A-Za-z\\d-]*\\.){1,3}[A-Za-z]{2,16}|" + ipAddressPattern + ")$"),
44
- charactersLimit = 254,
45
- isCharactersLimitReached = value.length <= charactersLimit;
39
+ updateStylingError(element.id, isValidEmail(element.value), invalidEmailAddress);
40
+ }
41
+
42
+ export function isValidEmail(value) {
43
+ const ipAddressPattern =
44
+ '(?:(?:25[0-5]|2[0-4][\\d]|[01]?[\\d][\\d]?)\\.){3}(?:25[0-5]|2[0-4][\\d]|[01]?[\\d][\\d]?)',
45
+ emailPattern = new RegExp(
46
+ '^(?=.{1,64}@)[\\w\\+-]+(\\.[\\w\\+-]+)*@(([A-Za-z\\d]+[A-Za-z\\d-]*\\.){1,3}[A-Za-z]{2,16}|' +
47
+ ipAddressPattern +
48
+ ')$'
49
+ ),
50
+ charactersLimit = 254,
51
+ isCharactersLimitReached = value.length <= charactersLimit;
46
52
  return emailPattern.test(value) && isCharactersLimitReached;
47
53
  }
48
54
 
49
- export function validatePassword (element) {
50
- updateStylingError(element.id,
51
- isValidPassword(element.value),
52
- invalidPassword);
55
+ export function validatePassword(element) {
56
+ updateStylingError(element.id, isValidPassword(element.value), invalidPassword);
53
57
  }
54
58
 
55
- export function isValidPassword (value) {
59
+ export function isValidPassword(value) {
56
60
  return value.length > 0;
57
61
  }
58
62
 
59
- export function validateTitle (element) {
60
- updateStylingError(element.id,
61
- isValidTitle(element.value),
62
- invalidTitle);
63
+ export function validateTitle(element) {
64
+ updateStylingError(element.id, isValidTitle(element.value), invalidTitle);
63
65
  }
64
66
 
65
- export function isValidTitle (value) {
67
+ export function isValidTitle(value) {
66
68
  return value.length > 0;
67
69
  }
68
70
 
69
- export function isValidOrderNumber (value) {
71
+ export function isValidOrderNumber(value) {
70
72
  return value.length >= 9;
71
73
  }
72
74
 
73
- export function validateFirstName (element) {
74
- updateStylingError(element.id,
75
- isValidInputTextField(element.value),
76
- invalidFirstName);
75
+ export function validateFirstName(element) {
76
+ updateStylingError(element.id, isValidInputTextField(element.value), invalidFirstName);
77
77
  }
78
78
 
79
- export function validateLastName (element) {
80
- updateStylingError(element.id,
81
- isValidInputTextField(element.value),
82
- invalidLastName);
79
+ export function validateLastName(element) {
80
+ updateStylingError(element.id, isValidInputTextField(element.value), invalidLastName);
83
81
  }
84
82
 
85
- export function validateAddress1 (element) {
86
- updateStylingError(element.id,
87
- isValidInputTextField(element.value),
88
- invalidAddressOne);
83
+ export function validateAddress1(element) {
84
+ updateStylingError(element.id, isValidInputTextField(element.value), invalidAddressOne);
89
85
  }
90
86
 
91
87
  export function validateCity(element) {
92
- updateStylingError(element.id,
93
- isValidInputTextField(element.value),
94
- invalidTownCity);
88
+ updateStylingError(element.id, isValidInputTextField(element.value), invalidTownCity);
95
89
  }
96
90
 
97
91
  export function isValidFieldSize(value) {
@@ -107,23 +101,27 @@ export function isValidInputTextField(value) {
107
101
  return isValidFieldSize(value) && regExp.test(value);
108
102
  }
109
103
 
110
- export function validateMobile (element, allowEmptyValue) {
111
- updateStylingError(element.id,
104
+ export function validateMobile(element, allowEmptyValue) {
105
+ updateStylingError(
106
+ element.id,
112
107
  isValidPhoneNumber(element.value, allowEmptyValue),
113
- invalidMobile);
108
+ invalidMobile
109
+ );
114
110
  }
115
111
 
116
112
  export function validatePhone(element) {
117
- updateStylingError(element.id,
118
- isValidPhoneNumber(element.value, true),
119
- invalidTelephone);
113
+ updateStylingError(element.id, isValidPhoneNumber(element.value, true), invalidTelephone);
120
114
  }
121
115
 
122
- export function isValidPhoneNumber(value, allowEmptyValue) {
123
- value = value.replace(/\s+/g, "");
116
+ export function isValidPhoneNumber(value, allowEmptyValue) {
117
+ value = value.replace(/\s+/g, '');
124
118
 
125
- var phonePatterElevenDigit = new RegExp("^0{1}\\d{10}$|^0{1}\\d{5}\\s{1}\\d{5}$|^0{1}\\d{4}\\s{1}\\d{6}$|^0{1}\\d{3}\\s{1}\\d{3}\\s{1}\\d{4}$|^0{1}\\d{2}\\s{1}\\d{4}\\s{1}\\d{4}$|^0{1}\\d{3}\\s{1}\\d{7}$");
126
- var phonePatternTenDigit = new RegExp("^0{1}\\d{9}$|^0{1}\\d{5}\\s{1}\\d{4}$|^0{1}\\d{4}\\s{1}\\d{5}$");
119
+ var phonePatterElevenDigit = new RegExp(
120
+ '^0{1}\\d{10}$|^0{1}\\d{5}\\s{1}\\d{5}$|^0{1}\\d{4}\\s{1}\\d{6}$|^0{1}\\d{3}\\s{1}\\d{3}\\s{1}\\d{4}$|^0{1}\\d{2}\\s{1}\\d{4}\\s{1}\\d{4}$|^0{1}\\d{3}\\s{1}\\d{7}$'
121
+ );
122
+ var phonePatternTenDigit = new RegExp(
123
+ '^0{1}\\d{9}$|^0{1}\\d{5}\\s{1}\\d{4}$|^0{1}\\d{4}\\s{1}\\d{5}$'
124
+ );
127
125
  var result = phonePatterElevenDigit.test(value) || phonePatternTenDigit.test(value);
128
126
 
129
127
  if (allowEmptyValue) {
@@ -137,22 +135,26 @@ export function validatePostcode(element, ifConvert) {
137
135
  var elementValue = element.value;
138
136
  var isValid = isValidPostcodeField(elementValue);
139
137
  if (ifConvert && isValid) {
140
- elementValue = elementValue.replace(/\s/g, "");
141
- $('#' + $.escapeSelector(element.id))
142
- .val(elementValue.substr(0, elementValue.length-3) + " " + elementValue.substr(elementValue.length-3));
138
+ elementValue = elementValue.replace(/\s/g, '');
139
+ $('#' + $.escapeSelector(element.id)).val(
140
+ elementValue.substr(0, elementValue.length - 3) +
141
+ ' ' +
142
+ elementValue.substr(elementValue.length - 3)
143
+ );
143
144
  }
144
145
  updateStylingError(element.id, isValid, invalidPostCode);
145
146
  }
146
147
 
147
148
  export function isValidPostcodeField(value) {
148
149
  const transformedValue = value.toUpperCase().replaceAll(' ', '');
149
- const regExp = new RegExp("^(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})$");
150
- return transformedValue.replace(/\s+/g, "").length > 4 && regExp.test(transformedValue);
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})$'
152
+ );
153
+ return transformedValue.replace(/\s+/g, '').length > 4 && regExp.test(transformedValue);
151
154
  }
152
155
 
153
156
  export function validateHouseName(element) {
154
157
  updateStylingError(element.id, isValidHouseName(element.value));
155
-
156
158
  }
157
159
 
158
160
  export function isValidHouseName(value) {
@@ -161,30 +163,24 @@ export function isValidHouseName(value) {
161
163
  }
162
164
 
163
165
  export function validateAddressSelection(element) {
164
- updateStylingError(element.id,
165
- isValidAddressSelection(element),
166
- selectAddressMessage);
166
+ updateStylingError(element.id, isValidAddressSelection(element), selectAddressMessage);
167
167
  }
168
168
 
169
169
  export function isValidAddressSelection(element) {
170
- return !$('#' + $.escapeSelector(element.id)).is(":visible");
170
+ return !$('#' + $.escapeSelector(element.id)).is(':visible');
171
171
  }
172
172
 
173
173
  export function validateAddress2(element) {
174
- updateStylingError(element.id,
175
- isValidAddress2(element.value),
176
- invalidAddressTwo);
174
+ updateStylingError(element.id, isValidAddress2(element.value), invalidAddressTwo);
177
175
  }
178
176
 
179
177
  export function isValidAddress2(value) {
180
178
  var regExp = new RegExp("^[\\w ().,'-]+$|^$");
181
- return value.length === 0 || regExp.test( value);
179
+ return value.length === 0 || regExp.test(value);
182
180
  }
183
181
 
184
182
  export function validateVoucher(element) {
185
- updateStylingErrorForElement(element,
186
- isValidVoucher(element.value),
187
- invalidVoucherCode);
183
+ updateStylingErrorForElement(element, isValidVoucher(element.value), invalidVoucherCode);
188
184
  }
189
185
 
190
186
  export function isValidVoucher(value) {
@@ -198,9 +194,9 @@ export function validateNameOnCard(element) {
198
194
  if (fieldSizeIsValid) {
199
195
  if (element.value.length > nameOnCardMaxLength) {
200
196
  updateStylingError(element.id, false, invalidNameOnCardLength);
201
- } else if(isNameOnCardContainsOnly16Digits(element.value)) {
197
+ } else if (isNameOnCardContainsOnly16Digits(element.value)) {
202
198
  updateStylingError(element.id, false, invalidCustomNameOnCard);
203
- } else if(isNameOnCardContainsAtLeast14Digits(element.value)) {
199
+ } else if (isNameOnCardContainsAtLeast14Digits(element.value)) {
204
200
  updateStylingError(element.id, false, validationWarnNameOnCard);
205
201
  }
206
202
  } else {
@@ -208,21 +204,18 @@ export function validateNameOnCard(element) {
208
204
  }
209
205
  }
210
206
 
211
-
212
207
  export function isNameOnCardContainsOnly16Digits(value) {
213
- var regExp = new RegExp("^\\d{16}$");
208
+ var regExp = new RegExp('^\\d{16}$');
214
209
  return regExp.test(value);
215
210
  }
216
211
 
217
212
  export function isNameOnCardContainsAtLeast14Digits(value) {
218
- var regExp = new RegExp("^(.*\\d){14,}.*$");
213
+ var regExp = new RegExp('^(.*\\d){14,}.*$');
219
214
  return regExp.test(value);
220
215
  }
221
216
 
222
217
  export function validateStoreId(element) {
223
- updateStylingError(element.id,
224
- isValidStoreId(element.value),
225
- invalidStoreId);
218
+ updateStylingError(element.id, isValidStoreId(element.value), invalidStoreId);
226
219
  }
227
220
 
228
221
  export function isValidStoreId(value) {
@@ -236,13 +229,13 @@ export function updateStylingError(elementId, isValid, errorMessage) {
236
229
 
237
230
  export function updateStylingErrorForElement(element, isValid, errorMessage) {
238
231
  var parentElem = $(element).closest('.form-row');
239
- if (!parentElem.is(":visible")) {
232
+ if (!parentElem.is(':visible')) {
240
233
  return;
241
234
  }
242
235
  removeErrorStyling(parentElem);
243
236
  if (!isValid) {
244
- wrapWithError(parentElem);
245
- addErrorMessage(parentElem, errorMessage);
237
+ wrapWithError(parentElem);
238
+ addErrorMessage(parentElem, errorMessage);
246
239
  }
247
240
  }
248
241
 
@@ -251,13 +244,10 @@ export function removeErrorStyling(element) {
251
244
  element.find('.form-row__error').remove();
252
245
  }
253
246
 
254
-
255
247
  export function wrapWithError(element) {
256
248
  $(element).addClass('form-row_validation-error');
257
-
258
249
  }
259
250
 
260
-
261
251
  export function addErrorMessage(element, errorMessage) {
262
252
  if (errorMessage) {
263
253
  $(element).append('<div class="form-row__error">' + errorMessage + '</div>');
@@ -268,7 +258,11 @@ export function showValidationErrors(form, errorMsg) {
268
258
  var $form = $(form);
269
259
  if (!$form.hasClass(formElements.formInvalid)) {
270
260
  $form.find('.form-row__error').remove();
271
- $form.addClass(formElements.formInvalid).find(formElements.fieldRow).append(validationError(errorMsg)).addClass(formElements.rowValidationError);
261
+ $form
262
+ .addClass(formElements.formInvalid)
263
+ .find(formElements.fieldRow)
264
+ .append(validationError(errorMsg))
265
+ .addClass(formElements.rowValidationError);
272
266
  } else {
273
267
  $form.find(formElements.fieldRow).find('.form-row__error').text(errorMsg);
274
268
  }
@@ -279,7 +273,7 @@ export function showValidationErrors(form, errorMsg) {
279
273
  $scrollableEl = inModal ? $firstMsg.closest('.modal') : $('html, body'),
280
274
  y = inModal ? 0 : $firstMsg.offset().top - 30;
281
275
 
282
- $scrollableEl.animate({scrollTop: y}, 300);
276
+ $scrollableEl.animate({ scrollTop: y }, 300);
283
277
  }
284
278
  }
285
279
 
@@ -297,22 +291,78 @@ function isElementInViewport(el) {
297
291
  }
298
292
 
299
293
  function validationError(errorMsg) {
300
- return `<div class="form-row__error"> ${errorMsg || 'Error message here'}</div>`
294
+ return `<div class="form-row__error"> ${errorMsg || 'Error message here'}</div>`;
301
295
  }
302
296
 
303
297
  export function clearValidationErrors(form) {
304
298
  const $form = $(form);
305
299
  if ($form.hasClass('form_invalid')) {
306
- $form.removeClass('form_invalid')
307
- .find('.form-row[data-row-required]').removeClass('form-row_validation-error')
308
- .find('.form-row__error').remove();
300
+ $form
301
+ .removeClass('form_invalid')
302
+ .find('.form-row[data-row-required]')
303
+ .removeClass('form-row_validation-error')
304
+ .find('.form-row__error')
305
+ .remove();
309
306
  }
310
307
  }
311
308
 
312
- export function validateGuidPattern (value) {
309
+ export function validateGuidPattern(value) {
313
310
  return patterns.guidPattern.test(value);
314
311
  }
315
312
 
316
- export function validateUserFriendlyIdPattern (value) {
313
+ export function validateUserFriendlyIdPattern(value) {
317
314
  return patterns.userFriendlyIdPattern.test(value);
318
315
  }
316
+
317
+ export function showErrorText(
318
+ $input,
319
+ message,
320
+ fieldSelector,
321
+ errorTextClass,
322
+ errorClass,
323
+ ariaInvalidAttr
324
+ ) {
325
+ const $field = $input.closest(fieldSelector);
326
+ $field.addClass(errorClass);
327
+ $input.attr(ariaInvalidAttr, 'true');
328
+
329
+ let $err = $field.find(errorTextClass);
330
+ if (!$err.length) {
331
+ $err = $(`<div class="${errorTextClass.slice(1)}" />`).appendTo($field);
332
+ }
333
+ $err.text(message);
334
+ }
335
+
336
+ export function clearErrorText($input, fieldSelector, errorTextClass, errorClass, ariaInvalidAttr) {
337
+ const $field = $input.closest(fieldSelector);
338
+ $field.removeClass(errorClass);
339
+ $input.removeAttr(ariaInvalidAttr);
340
+ $field.find(errorTextClass).remove();
341
+ }
342
+
343
+ function digitsOnly(value) {
344
+ return String(value || '').replace(/\D/g, '');
345
+ }
346
+
347
+ function hasExactDigits(value, n) {
348
+ return digitsOnly(value).length === Number(n);
349
+ }
350
+
351
+ function validateByPredicate(
352
+ $input,
353
+ predicate,
354
+ message,
355
+ { fieldSelector, errorText: errorTextClass, fieldError: errorClass, ariaInvalidAttr }
356
+ ) {
357
+ const ok = !!predicate(String($input.val() || ''));
358
+ if (!ok) {
359
+ showErrorText($input, message, fieldSelector, errorTextClass, errorClass, ariaInvalidAttr);
360
+ } else {
361
+ clearErrorText($input, fieldSelector, errorTextClass, errorClass, ariaInvalidAttr);
362
+ }
363
+ return ok;
364
+ }
365
+
366
+ export function validateExactDigits($input, n, message, cfg) {
367
+ return validateByPredicate($input, (v) => hasExactDigits(v, n), message, cfg);
368
+ }
@@ -0,0 +1 @@
1
+ !function r(o,a,i){function l(t,e){if(!a[t]){if(!o[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(s)return s(t,!0);throw(e=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",e}n=a[t]={exports:{}},o[t][0].call(n.exports,function(e){return l(o[t][1][e]||e)},n,n.exports,r,o,a,i)}return a[t].exports}for(var s="function"==typeof require&&require,e=0;e<i.length;e++)l(i[e]);return l}({1:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}n.__esModule=!0;var a=o(e("./handlebars/base")),i=r(e("./handlebars/safe-string")),l=r(e("./handlebars/exception")),s=o(e("./handlebars/utils")),u=o(e("./handlebars/runtime")),e=r(e("./handlebars/no-conflict"));function c(){var t=new a.HandlebarsEnvironment;return s.extend(t,a),t.SafeString=i.default,t.Exception=l.default,t.Utils=s,t.escapeExpression=s.escapeExpression,t.VM=u,t.template=function(e){return u.template(e,t)},t}var p=c();p.create=c,e.default(p),p.default=p,n.default=p,t.exports=n.default},{"./handlebars/base":2,"./handlebars/exception":5,"./handlebars/no-conflict":18,"./handlebars/runtime":19,"./handlebars/safe-string":20,"./handlebars/utils":21}],2:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}n.__esModule=!0,n.HandlebarsEnvironment=p;var o=e("./utils"),a=r(e("./exception")),i=e("./helpers"),l=e("./decorators"),s=r(e("./logger")),u=e("./internal/proto-access"),c=(n.VERSION="4.7.8",n.COMPILER_REVISION=8,n.LAST_COMPATIBLE_COMPILER_REVISION=7,n.REVISION_CHANGES={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"},"[object Object]");function p(e,t,n){this.helpers=e||{},this.partials=t||{},this.decorators=n||{},i.registerDefaultHelpers(this),l.registerDefaultDecorators(this)}p.prototype={constructor:p,logger:s.default,log:s.default.log,registerHelper:function(e,t){if(o.toString.call(e)===c){if(t)throw new a.default("Arg not supported with multiple helpers");o.extend(this.helpers,e)}else this.helpers[e]=t},unregisterHelper:function(e){delete this.helpers[e]},registerPartial:function(e,t){if(o.toString.call(e)===c)o.extend(this.partials,e);else{if(void 0===t)throw new a.default('Attempting to register a partial called "'+e+'" as undefined');this.partials[e]=t}},unregisterPartial:function(e){delete this.partials[e]},registerDecorator:function(e,t){if(o.toString.call(e)===c){if(t)throw new a.default("Arg not supported with multiple decorators");o.extend(this.decorators,e)}else this.decorators[e]=t},unregisterDecorator:function(e){delete this.decorators[e]},resetLoggedPropertyAccesses:function(){u.resetLoggedProperties()}};e=s.default.log;n.log=e,n.createFrame=o.createFrame,n.logger=s.default},{"./decorators":3,"./exception":5,"./helpers":6,"./internal/proto-access":15,"./logger":17,"./utils":21}],3:[function(e,t,n){"use strict";n.__esModule=!0,n.registerDefaultDecorators=function(e){r.default(e)};var n=e("./decorators/inline"),r=(e=n)&&e.__esModule?e:{default:e}},{"./decorators/inline":4}],4:[function(e,t,n){"use strict";n.__esModule=!0;var i=e("../utils");n.default=function(e){e.registerDecorator("inline",function(r,o,a,e){var t=r;return o.partials||(o.partials={},t=function(e,t){var n=a.partials,e=(a.partials=i.extend({},n,o.partials),r(e,t));return a.partials=n,e}),o.partials[e.args[0]]=e.fn,t})},t.exports=n.default},{"../utils":21}],5:[function(e,t,n){"use strict";n.__esModule=!0;var s=["description","fileName","lineNumber","endLineNumber","message","name","number","stack"];function u(e,t){for(var t=t&&t.loc,n=void 0,r=void 0,o=void 0,a=void 0,i=(t&&(n=t.start.line,r=t.end.line,o=t.start.column,a=t.end.column,e+=" - "+n+":"+o),Error.prototype.constructor.call(this,e)),l=0;l<s.length;l++)this[s[l]]=i[s[l]];Error.captureStackTrace&&Error.captureStackTrace(this,u);try{t&&(this.lineNumber=n,this.endLineNumber=r,Object.defineProperty?(Object.defineProperty(this,"column",{value:o,enumerable:!0}),Object.defineProperty(this,"endColumn",{value:a,enumerable:!0})):(this.column=o,this.endColumn=a))}catch(e){}}u.prototype=new Error,n.default=u,t.exports=n.default},{}],6:[function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}n.__esModule=!0,n.registerDefaultHelpers=function(e){o.default(e),a.default(e),i.default(e),l.default(e),s.default(e),u.default(e),c.default(e)},n.moveHelperToHooks=function(e,t,n){e.helpers[t]&&(e.hooks[t]=e.helpers[t],n||delete e.helpers[t])};var o=r(e("./helpers/block-helper-missing")),a=r(e("./helpers/each")),i=r(e("./helpers/helper-missing")),l=r(e("./helpers/if")),s=r(e("./helpers/log")),u=r(e("./helpers/lookup")),c=r(e("./helpers/with"))},{"./helpers/block-helper-missing":7,"./helpers/each":8,"./helpers/helper-missing":9,"./helpers/if":10,"./helpers/log":11,"./helpers/lookup":12,"./helpers/with":13}],7:[function(e,t,n){"use strict";n.__esModule=!0;var a=e("../utils");n.default=function(o){o.registerHelper("blockHelperMissing",function(e,t){var n=t.inverse,r=t.fn;return!0===e?r(this):!1===e||null==e?n(this):a.isArray(e)?0<e.length?(t.ids&&(t.ids=[t.name]),o.helpers.each(e,t)):n(this):(t.data&&t.ids&&((n=a.createFrame(t.data)).contextPath=a.appendContextPath(t.data.contextPath,t.name),t={data:n}),r(e,t))})},t.exports=n.default},{"../utils":21}],8:[function(e,t,n){"use strict";n.__esModule=!0;var h=e("../utils"),e=e("../exception"),m=(e=e)&&e.__esModule?e:{default:e};n.default=function(e){e.registerHelper("each",function(r,e){if(!e)throw new m.default("Must pass iterator to #each");var t,o=e.fn,n=e.inverse,a=0,i="",l=void 0,s=void 0;function u(e,t,n){l&&(l.key=e,l.index=t,l.first=0===t,l.last=!!n,s)&&(l.contextPath=s+e),i+=o(r[e],{data:l,blockParams:h.blockParams([r[e],e],[s+e,null])})}if(e.data&&e.ids&&(s=h.appendContextPath(e.data.contextPath,e.ids[0])+"."),h.isFunction(r)&&(r=r.call(this)),e.data&&(l=h.createFrame(e.data)),r&&"object"==typeof r)if(h.isArray(r))for(var c=r.length;a<c;a++)a in r&&u(a,a,a===r.length-1);else if("function"==typeof Symbol&&r[Symbol.iterator]){for(var p=[],f=r[Symbol.iterator](),d=f.next();!d.done;d=f.next())p.push(d.value);for(c=(r=p).length;a<c;a++)u(a,a,a===r.length-1)}else t=void 0,Object.keys(r).forEach(function(e){void 0!==t&&u(t,a-1),t=e,a++}),void 0!==t&&u(t,a-1,!0);return i=0===a?n(this):i})},t.exports=n.default},{"../exception":5,"../utils":21}],9:[function(e,t,n){"use strict";n.__esModule=!0;var e=e("../exception"),r=(e=e)&&e.__esModule?e:{default:e};n.default=function(e){e.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new r.default('Missing helper: "'+arguments[arguments.length-1].name+'"')})},t.exports=n.default},{"../exception":5}],10:[function(e,t,n){"use strict";n.__esModule=!0;var r=e("../utils"),e=e("../exception"),o=(e=e)&&e.__esModule?e:{default:e};n.default=function(n){n.registerHelper("if",function(e,t){if(2!=arguments.length)throw new o.default("#if requires exactly one argument");return r.isFunction(e)&&(e=e.call(this)),!t.hash.includeZero&&!e||r.isEmpty(e)?t.inverse(this):t.fn(this)}),n.registerHelper("unless",function(e,t){if(2!=arguments.length)throw new o.default("#unless requires exactly one argument");return n.helpers.if.call(this,e,{fn:t.inverse,inverse:t.fn,hash:t.hash})})},t.exports=n.default},{"../exception":5,"../utils":21}],11:[function(e,t,n){"use strict";n.__esModule=!0,n.default=function(o){o.registerHelper("log",function(){for(var e=[void 0],t=arguments[arguments.length-1],n=0;n<arguments.length-1;n++)e.push(arguments[n]);var r=1;null!=t.hash.level?r=t.hash.level:t.data&&null!=t.data.level&&(r=t.data.level),e[0]=r,o.log.apply(o,e)})},t.exports=n.default},{}],12:[function(e,t,n){"use strict";n.__esModule=!0,n.default=function(e){e.registerHelper("lookup",function(e,t,n){return e&&n.lookupProperty(e,t)})},t.exports=n.default},{}],13:[function(e,t,n){"use strict";n.__esModule=!0;var o=e("../utils"),e=e("../exception"),a=(e=e)&&e.__esModule?e:{default:e};n.default=function(e){e.registerHelper("with",function(e,t){if(2!=arguments.length)throw new a.default("#with requires exactly one argument");o.isFunction(e)&&(e=e.call(this));var n,r=t.fn;return o.isEmpty(e)?t.inverse(this):(n=t.data,t.data&&t.ids&&((n=o.createFrame(t.data)).contextPath=o.appendContextPath(t.data.contextPath,t.ids[0])),r(e,{data:n,blockParams:o.blockParams([e],[n&&n.contextPath])}))})},t.exports=n.default},{"../exception":5,"../utils":21}],14:[function(e,t,n){"use strict";n.__esModule=!0,n.createNewLookupObject=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return r.extend.apply(void 0,[Object.create(null)].concat(t))};var r=e("../utils")},{"../utils":21}],15:[function(e,t,n){"use strict";n.__esModule=!0,n.createProtoAccessControl=function(e){var t=Object.create(null),n=(t.constructor=!1,t.__defineGetter__=!1,t.__defineSetter__=!1,t.__lookupGetter__=!1,Object.create(null));return n.__proto__=!1,{properties:{whitelist:r.createNewLookupObject(n,e.allowedProtoProperties),defaultValue:e.allowProtoPropertiesByDefault},methods:{whitelist:r.createNewLookupObject(t,e.allowedProtoMethods),defaultValue:e.allowProtoMethodsByDefault}}},n.resultIsAllowed=function(e,t,n){return i("function"==typeof e?t.methods:t.properties,n)},n.resetLoggedProperties=function(){Object.keys(a).forEach(function(e){delete a[e]})};var r=e("./create-new-lookup-object"),n=e("../logger"),o=(e=n)&&e.__esModule?e:{default:e},a=Object.create(null);function i(e,t){return void 0!==e.whitelist[t]?!0===e.whitelist[t]:void 0!==e.defaultValue?e.defaultValue:(!0!==a[e=t]&&(a[e]=!0,o.default.log("error",'Handlebars: Access has been denied to resolve the property "'+e+'" because it is not an "own property" of its parent.\nYou can add a runtime option to disable the check or this warning:\nSee https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details')),!1)}},{"../logger":17,"./create-new-lookup-object":14}],16:[function(e,t,n){"use strict";n.__esModule=!0,n.wrapHelper=function(t,n){if("function"!=typeof t)return t;return function(){var e=arguments[arguments.length-1];return arguments[arguments.length-1]=n(e),t.apply(this,arguments)}}},{}],17:[function(e,t,n){"use strict";n.__esModule=!0;var r=e("./utils"),o={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(e){var t;return e="string"==typeof e?0<=(t=r.indexOf(o.methodMap,e.toLowerCase()))?t:parseInt(e,10):e},log:function(e){if(e=o.lookupLevel(e),"undefined"!=typeof console&&o.lookupLevel(o.level)<=e){e=o.methodMap[e];console[e]||(e="log");for(var t=arguments.length,n=Array(1<t?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];console[e].apply(console,n)}}};n.default=o,t.exports=n.default},{"./utils":21}],18:[function(e,t,n){"use strict";n.__esModule=!0,n.default=function(e){"object"!=typeof globalThis&&(Object.prototype.__defineGetter__("__magic__",function(){return this}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__);var t=globalThis.Handlebars;e.noConflict=function(){return globalThis.Handlebars===e&&(globalThis.Handlebars=t),e}},t.exports=n.default},{}],19:[function(e,t,n){"use strict";n.__esModule=!0,n.checkRevision=function(e){var t=e&&e[0]||1,n=f.COMPILER_REVISION;if(!(t>=f.LAST_COMPATIBLE_COMPILER_REVISION&&t<=f.COMPILER_REVISION))throw t<f.LAST_COMPATIBLE_COMPILER_REVISION?(n=f.REVISION_CHANGES[n],t=f.REVISION_CHANGES[t],new p.default("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+n+") or downgrade your runtime to an older version ("+t+").")):new p.default("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+e[1]+").")},n.template=function(s,u){if(!u)throw new p.default("No environment passed to template");if(!s||!s.main)throw new p.default("Unknown template object: "+typeof s);s.main.decorator=s.main_d,u.VM.checkRevision(s.compiler);var n=s.compiler&&7===s.compiler[0];var i={strict:function(e,t,n){if(e&&t in e)return i.lookupProperty(e,t);throw new p.default('"'+t+'" not defined in '+e,{loc:n})},lookupProperty:function(e,t){var n=e[t];return null==n||Object.prototype.hasOwnProperty.call(e,t)||h.resultIsAllowed(n,i.protoAccessControl,t)?n:void 0},lookup:function(e,t){for(var n=e.length,r=0;r<n;r++)if(null!=(e[r]&&i.lookupProperty(e[r],t)))return e[r][t]},lambda:function(e,t){return"function"==typeof e?e.call(t):e},escapeExpression:c.escapeExpression,invokePartial:function(e,t,n){n.hash&&(t=c.extend({},t,n.hash),n.ids)&&(n.ids[0]=!0),e=u.VM.resolvePartial.call(this,e,t,n);var r=c.extend({},n,{hooks:this.hooks,protoAccessControl:this.protoAccessControl}),o=u.VM.invokePartial.call(this,e,t,r);if(null==o&&u.compile&&(n.partials[n.name]=u.compile(e,s.compilerOptions,u),o=n.partials[n.name](t,r)),null==o)throw new p.default("The partial "+n.name+" could not be compiled when running in runtime-only mode");if(n.indent){for(var a=o.split("\n"),i=0,l=a.length;i<l&&(a[i]||i+1!==l);i++)a[i]=n.indent+a[i];o=a.join("\n")}return o},fn:function(e){var t=s[e];return t.decorator=s[e+"_d"],t},programs:[],program:function(e,t,n,r,o){var a=this.programs[e],i=this.fn(e);return a=t||o||r||n?m(this,e,i,t,n,r,o):a||(this.programs[e]=m(this,e,i))},data:function(e,t){for(;e&&t--;)e=e._parent;return e},mergeIfNeeded:function(e,t){var n=e||t;return n=e&&t&&e!==t?c.extend({},t,e):n},nullContext:Object.seal({}),noop:u.VM.noop,compilerInfo:s.compiler};function l(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],n=t.data,r=(l._setup(t),!t.partial&&s.useData&&(n=function(e,t){t&&"root"in t||((t=t?f.createFrame(t):{}).root=e);return t}(e,n)),void 0),o=s.useBlockParams?[]:void 0;function a(e){return""+s.main(i,e,i.helpers,i.partials,n,o,r)}return s.useDepths&&(r=t.depths?e!=t.depths[0]?[e].concat(t.depths):t.depths:[e]),(a=g(s.main,a,i,t.depths||[],n,o))(e,t)}return l.isTop=!0,l._setup=function(e){var t,r,o;e.partial?(i.protoAccessControl=e.protoAccessControl,i.helpers=e.helpers,i.partials=e.partials,i.decorators=e.decorators,i.hooks=e.hooks):(t=c.extend({},u.helpers,e.helpers),r=t,o=i,Object.keys(r).forEach(function(e){var t,n=r[e];r[e]=(t=o.lookupProperty,d.wrapHelper(n,function(e){return c.extend({lookupProperty:t},e)}))}),i.helpers=t,s.usePartial&&(i.partials=i.mergeIfNeeded(e.partials,u.partials)),(s.usePartial||s.useDecorators)&&(i.decorators=c.extend({},u.decorators,e.decorators)),i.hooks={},i.protoAccessControl=h.createProtoAccessControl(e),t=e.allowCallsToHelperMissing||n,a.moveHelperToHooks(i,"helperMissing",t),a.moveHelperToHooks(i,"blockHelperMissing",t))},l._child=function(e,t,n,r){if(s.useBlockParams&&!n)throw new p.default("must pass block params");if(s.useDepths&&!r)throw new p.default("must pass parent depths");return m(i,e,s[e],t,0,n,r)},l},n.wrapProgram=m,n.resolvePartial=function(e,t,n){e?e.call||n.name||(n.name=e,e=n.partials[e]):e="@partial-block"===n.name?n.data["partial-block"]:n.partials[n.name];return e},n.invokePartial=function(e,t,r){var o=r.data&&r.data["partial-block"];r.partial=!0,r.ids&&(r.data.contextPath=r.ids[0]||r.data.contextPath);var a=void 0;r.fn&&r.fn!==i&&!function(){r.data=f.createFrame(r.data);var n=r.fn;a=r.data["partial-block"]=function(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return t.data=f.createFrame(t.data),t.data["partial-block"]=o,n(e,t)},n.partials&&(r.partials=c.extend({},r.partials,n.partials))}();void 0===e&&a&&(e=a);{if(void 0===e)throw new p.default("The partial "+r.name+" could not be found");if(e instanceof Function)return e(t,r)}},n.noop=i;var c=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(e("./utils")),n=e("./exception"),p=(n=n)&&n.__esModule?n:{default:n},f=e("./base"),a=e("./helpers"),d=e("./internal/wrapHelper"),h=e("./internal/proto-access");function m(r,e,o,a,t,i,l){function n(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],n=l;return!l||e==l[0]||e===r.nullContext&&null===l[0]||(n=[e].concat(l)),o(r,e,r.helpers,r.partials,t.data||a,i&&[t.blockParams].concat(i),n)}return(n=g(o,n,r,l,a,i)).program=e,n.depth=l?l.length:0,n.blockParams=t||0,n}function i(){return""}function g(e,t,n,r,o,a){return e.decorator&&(t=e.decorator(t,e={},n,r&&r[0],o,a,r),c.extend(t,e)),t}},{"./base":2,"./exception":5,"./helpers":6,"./internal/proto-access":15,"./internal/wrapHelper":16,"./utils":21}],20:[function(e,t,n){"use strict";function r(e){this.string=e}n.__esModule=!0,r.prototype.toString=r.prototype.toHTML=function(){return""+this.string},n.default=r,t.exports=n.default},{}],21:[function(e,t,n){"use strict";n.__esModule=!0,n.extend=l,n.indexOf=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},n.escapeExpression=function(e){if("string"!=typeof e){if(e&&e.toHTML)return e.toHTML();if(null==e)return"";if(!e)return e+"";e=""+e}return a.test(e)?e.replace(o,i):e},n.isEmpty=function(e){return!e&&0!==e||!(!c(e)||0!==e.length)},n.createFrame=function(e){var t=l({},e);return t._parent=e,t},n.blockParams=function(e,t){return e.path=t,e},n.appendContextPath=function(e,t){return(e?e+".":"")+t};var r={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},o=/[&<>"'`=]/g,a=/[&<>"'`=]/;function i(e){return r[e]}function l(e){for(var t=1;t<arguments.length;t++)for(var n in arguments[t])Object.prototype.hasOwnProperty.call(arguments[t],n)&&(e[n]=arguments[t][n]);return e}var s=Object.prototype.toString,u=(n.toString=s,function(e){return"function"==typeof e}),c=(u(/x/)&&(n.isFunction=u=function(e){return"function"==typeof e&&"[object Function]"===s.call(e)}),n.isFunction=u,Array.isArray||function(e){return!(!e||"object"!=typeof e)&&"[object Array]"===s.call(e)});n.isArray=c},{}],22:[function(e,t,n){t.exports=e("./dist/cjs/handlebars.runtime").default},{"./dist/cjs/handlebars.runtime":1}],23:[function(e,t,n){t.exports=e("handlebars/runtime").default},{"handlebars/runtime":22}],24:[function(e,t,n){e=e("hbsfy/runtime");t.exports=e.template({1:function(e,t,n,r,o){return"disabled"},compiler:[8,">= 4.3.0"],main:function(e,t,n,r,o){var a,i=null!=t?t:e.nullContext||{},l=e.hooks.helperMissing,s="function",u=e.escapeExpression,c=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<button\n type="button"\n class="count-btn count-btn--'+u(typeof(a=null!=(a=c(n,"type")||(null!=t?c(t,"type"):t))?a:l)==s?a.call(i,{name:"type",hash:{},data:o,loc:{start:{line:3,column:32},end:{line:3,column:40}}}):a)+" "+u(typeof(a=null!=(a=c(n,"class")||(null!=t?c(t,"class"):t))?a:l)==s?a.call(i,{name:"class",hash:{},data:o,loc:{start:{line:3,column:41},end:{line:3,column:50}}}):a)+'"\n aria-label="'+u(typeof(a=null!=(a=c(n,"ariaLabel")||(null!=t?c(t,"ariaLabel"):t))?a:l)==s?a.call(i,{name:"ariaLabel",hash:{},data:o,loc:{start:{line:4,column:16},end:{line:4,column:29}}}):a)+'"\n data-count-btn\n data-count-type="'+u(typeof(a=null!=(a=c(n,"type")||(null!=t?c(t,"type"):t))?a:l)==s?a.call(i,{name:"type",hash:{},data:o,loc:{start:{line:6,column:21},end:{line:6,column:29}}}):a)+'"\n '+(null!=(e=c(n,"if").call(i,null!=t?c(t,"disabled"):t,{name:"if",hash:{},fn:e.program(1,o,0),inverse:e.noop,data:o,loc:{start:{line:7,column:4},end:{line:7,column:35}}}))?e:"")+'\n>\n <i class="far '+u(typeof(a=null!=(a=c(n,"icon")||(null!=t?c(t,"icon"):t))?a:l)==s?a.call(i,{name:"icon",hash:{},data:o,loc:{start:{line:9,column:16},end:{line:9,column:24}}}):a)+'" aria-hidden="true"></i>\n</button>\n'},useData:!0})},{"hbsfy/runtime":23}],25:[function(e,t,n){"use strict";var r=e("../utils/create-count-stepper"),o=window.Wick||{};o.PDPCountStepper={el:{input:"#quantity-field"},stepper:null,init:function(){o.PDPCountStepper.stepper=(0,r.createCountStepper)({inputSel:o.PDPCountStepper.el.input,min:1,max:99,onChange:function(e,t){$(t).trigger("change")}}),o.PDPCountStepper.stepper.init($(document))}},$(document).ready(function(){$(o.PDPCountStepper.el.input).length&&o.PDPCountStepper.init()})},{"../utils/create-count-stepper":26}],26:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.createCountStepper=function(){var e,o=function(e){return function(r){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{};e%2?i(Object(o),!0).forEach(function(e){var t,n;t=r,n=o[e=e],(e=function(e){e=function(e,t){if("object"!==a(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0===n)return("string"===t?String:Number)(e);n=n.call(e,t||"default");if("object"!==a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}(e,"string");return"symbol"===a(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))})}return r}({inputSel:"#quantity-field",min:1,enhancedInputClass:"count-stepper__input",enhancedParentClass:"count-stepper",onChange:null},e)}(0<arguments.length&&void 0!==arguments[0]?arguments[0]:{});if(o.inputSel)return e=".cnt_".concat(Math.random().toString(16).slice(2)),$(document).off("click".concat(e),"[data-count-btn]").on("click".concat(e),"[data-count-btn]",function(e){var t=$(this),n=t.parent().find(o.inputSel).first();n.length&&(e.preventDefault(),e=(t.attr("data-count-type")||"").toLowerCase(),t=l(n.val(),o.min),"plus"===e&&f(n,o,t+1),"minus"===e)&&f(n,o,t-1)}),$(document).off("input".concat(e," change").concat(e),o.inputSel).on("input".concat(e," change").concat(e),o.inputSel,function(){p($(this),o)}),{init:function(e){!function(e,t){var e=e&&e.length?e:$(document),n=e.is(t)?e:$(),e=e.find(t);return n.add(e)}(e,o.inputSel).each(function(){var e=$(this),t=o,n=u(e),r=(e.addClass(t.enhancedInputClass),n.addClass(t.enhancedParentClass),c(n).length),n=n.find('[data-count-btn][data-count-type="plus"]').first().length;r||e.before(s("minus",!0)),n||e.after(s("plus",!1)),r=l(e.val(),t.min),f(e,t,r)})}};throw new Error("[createCountStepper] Missing inputSel")};var r=(n=e("../../../elements/count-button.hbs"))&&n.__esModule?n:{default:n};function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function l(e,t){e=e,e=parseInt(String(e||"").trim(),10);e=Number.isFinite(e)?e:NaN;return Number.isFinite(e)?e:t}function s(e,t){return(0,r.default)({type:e,icon:"plus"===e?"fa-plus":"fa-minus",ariaLabel:"plus"===e?"Increase quantity":"Decrease quantity",disabled:!!t})}function u(e){return e.parent()}function c(e){return e.find('[data-count-btn][data-count-type="minus"]').first()}function p(e,t){var n=u(e),e=l(e.val(),t.min),n=c(n);n.length&&n.prop("disabled",e<=t.min)}function f(e,t,n){r=t.min;var r=Math.max(r,n);e.val(String(r)),p(e,t),"function"==typeof t.onChange&&t.onChange(r,e.get(0))}},{"../../../elements/count-button.hbs":24}]},{},[25]);