wickes-css2 2.104.0-develop.1 → 2.104.0-develop.2

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.
@@ -1,107 +1,203 @@
1
1
  var Wick = Wick || {};
2
2
  Wick.CheckoutPaymentDetails = (function() {
3
3
  const $modal = $('#modal-terms-and-conditions');
4
+
5
+ let prevPaymentMethod = null;
4
6
  let prevClearableMethod;
7
+
5
8
  let detailsLabel = {
6
- inputName: 'card-name',
7
- buttonName: 'btn-enter-details',
9
+ inputName: 'card-name', buttonName: 'btn-enter-details',
8
10
  };
9
11
 
10
12
  const elements = {
13
+ $billieRepaymentTerms: $('.js-billie-repayment-terms'),
14
+ $billieInfoBlock: $('.checkout-payment-details__billie'),
11
15
  $wrapperPaymentInput: $('.checkout-payment-details__row'),
12
16
  paymentInputName: '[name=payment-method]',
13
17
  $cardDetails: $('.checkout-payment-details__card-details'),
14
18
  $placeOrder: $('.checkout-payment-details__place-order'),
15
19
  $billingAddress: $('.billing-address'),
16
20
  hiddenCardDetailsClass: 'checkout-payment-details__card-details_hidden',
21
+ $billieBusiness: $('[data-billie-business]'),
22
+ businessTypeName: '[name="businessType"]',
23
+ $unregisteredFields: $('#unregistered-fields'),
24
+ $registeredFields: $('#registered-fields'),
17
25
  hiddenClass: 'd-none',
18
- }
26
+ };
19
27
 
20
28
  function preparePage() {
21
- var modalOpened = $(".modal.show").length;
22
- if (!modalOpened) {
23
- return;
24
- }
29
+ var modalOpened = $('.modal.show').length;
30
+ if (!modalOpened) return;
31
+
25
32
  var modalContent = $modal.find('.modal-content').clone();
26
- $modal.modal("hide");
27
- modalContent.addClass("print-area");
28
- $("body")
29
- .addClass("print-mode")
33
+ $modal.modal('hide');
34
+ modalContent.addClass('print-area');
35
+
36
+ $('body')
37
+ .addClass('print-mode')
30
38
  .append(modalContent);
31
39
  }
32
40
 
33
41
  function resetPage() {
34
- var modalPrintModeActive = $("body.print-mode").length;
35
- if (!modalPrintModeActive) {
36
- return;
37
- }
38
- $("body").removeClass("print-mode");
39
- $(".print-area").remove();
40
- $modal.modal("show");
42
+ var modalPrintModeActive = $('body.print-mode').length;
43
+ if (!modalPrintModeActive) return;
44
+
45
+ $('body').removeClass('print-mode');
46
+ $('.print-area').remove();
47
+ $modal.modal('show');
41
48
  }
42
49
 
43
50
  function getPaymentMethods() {
44
51
  return $(elements.paymentInputName)
45
52
  .map((_, item) => $(item).val())
46
- .get()
53
+ .get();
47
54
  }
48
55
 
49
56
  function togglePaymentBlocks(paymentMethods, checkedMethod) {
50
57
  paymentMethods.forEach(method => {
51
- $(`[data-${method}]`).toggle(checkedMethod === method)
52
- })
58
+ $(`[data-${method}]`).toggle(checkedMethod === method);
59
+ });
60
+ }
61
+
62
+ function resetAllCheckoutForms(keepPaymentMethod) {
63
+ const $container = elements.$wrapperPaymentInput.closest('.checkout-payment-details');
64
+ if (!$container.length) return;
65
+
66
+ $container.find('form').each(function() {
67
+ if (Wick.Forms && typeof Wick.Forms.clearValidationErrors === 'function') {
68
+ Wick.Forms.clearValidationErrors(this);
69
+ }
70
+ });
71
+
72
+ $container
73
+ .find('input[type="text"], input[type="email"], input[type="tel"], input[type="number"], input[type="password"], textarea')
74
+ .val('');
75
+
76
+ $container.find('select').each(function() {
77
+ this.selectedIndex = 0;
78
+ });
79
+
80
+ $container.find('input[type="checkbox"]').prop('checked', false);
81
+
82
+ $container.find('input[type="radio"]').each(function() {
83
+ const $radio = $(this);
84
+ const name = $radio.attr('name');
85
+ const val = $radio.val();
86
+
87
+ if (name === 'payment-method') {
88
+ $radio.prop('checked', val === keepPaymentMethod);
89
+ } else {
90
+ $radio.prop('checked', false);
91
+ }
92
+ });
93
+
94
+ $container.find('.radio-expanded-content').hide();
95
+ }
96
+
97
+ function setBillingDetailsRowVisibility(isVisible) {
98
+ const $row = elements.$billingAddress.find('.checkout-payment-details__row');
99
+ $row.toggle(isVisible);
100
+ $row.find(':input').prop('disabled', !isVisible);
101
+ }
102
+
103
+ function setBillieStepVisibility(isReady) {
104
+ setBillingDetailsRowVisibility(isReady);
105
+ elements.$billieInfoBlock.toggle(isReady);
106
+ }
107
+
108
+ function resetBillieRepaymentSelection() {
109
+ elements.$billieRepaymentTerms
110
+ .find('input[name="repaymentTerms"]')
111
+ .prop('checked', false);
112
+ }
113
+
114
+ function showBillieBusiness() {
115
+ elements.$billieBusiness.removeClass(elements.hiddenClass);
116
+ }
117
+
118
+ function hideBillieBusiness() {
119
+ elements.$billieBusiness.addClass(elements.hiddenClass);
120
+
121
+ elements.$unregisteredFields
122
+ .addClass(elements.hiddenClass)
123
+ .removeAttr('style');
124
+
125
+ elements.$registeredFields
126
+ .addClass(elements.hiddenClass)
127
+ .removeAttr('style');
128
+
129
+ elements.$billieBusiness.find('input[type="radio"]').prop('checked', false);
130
+ elements.$billieBusiness.find('input.tbx').val('');
53
131
  }
54
132
 
133
+ function toggleBusinessTypeFields(type) {
134
+ const isUnregistered = type === 'unregistered';
135
+ const isRegistered = type === 'registered';
136
+
137
+ elements.$unregisteredFields.toggleClass(elements.hiddenClass, !isUnregistered);
138
+ elements.$registeredFields.toggleClass(elements.hiddenClass, !isRegistered);
139
+ }
140
+
141
+
55
142
  function changeDetailsBlock(checkedMethod) {
56
- switch(checkedMethod) {
143
+ if (checkedMethod !== 'billie') {
144
+ setBillingDetailsRowVisibility(true);
145
+ }
146
+
147
+ switch (checkedMethod) {
57
148
  case 'paypal':
58
149
  hideCardDetails();
59
150
  showPlaceOrder();
60
151
  hideBillingAddres();
61
152
  break;
153
+
62
154
  case 'klarna':
63
155
  hideBillingAddres();
64
156
  break;
157
+
65
158
  case 'billie':
66
159
  detailsLabel = {
67
- ...detailsLabel,
68
- labelText: 'Name on Billie account',
69
- buttonText: 'Pay with Billie'
70
- }
160
+ ...detailsLabel, labelText: 'Name on Billie account', buttonText: 'Pay with Billie',
161
+ };
71
162
  changeLabelText(detailsLabel);
163
+
164
+ setBillieStepVisibility(false);
165
+ resetBillieRepaymentSelection();
166
+ showBillieBusiness();
72
167
  break;
168
+
73
169
  case 'clearpay':
74
170
  detailsLabel = {
75
- ...detailsLabel,
76
- labelText: 'Name on Clearpay account',
77
- buttonText: 'Pay with Clearpay'
78
- }
171
+ ...detailsLabel, labelText: 'Name on Clearpay account', buttonText: 'Pay with Clearpay',
172
+ };
79
173
  prevClearableMethod === 'card' && clearInputFields();
80
174
  changeLabelText(detailsLabel);
81
175
  prevClearableMethod = checkedMethod;
82
176
  break;
177
+
83
178
  case 'apple':
84
- hideCardDetails()
85
- hidePlaceOrder()
86
- hideBillingAddres()
179
+ hideCardDetails();
180
+ hidePlaceOrder();
181
+ hideBillingAddres();
87
182
  break;
183
+
88
184
  case 'google':
89
- hideCardDetails()
90
- hidePlaceOrder()
91
- hideBillingAddres()
185
+ hideCardDetails();
186
+ hidePlaceOrder();
187
+ hideBillingAddres();
92
188
  break;
189
+
93
190
  case 'card':
94
191
  detailsLabel = {
95
- ...detailsLabel,
96
- labelText: 'Name on card',
97
- buttonText: 'Enter card details'
98
- }
192
+ ...detailsLabel, labelText: 'Name on card', buttonText: 'Enter card details',
193
+ };
99
194
  prevClearableMethod === 'clearpay' && clearInputFields();
100
195
  changeLabelText(detailsLabel);
101
196
  prevClearableMethod = checkedMethod;
102
197
  break;
198
+
103
199
  default:
104
- showPlaceOrder()
200
+ showPlaceOrder();
105
201
  }
106
202
  }
107
203
 
@@ -115,9 +211,11 @@ Wick.CheckoutPaymentDetails = (function() {
115
211
 
116
212
  function changeLabelText(params) {
117
213
  const { inputName, labelText, buttonName, buttonText } = params;
214
+
118
215
  elements.$billingAddress.removeClass(elements.hiddenClass);
216
+
119
217
  let labelElement = elements.$billingAddress.find('[for="' + inputName + '"]');
120
- let buttonElement = elements.$billingAddress.find("." + buttonName + " .btn__text");
218
+ let buttonElement = elements.$billingAddress.find('.' + buttonName + ' .btn__text');
121
219
 
122
220
  labelElement && labelElement.text(labelText);
123
221
  buttonElement && buttonElement.text(buttonText);
@@ -135,14 +233,43 @@ Wick.CheckoutPaymentDetails = (function() {
135
233
  elements.$placeOrder.addClass(elements.hiddenClass);
136
234
  }
137
235
 
236
+ function initBillieBusinessTypeToggle() {
237
+ $(document).on('change', elements.businessTypeName, function () {
238
+ toggleBusinessTypeFields($(this).val());
239
+ });
240
+ }
241
+
138
242
  function init() {
139
243
  const paymentMethods = getPaymentMethods();
244
+ initBillieBusinessTypeToggle();
245
+ hideBillieBusiness();
246
+
247
+ $(document).on('change', 'input[name="repaymentTerms"]', function() {
248
+ const currentMethod = $(elements.paymentInputName + ':checked').val();
249
+ if (currentMethod !== 'billie') return;
250
+
251
+ const hasSelection = $('input[name="repaymentTerms"]:checked').length > 0;
252
+ setBillieStepVisibility(hasSelection);
253
+
254
+ const $row = $(this).closest('.form-row[data-row-required]');
255
+ $row.removeClass('form-row_validation-error')
256
+ .find('.form-row__error').remove();
257
+ });
140
258
 
141
259
  elements.$wrapperPaymentInput.on('change', elements.paymentInputName, function() {
142
260
  const checkedMethod = $(this).val();
143
261
 
144
- togglePaymentBlocks(paymentMethods, checkedMethod)
145
- changeDetailsBlock(checkedMethod)
262
+ if (prevPaymentMethod && prevPaymentMethod !== checkedMethod) {
263
+ resetAllCheckoutForms(checkedMethod);
264
+ } else {
265
+ const form = $(this).closest('form')[0];
266
+ form && Wick.Forms && Wick.Forms.clearValidationErrors && Wick.Forms.clearValidationErrors(form);
267
+ }
268
+
269
+ togglePaymentBlocks(paymentMethods, checkedMethod);
270
+ changeDetailsBlock(checkedMethod);
271
+
272
+ prevPaymentMethod = checkedMethod;
146
273
  });
147
274
 
148
275
  $('.btn-new-card').on('click', function() {
@@ -157,17 +284,14 @@ Wick.CheckoutPaymentDetails = (function() {
157
284
  return false;
158
285
  });
159
286
 
160
- // do not subscribe if no T&C modal on a current page
161
- if (!$modal.length) {
162
- return;
163
- }
287
+ prevPaymentMethod = $(elements.paymentInputName + ':checked').val() || null;
288
+
289
+ if (!$modal.length) return;
164
290
 
165
- if (typeof(window.onbeforeprint) !== 'undefined') {
166
- // subscriptions for browsers
291
+ if (typeof (window.onbeforeprint) !== 'undefined') {
167
292
  window.onbeforeprint = preparePage;
168
293
  window.onafterprint = resetPage;
169
294
  } else if (window.matchMedia) {
170
- // subscriptions for iOS devices
171
295
  var mediaQueryList = window.matchMedia('print');
172
296
  mediaQueryList.addListener(function(mql) {
173
297
  if (mql.matches) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wickes-css2",
3
- "version": "2.104.0-develop.1",
3
+ "version": "2.104.0-develop.2",
4
4
  "description": "CSS and JS and page templates in use by Wickes",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -1,42 +1,44 @@
1
- <div class="form-row radio-group" data-row-required>
2
- <label class="form-row__label form-row__label_required">
3
- Select your business type
4
- </label>
1
+ <div class="d-none" data-billie-business>
2
+ <div class="form-row radio-group" data-row-required>
3
+ <label class="form-row__label form-row__label_required">
4
+ Select your business type
5
+ </label>
5
6
 
6
- <div class="form-row">
7
- <div class="form-row__field">
8
- {{> radiobutton
9
- id="businessTypeUnregistered"
10
- name="businessType"
11
- value="unregistered"
12
- label="Unregistered Sole Trader / Business"}}
7
+ <div class="form-row">
8
+ <div class="form-row__field">
9
+ {{> radiobutton
10
+ id="businessTypeUnregistered"
11
+ name="businessType"
12
+ value="unregistered"
13
+ label="Unregistered Sole Trader / Business"}}
14
+ </div>
13
15
  </div>
14
- </div>
15
- <div class="form-row">
16
- <div class="form-row__field">
17
- {{> radiobutton
18
- id="businessTypeRegistered"
19
- name="businessType"
20
- value="registered"
21
- labelClass="registered-label"
22
- label="Registered Sole Trader / Business"
23
- tooltip="A Registered Business is one that has undergone the official process of being recognised and registered with Companies House, establishing its legal identity and enabling it to operate within a specific jurisdiction, such as a limited company. A Registered Business will have been issued a Company Registration Number (CRN) from Companies House."}}
16
+ <div class="form-row">
17
+ <div class="form-row__field">
18
+ {{> radiobutton
19
+ id="businessTypeRegistered"
20
+ name="businessType"
21
+ value="registered"
22
+ labelClass="registered-label"
23
+ label="Registered Sole Trader / Business"
24
+ tooltip="A Registered Business is one that has undergone the official process of being recognised and registered with Companies House, establishing its legal identity and enabling it to operate within a specific jurisdiction, such as a limited company. A Registered Business will have been issued a Company Registration Number (CRN) from Companies House."}}
25
+ </div>
24
26
  </div>
25
27
  </div>
26
- </div>
27
- <div
28
- id="unregistered-fields"
29
- class="radio-expanded-content"
30
- >
31
- {{> form-row id="first-name" label="First name" required="true" row-mod="first-name"}}
32
- {{> form-row id="last-name" label="Last name" required="true" row-mod="last-name"}}
33
- {{> form-row id="business-name" label="Business name" required="true" row-mod="unregistered-business"}}
34
- </div>
28
+ <div
29
+ id="unregistered-fields"
30
+ class="radio-expanded-content d-none"
31
+ >
32
+ {{> form-row id="first-name" label="First name" required="true" row-mod="first-name"}}
33
+ {{> form-row id="last-name" label="Last name" required="true" row-mod="last-name"}}
34
+ {{> form-row id="business-name" label="Business name" required="true" row-mod="unregistered-business"}}
35
+ </div>
35
36
 
36
- <div
37
- id="registered-fields"
38
- class="radio-expanded-content"
39
- >
40
- {{> form-row id="business-name-2" label="Business name" required="true" row-mod="registered-business"}}
41
- {{> form-row id="company-reg-number" label="Company registration number" row-mod="reg-number"}}
37
+ <div
38
+ id="registered-fields"
39
+ class="radio-expanded-content d-none"
40
+ >
41
+ {{> form-row id="business-name-2" label="Business name" required="true" row-mod="registered-business"}}
42
+ {{> form-row id="company-reg-number" label="Company registration number" row-mod="reg-number"}}
43
+ </div>
42
44
  </div>
@@ -12,13 +12,13 @@
12
12
  <li>View all your Wickes / Billie Orders in one place with your Trade Pro Account, on the Order History page.</li>
13
13
  </ul>
14
14
 
15
- <h4 class="billie-modal__heading">Buy now, pay within 30 days</h4>
15
+ <h4 class="billie-modal__heading js-billie-terms-heading">Buy now, pay within 30 days</h4>
16
16
  <ol class="billie-modal__list billie-modal__list--ordered">
17
17
  <li>Add items to your basket and proceed to checkout</li>
18
18
  <li>Select Billie as your payment method</li>
19
19
  <li>Enter your Business details on the payments page and Billie portal where necessary</li>
20
20
  <li>Billie review your submitted details in real-time and gives instant feedback if your order was successful</li>
21
- <li>From the point of collection / delivery of goods you’ll have 30 days to pay</li>
21
+ <li class="js-billie-repayment-line">From the point of collection / delivery of goods you’ll have 30 days to pay</li>
22
22
  <li>Billie will send you the invoice document via email and remind you when it is time to pay</li>
23
23
  </ol>
24
24
 
@@ -0,0 +1,15 @@
1
+ <div class="checkout-chip">
2
+ <input
3
+ class="checkout-chip__input"
4
+ type="radio"
5
+ name="{{name}}"
6
+ id="{{id}}"
7
+ value="{{value}}"
8
+ {{#if checked}}checked{{/if}}
9
+ />
10
+
11
+ <label class="checkout-chip__label" for="{{id}}">
12
+ <span class="checkout-chip__label-top">{{top}}</span>
13
+ <span class="checkout-chip__label-bottom">{{bottom}}</span>
14
+ </label>
15
+ </div>
@@ -23,9 +23,7 @@
23
23
 
24
24
  <div class="address-postcode">
25
25
  {{> address-postcode-look-up}}
26
- {{#if billie-form}}
27
- {{> address-billie}}
28
- {{/if}}
26
+ {{> address-billie}}
29
27
  </div>
30
28
 
31
29
  {{#unless no-set-card}}
@@ -67,13 +67,13 @@
67
67
  <div class="form-row">
68
68
  <div class="form-row__field form-row__field-clearpay">
69
69
  <label
70
- class="rbn rbn_align clearpay-label__rbn"
71
- for="checkout-payment-details-clearpay">
70
+ class="rbn rbn_align clearpay-label__rbn"
71
+ for="checkout-payment-details-clearpay">
72
72
  <input
73
- type="radio"
74
- id="checkout-payment-details-clearpay"
75
- name="payment-method"
76
- value="clearpay">
73
+ type="radio"
74
+ id="checkout-payment-details-clearpay"
75
+ name="payment-method"
76
+ value="clearpay">
77
77
  <ins></ins>
78
78
  <div class="clearpay-logo">
79
79
  <img class="payments-checkout__image" src="./img/payment/checkout/clearpay.svg" alt="clearpay">
@@ -86,13 +86,13 @@
86
86
  <div class="form-row">
87
87
  <div class="form-row__field form-row__field-apple">
88
88
  <label
89
- class="rbn rbn_align apple-label__rbn"
90
- for="checkout-payment-details-apple">
89
+ class="rbn rbn_align apple-label__rbn"
90
+ for="checkout-payment-details-apple">
91
91
  <input
92
- type="radio"
93
- id="checkout-payment-details-apple"
94
- name="payment-method"
95
- value="apple">
92
+ type="radio"
93
+ id="checkout-payment-details-apple"
94
+ name="payment-method"
95
+ value="apple">
96
96
  <ins></ins>
97
97
  <div class="apple-logo">
98
98
  <img src="img/apple-pay.svg" alt="apple pay">
@@ -105,13 +105,13 @@
105
105
  <div class="form-row">
106
106
  <div class="form-row__field form-row__field-google">
107
107
  <label
108
- class="rbn rbn_align google-label__rbn"
109
- for="checkout-payment-details-google">
108
+ class="rbn rbn_align google-label__rbn"
109
+ for="checkout-payment-details-google">
110
110
  <input
111
- type="radio"
112
- id="checkout-payment-details-google"
113
- name="payment-method"
114
- value="google">
111
+ type="radio"
112
+ id="checkout-payment-details-google"
113
+ name="payment-method"
114
+ value="google">
115
115
  <ins></ins>
116
116
  <div class="google-logo">
117
117
  <img src="img/google-pay-mark.png" alt="google pay">
@@ -125,7 +125,8 @@
125
125
  <label class="rbn rbn_align" for="checkout-payment-details-paypal">
126
126
  <input type="radio" id="checkout-payment-details-paypal" name="payment-method" value="paypal">
127
127
  <ins></ins>
128
- <img class="checkout-payment-details__icon" src="img/payments_paypal-large.png" width="90" height="24" alt="paypal">
128
+ <img class="checkout-payment-details__icon" src="img/payments_paypal-large.png" width="90" height="24"
129
+ alt="paypal">
129
130
  </label>
130
131
  </div>
131
132
  </div>
@@ -164,7 +165,18 @@
164
165
  </div>
165
166
  </div>
166
167
 
168
+ <div class="form-row js-billie-repayment-terms" style="display: none" data-billie data-row-required data-message="Please select repayment terms">
169
+ <div class="form-row__field">
170
+ {{> checkout-payment-repayment-terms
171
+ name="repaymentTerms"
172
+ title="Select repayment terms"
173
+ repaymentTerms=billieTerms
174
+ }}
175
+ </div>
176
+ </div>
177
+
167
178
  {{> checkout-payment-info-block
179
+ showRepaymentTerms=false
168
180
  dataAttr="data-klarna"
169
181
  blockClass="checkout-payment-details__klarna"
170
182
  infoClass="klarna-info"
@@ -198,10 +210,11 @@
198
210
 
199
211
  {{> checkout-payment-info-block
200
212
  dataAttr="data-billie"
213
+ showRepaymentTerms=true
201
214
  blockClass="checkout-payment-details__billie"
202
215
  infoClass="billie-info"
203
216
 
204
- heading="Get first. Pay later <br> Pay 30 days after shipment"
217
+ heading="Get first. Pay later <br> Pay <span class='term'>30</span> days after shipment"
205
218
  brandLogoHtml="<img
206
219
  src='https://static.billie.io/badges/Billie_Checkout_Default.svg'
207
220
  alt='Billie Pay Later'
@@ -224,12 +237,11 @@
224
237
  <img class="clearpay-widget__image" src="./img/payment/checkout/clearpay-widget.png" alt="clearpay widget">
225
238
  </div>
226
239
  </div>
227
-
228
-
229
240
  <div class="billing-address">
230
241
  {{> checkout-edit-billing-address actionBlock="true" no-set-card="true" billie-form=billie-form}}
231
242
  </div>
232
- <div data-existing-card class="form-row form-row__action form-row__action_custom checkout-payment-details__place-order paypal__row">
243
+ <div data-existing-card
244
+ class="form-row form-row__action form-row__action_custom checkout-payment-details__place-order paypal__row">
233
245
  <div class="form-row__col-btn" data-paypal style="display: none;">
234
246
  <a class="pay-pal_wrap" href="./page_checkout_confirmation-new.html">
235
247
  <div class="buttons-container">
@@ -0,0 +1,12 @@
1
+ <div class="repayment-terms">
2
+ <div class="repayment-terms__title">
3
+ <span class="repayment-terms__asterisk">*</span>
4
+ <span>{{title}}</span>
5
+ </div>
6
+
7
+ <div class="repayment-terms__chips" role="radiogroup">
8
+ {{#each repaymentTerms}}
9
+ {{> checkout-chip name=../name }}
10
+ {{/each}}
11
+ </div>
12
+ </div>
@@ -4,7 +4,7 @@
4
4
  {{/if}}
5
5
 
6
6
  {{#each orders}}
7
- {{> my-account/active-orders/order switch-vat=../switch-vat billieText=../billieText}}
7
+ {{> my-account/active-orders/order switch-vat=../switch-vat}}
8
8
  {{/each}}
9
9
 
10
10
  {{#if linkText}}
@@ -0,0 +1,7 @@
1
+ {
2
+ "billieTerms": [
3
+ { "id": "repay-30", "value": "30", "top": "30", "bottom": "days" },
4
+ { "id": "repay-60", "value": "60", "top": "60", "bottom": "days" },
5
+ { "id": "repay-90", "value": "90", "top": "90", "bottom": "days" }
6
+ ]
7
+ }