richie-education 2.13.0 → 2.15.0

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 (159) hide show
  1. package/.eslintrc.json +2 -1
  2. package/i18n/locales/ar-SA.json +352 -0
  3. package/i18n/locales/es-ES.json +352 -0
  4. package/i18n/locales/fa-IR.json +542 -0
  5. package/i18n/locales/fr-CA.json +352 -0
  6. package/i18n/locales/fr-FR.json +352 -0
  7. package/i18n/locales/pt-PT.json +352 -0
  8. package/i18n/locales/ru-RU.json +352 -0
  9. package/jest/resolver.js +34 -0
  10. package/{js/testSetup.ts → jest/setup.ts} +0 -0
  11. package/jest.config.js +6 -3
  12. package/js/components/AddressesManagement/AddressForm.tsx +170 -0
  13. package/js/components/AddressesManagement/_styles.scss +63 -0
  14. package/js/components/AddressesManagement/index.spec.tsx +593 -0
  15. package/js/components/AddressesManagement/index.tsx +308 -0
  16. package/js/components/AddressesManagement/validationSchema.ts +15 -0
  17. package/js/components/CourseGlimpse/CourseGlimpseFooter.tsx +11 -4
  18. package/js/components/CourseGlimpse/index.spec.tsx +20 -3
  19. package/js/components/CourseGlimpse/index.tsx +83 -61
  20. package/js/components/CourseGlimpseList/index.spec.tsx +12 -1
  21. package/js/components/CourseGlimpseList/index.tsx +20 -1
  22. package/js/components/CourseProductCertificateItem/_styles.scss +26 -0
  23. package/js/components/CourseProductCertificateItem/index.spec.tsx +150 -0
  24. package/js/components/CourseProductCertificateItem/index.tsx +102 -0
  25. package/js/components/CourseProductCourseRuns/CourseRunList.tsx +78 -0
  26. package/js/components/CourseProductCourseRuns/CourseRunSection.tsx +31 -0
  27. package/js/components/CourseProductCourseRuns/EnrollableCourseRunList.tsx +206 -0
  28. package/js/components/CourseProductCourseRuns/EnrolledCourseRun.tsx +89 -0
  29. package/js/components/CourseProductCourseRuns/_styles.scss +113 -0
  30. package/js/components/CourseProductCourseRuns/index.spec.tsx +371 -0
  31. package/js/components/CourseProductCourseRuns/index.tsx +5 -0
  32. package/js/components/CourseProductItem/_styles.scss +106 -0
  33. package/js/components/CourseProductItem/index.spec.tsx +197 -0
  34. package/js/components/CourseProductItem/index.tsx +100 -0
  35. package/js/components/CourseProductsList/index.spec.tsx +129 -0
  36. package/js/components/CourseProductsList/index.tsx +54 -0
  37. package/js/components/CourseRunEnrollment/index.spec.tsx +1 -1
  38. package/js/components/DashBoard/index.spec.tsx +38 -0
  39. package/js/components/DashBoard/index.tsx +5 -0
  40. package/js/components/Icon/index.spec.tsx +49 -0
  41. package/js/components/Icon/index.tsx +59 -0
  42. package/js/components/LanguageSelector/index.spec.tsx +43 -3
  43. package/js/components/LanguageSelector/index.tsx +4 -4
  44. package/js/components/LtiConsumer/index.spec.tsx +244 -11
  45. package/js/components/LtiConsumer/index.tsx +46 -13
  46. package/js/components/PaginateCourseSearch/index.spec.tsx +13 -0
  47. package/js/components/PaginateCourseSearch/index.tsx +18 -9
  48. package/js/components/PaymentButton/_styles.scss +8 -0
  49. package/js/components/PaymentButton/index.spec.tsx +485 -0
  50. package/js/components/PaymentButton/index.tsx +227 -0
  51. package/js/components/PaymentInterfaces/Dummy.tsx +44 -0
  52. package/js/components/PaymentInterfaces/PayplugLightbox.tsx +56 -0
  53. package/js/components/PaymentInterfaces/__mocks__/index.tsx +25 -0
  54. package/js/components/PaymentInterfaces/index.spec.tsx +72 -0
  55. package/js/components/PaymentInterfaces/index.tsx +41 -0
  56. package/js/components/RegisteredAddress/_styles.scss +83 -0
  57. package/js/components/RegisteredAddress/index.spec.tsx +162 -0
  58. package/js/components/RegisteredAddress/index.tsx +118 -0
  59. package/js/components/RegisteredCreditCard/_styles.scss +37 -0
  60. package/js/components/RegisteredCreditCard/index.spec.tsx +96 -0
  61. package/js/components/RegisteredCreditCard/index.tsx +70 -0
  62. package/js/components/Root/index.tsx +6 -0
  63. package/js/components/RootSearchSuggestField/index.spec.tsx +2 -0
  64. package/js/components/RootSearchSuggestField/index.tsx +1 -0
  65. package/js/components/SaleTunnel/_styles.scss +41 -0
  66. package/js/components/SaleTunnel/index.spec.tsx +217 -0
  67. package/js/components/SaleTunnel/index.tsx +133 -0
  68. package/js/components/SaleTunnelStepPayment/_styles.scss +180 -0
  69. package/js/components/SaleTunnelStepPayment/index.spec.tsx +308 -0
  70. package/js/components/SaleTunnelStepPayment/index.tsx +278 -0
  71. package/js/components/SaleTunnelStepResume/_styles.scss +130 -0
  72. package/js/components/SaleTunnelStepResume/index.spec.tsx +29 -0
  73. package/js/components/SaleTunnelStepResume/index.tsx +59 -0
  74. package/js/components/SaleTunnelStepValidation/CourseRunsList.tsx +85 -0
  75. package/js/components/SaleTunnelStepValidation/_styles.scss +130 -0
  76. package/js/components/SaleTunnelStepValidation/index.spec.tsx +60 -0
  77. package/js/components/SaleTunnelStepValidation/index.tsx +78 -0
  78. package/js/components/Search/index.tsx +12 -6
  79. package/js/components/SearchFilterGroup/index.spec.tsx +1 -1
  80. package/js/components/SearchFilterGroupModal/index.spec.tsx +12 -10
  81. package/js/components/SearchFilterGroupModal/index.tsx +6 -7
  82. package/js/components/SearchFiltersPane/index.spec.tsx +21 -4
  83. package/js/components/SearchFiltersPane/index.tsx +24 -3
  84. package/js/components/SearchInput/index.tsx +2 -3
  85. package/js/components/SearchSuggestField/index.spec.tsx +3 -1
  86. package/js/components/SearchSuggestField/index.tsx +1 -0
  87. package/js/components/StepBreadcrumb/_styles.scss +96 -0
  88. package/js/components/StepBreadcrumb/index.spec.tsx +209 -0
  89. package/js/components/StepBreadcrumb/index.tsx +108 -0
  90. package/js/components/UserLogin/index.spec.tsx +2 -2
  91. package/js/components/UserLogin/index.tsx +2 -3
  92. package/js/components/UserMenu/MobileUserMenu.tsx +2 -3
  93. package/js/components/UserMenu/index.spec.tsx +3 -3
  94. package/js/data/CourseCodeProvider/index.spec.tsx +5 -0
  95. package/js/data/JoanieApiProvider/index.spec.tsx +5 -0
  96. package/js/data/SessionProvider/BaseSessionProvider.tsx +3 -1
  97. package/js/data/SessionProvider/JoanieSessionProvider.spec.tsx +103 -33
  98. package/js/data/SessionProvider/JoanieSessionProvider.tsx +3 -1
  99. package/js/data/SessionProvider/index.spec.tsx +72 -2
  100. package/js/data/getResourceList/index.ts +4 -7
  101. package/js/data/useCourseSearch/index.spec.tsx +30 -2
  102. package/js/data/useCourseSearch/index.ts +16 -11
  103. package/js/hooks/useOrders.ts +3 -8
  104. package/js/hooks/useStepManager/index.spec.ts +172 -0
  105. package/js/hooks/useStepManager/index.ts +82 -0
  106. package/js/index.tsx +9 -1
  107. package/js/settings.ts +14 -6
  108. package/js/translations/ar-SA.json +1 -1
  109. package/js/translations/es-ES.json +1 -1
  110. package/js/translations/fa-IR.json +1 -0
  111. package/js/translations/fr-CA.json +1 -1
  112. package/js/translations/fr-FR.json +1 -1
  113. package/js/translations/pt-PT.json +1 -1
  114. package/js/translations/ru-RU.json +1 -1
  115. package/js/types/Joanie.ts +19 -15
  116. package/js/types/api.ts +1 -1
  117. package/js/types/globals.d.ts +8 -0
  118. package/js/types/index.ts +12 -2
  119. package/js/types/payments/payplug.d.ts +3 -0
  120. package/js/utils/api/authentication.ts +3 -3
  121. package/js/utils/api/joanie.ts +4 -6
  122. package/js/utils/api/lms/{base.spec.ts → dummy.spec.ts} +49 -12
  123. package/js/utils/api/lms/{base.ts → dummy.ts} +15 -3
  124. package/js/utils/api/lms/index.spec.ts +1 -1
  125. package/js/utils/api/lms/index.ts +4 -4
  126. package/js/utils/indirection/window.ts +1 -1
  127. package/js/utils/test/factories.ts +62 -53
  128. package/js/utils/useDateFormat.tsx +34 -0
  129. package/package.json +53 -46
  130. package/scss/_main.scss +13 -89
  131. package/scss/colors/_palette.scss +1 -0
  132. package/scss/colors/_schemes.scss +6 -0
  133. package/scss/colors/_theme.scss +55 -9
  134. package/scss/components/_header.scss +20 -2
  135. package/scss/components/_index.scss +51 -0
  136. package/scss/components/_subheader.scss +6 -0
  137. package/scss/components/templates/courses/cms/_blogpost_detail.scss +18 -1
  138. package/scss/components/templates/courses/cms/_course_detail.scss +21 -3
  139. package/scss/components/templates/courses/cms/_organization_detail.scss +5 -0
  140. package/scss/components/templates/courses/cms/_person_detail.scss +1 -0
  141. package/scss/components/templates/courses/cms/_program_detail.scss +1 -0
  142. package/scss/components/templates/richie/_multiple-columns.scss +399 -0
  143. package/scss/generic/_accessibility.scss +13 -13
  144. package/scss/generic/_index.scss +6 -0
  145. package/scss/objects/_blogpost_glimpses.scss +19 -4
  146. package/scss/objects/_course_glimpses.scss +69 -7
  147. package/scss/objects/_form.scss +2 -1
  148. package/scss/objects/_index.scss +17 -0
  149. package/scss/objects/_organization_glimpses.scss +19 -0
  150. package/scss/objects/_person_glimpses.scss +3 -1
  151. package/scss/settings/_bootstrap.scss +18 -0
  152. package/scss/settings/_fonts.scss +44 -4
  153. package/scss/settings/_variables.scss +24 -33
  154. package/scss/tools/_buttons.scss +1 -0
  155. package/scss/tools/_cards.scss +18 -1
  156. package/scss/tools/_colors.scss +17 -0
  157. package/scss/tools/_index.scss +14 -0
  158. package/scss/tools/_rem.scss +9 -2
  159. package/webpack.config.js +1 -5
package/.eslintrc.json CHANGED
@@ -72,7 +72,8 @@
72
72
  "react/no-array-index-key": "warn",
73
73
  "react/prop-types": "off",
74
74
  "react/react-in-jsx-scope": "off",
75
- "react/require-default-props": "off"
75
+ "react/require-default-props": "off",
76
+ "react/style-prop-object": ["error", { "allow": ["FormattedNumber"] }]
76
77
  },
77
78
  "settings": {
78
79
  "polyfills": ["fetch", "Promise"]
@@ -1,12 +1,184 @@
1
1
  {
2
+ "components.AddressesManagement.actionCreation": {
3
+ "description": "Action name for address creation.",
4
+ "message": "creation"
5
+ },
6
+ "components.AddressesManagement.actionDeletion": {
7
+ "description": "Action name for address deletion.",
8
+ "message": "deletion"
9
+ },
10
+ "components.AddressesManagement.actionPromotion": {
11
+ "description": "Action name for address promotion.",
12
+ "message": "promotion"
13
+ },
14
+ "components.AddressesManagement.actionUpdate": {
15
+ "description": "Action name for address update.",
16
+ "message": "update"
17
+ },
18
+ "components.AddressesManagement.addAddress": {
19
+ "description": "Title of the address creation form",
20
+ "message": "Add a new address"
21
+ },
22
+ "components.AddressesManagement.addressInput": {
23
+ "description": "Label of the \"address\" input",
24
+ "message": "Address"
25
+ },
26
+ "components.AddressesManagement.cancelButton": {
27
+ "description": "Label of the cancel button",
28
+ "message": "Cancel"
29
+ },
30
+ "components.AddressesManagement.cancelTitleButton": {
31
+ "description": "Title of the cancel button",
32
+ "message": "Cancel edition"
33
+ },
34
+ "components.AddressesManagement.cityInput": {
35
+ "description": "Label of the \"city\" input",
36
+ "message": "City"
37
+ },
38
+ "components.AddressesManagement.closeButton": {
39
+ "description": "Label of the close button",
40
+ "message": "Go back"
41
+ },
42
+ "components.AddressesManagement.countryInput": {
43
+ "description": "Label of the \"country\" input",
44
+ "message": "Country"
45
+ },
46
+ "components.AddressesManagement.deleteButton": {
47
+ "description": "Label of the delete button",
48
+ "message": "Delete"
49
+ },
50
+ "components.AddressesManagement.deleteButtonLabel": {
51
+ "description": "Title of the delete button",
52
+ "message": "Delete \"{title}\" address"
53
+ },
54
+ "components.AddressesManagement.deletionConfirmation": {
55
+ "description": "Confirmation message shown to the user when he wants to delete an address",
56
+ "message": "Are you sure you want to delete the \"{title}\" address ? ⚠️ You cannot undo this change after."
57
+ },
58
+ "components.AddressesManagement.editAddress": {
59
+ "description": "Title of the address edit form",
60
+ "message": "Update address {title}"
61
+ },
62
+ "components.AddressesManagement.editButton": {
63
+ "description": "Label of the edit button",
64
+ "message": "Edit"
65
+ },
66
+ "components.AddressesManagement.editButtonLabel": {
67
+ "description": "Title of the edit button",
68
+ "message": "Edit \"{title}\" address"
69
+ },
70
+ "components.AddressesManagement.error": {
71
+ "description": "Error message shown to the user when address creation/update/deletion request fails.",
72
+ "message": "An error occurred while address {action}. Please retry later."
73
+ },
74
+ "components.AddressesManagement.first_nameInput": {
75
+ "description": "Label of the \"first_name\" input",
76
+ "message": "Recipient's first name"
77
+ },
78
+ "components.AddressesManagement.last_nameInput": {
79
+ "description": "Label of the \"last_name\" input",
80
+ "message": "Recipient's last name"
81
+ },
82
+ "components.AddressesManagement.postcodeInput": {
83
+ "description": "Label of the \"postcode\" input",
84
+ "message": "Postcode"
85
+ },
86
+ "components.AddressesManagement.promoteButtonLabel": {
87
+ "description": "Title of the button to set the address as the main one",
88
+ "message": "Define \"{title}\" address as main"
89
+ },
90
+ "components.AddressesManagement.registeredAddresses": {
91
+ "description": "Title of the registered addresses block",
92
+ "message": "Your addresses"
93
+ },
94
+ "components.AddressesManagement.saveInput": {
95
+ "description": "Label of the \"save\" input",
96
+ "message": "Save this address"
97
+ },
98
+ "components.AddressesManagement.selectButton": {
99
+ "description": "Label of the select button",
100
+ "message": "Use this address"
101
+ },
102
+ "components.AddressesManagement.selectButtonLabel": {
103
+ "description": "Title of the select button",
104
+ "message": "Select \"{title}\" address"
105
+ },
106
+ "components.AddressesManagement.titleInput": {
107
+ "description": "Label of the \"title\" input",
108
+ "message": "Address title"
109
+ },
110
+ "components.AddressesManagement.updateButton": {
111
+ "description": "Label of the update button",
112
+ "message": "Update this address"
113
+ },
114
+ "components.CourseGlimpse.categoryLabel": {
115
+ "description": "Category label text for screen reader users",
116
+ "message": "Category"
117
+ },
118
+ "components.CourseGlimpse.codeIconAlt": {
119
+ "description": "Course code logo alternative text for screen reader users",
120
+ "message": "Course code"
121
+ },
2
122
  "components.CourseGlimpse.cover": {
3
123
  "description": "Placeholder text when the course we are glimpsing at is missing a cover image",
4
124
  "message": "Cover"
5
125
  },
126
+ "components.CourseGlimpse.organizationIconAlt": {
127
+ "description": "Organization logo alternative text for screen reader users",
128
+ "message": "Organization"
129
+ },
130
+ "components.CourseGlimpseFooter.dateIconAlt": {
131
+ "description": "Course date logo alternative text for screen reader users",
132
+ "message": "Course date"
133
+ },
6
134
  "components.CourseGlimpseList.courseCount": {
7
135
  "description": "Result count & pagination information for course search. Appears right above search results",
8
136
  "message": "Showing {start, number} to {end, number} of {courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search"
9
137
  },
138
+ "components.CourseGlimpseList.offscreenCourseCount": {
139
+ "description": "Short result count information for course search. Only for screen readers",
140
+ "message": "{courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search"
141
+ },
142
+ "components.CourseProductCertificateItem.certificateExplanation": {
143
+ "description": "Text displayed when the product certificate has no description",
144
+ "message": "You will be able to download your certificate once you will pass all course runs."
145
+ },
146
+ "components.CourseProductCertificateItem.congratulations": {
147
+ "description": "Congratulation message when user has passed the course.",
148
+ "message": "Congratulations, you passed this course!"
149
+ },
150
+ "components.CourseProductCertificateItem.download": {
151
+ "description": "Button label to download the certificate",
152
+ "message": "Download"
153
+ },
154
+ "components.CourseProductCertificateItem.generatingCertificate": {
155
+ "description": "Accessible label displayed while certificate is being generated.",
156
+ "message": "Certificate is being generated..."
157
+ },
158
+ "components.CourseProductItem.enrolled": {
159
+ "description": "Message displayed when authenticated user owned the product",
160
+ "message": "Enrolled"
161
+ },
162
+ "components.CourseProductsList.end": {
163
+ "description": "End label displayed in the header of course run dates section",
164
+ "message": "End"
165
+ },
166
+ "components.CourseProductsList.loadingInitial": {
167
+ "description": "Accessible text for the initial loading spinner displayed when course is fetching",
168
+ "message": "Loading course information..."
169
+ },
170
+ "components.CourseProductsList.start": {
171
+ "description": "Start label displayed in the header of course run dates section",
172
+ "message": "Start"
173
+ },
174
+ "components.CourseProductsLists.enrollOn": {
175
+ "description": "Text label for the enrollment dates",
176
+ "message": "Enrollment from {start} to {end}"
177
+ },
178
+ "components.CourseProductsLists.noCourseRunAvailable": {
179
+ "description": "Text displayed when no course run are opened for the course",
180
+ "message": "No session available for this course."
181
+ },
10
182
  "components.CourseRunEnrollment.enroll": {
11
183
  "description": "CTA for users who can enroll in the course run or could enroll if they logged in.",
12
184
  "message": "Enroll now"
@@ -35,10 +207,58 @@
35
207
  "description": "Helper text in the enroll button for non logged in users",
36
208
  "message": "Log in to enroll"
37
209
  },
210
+ "components.CourseRunList.enrollFromTo": {
211
+ "description": "Text label for the enrollment dates",
212
+ "message": "Enrollment from {start} to {end}"
213
+ },
214
+ "components.CourseRunList.noCourseRunAvailable": {
215
+ "description": "Text displayed when no course run are opened for the course",
216
+ "message": "No session available for this course."
217
+ },
38
218
  "components.DesktopUserMenu.menuPurpose": {
39
219
  "description": "Accessible label for user menu button",
40
220
  "message": "Access to your profile settings"
41
221
  },
222
+ "components.EnrollableCourseRunList.ariaSelectCourseRun": {
223
+ "description": "Accessible label used by screen reader when user checked a course run radio input.",
224
+ "message": "Select course run from {start} to {end}."
225
+ },
226
+ "components.EnrollableCourseRunList.enroll": {
227
+ "description": "Text label for the enroll button",
228
+ "message": "Enroll"
229
+ },
230
+ "components.EnrollableCourseRunList.enrollOn": {
231
+ "description": "Text label for the enrollment dates",
232
+ "message": "Enrollment from {enrollment_start} to {enrollment_end}"
233
+ },
234
+ "components.EnrollableCourseRunList.enrolling": {
235
+ "description": "Label displayed when a request to enroll to a course run is loading",
236
+ "message": "Enrolling..."
237
+ },
238
+ "components.EnrollableCourseRunList.enrollmentNotYetOpened": {
239
+ "description": "Text label for the enroll cta when enrollment is not yet opened",
240
+ "message": "Enrollment will open on {enrollment_start}"
241
+ },
242
+ "components.EnrollableCourseRunList.noCourseRunAvailable": {
243
+ "description": "Text displayed when no course run are opened for the course",
244
+ "message": "No session available for this course."
245
+ },
246
+ "components.EnrollableCourseRunList.selectCourseRun": {
247
+ "description": "Label displayed when user do not have select a course run.",
248
+ "message": "Select a course run"
249
+ },
250
+ "components.EnrolledCourseRun.goToCourse": {
251
+ "description": "CTA displayed when user is enrolled to the course run.",
252
+ "message": "Go to course"
253
+ },
254
+ "components.EnrolledCourseRun.unroll": {
255
+ "description": "Button label to unroll.",
256
+ "message": "Unroll"
257
+ },
258
+ "components.EnrolledCourseRun.unrolling": {
259
+ "description": "Accessible label displayed when user is being unrolled.",
260
+ "message": "Unrolling..."
261
+ },
42
262
  "components.LanguageSelector.currentlySelected": {
43
263
  "description": "Accessible hint to mark the currently selected language in the language selector",
44
264
  "message": "(currently selected)"
@@ -83,10 +303,138 @@
83
303
  "description": "Accessibility helper for pagination, added on the previous page link.",
84
304
  "message": "Previous page {page}"
85
305
  },
306
+ "components.PaymentButton.errorAbort": {
307
+ "description": "Error message shown when user aborts the payment.",
308
+ "message": "You have aborted the payment."
309
+ },
310
+ "components.PaymentButton.errorAborting": {
311
+ "description": "Error message shown when user asks to abort the payment.",
312
+ "message": "Aborting the payment..."
313
+ },
314
+ "components.PaymentButton.errorDefault": {
315
+ "description": "Error message shown when payment creation request failed.",
316
+ "message": "An error occurred during payment. Please retry later."
317
+ },
318
+ "components.PaymentButton.pay": {
319
+ "description": "CTA label to proceed to the payment of the product",
320
+ "message": "Pay {price}"
321
+ },
322
+ "components.PaymentButton.payInOneClick": {
323
+ "description": "CTA label to proceed to the one click payment of the product",
324
+ "message": "Pay in one click {price}"
325
+ },
326
+ "components.PaymentButton.paymentInProgress": {
327
+ "description": "Label for screen reader when a payment is in progress.",
328
+ "message": "Payment in progress"
329
+ },
330
+ "components.PurchasedProductMenu.actionsRelated": {
331
+ "description": "Accessible label for the purchased product menu",
332
+ "message": "Other actions related to this product"
333
+ },
334
+ "components.PurchasedProductMenu.downloadInvoice": {
335
+ "description": "Label for selector item to download invoice",
336
+ "message": "Download invoice"
337
+ },
338
+ "components.PurchasedProductMenu.generatingInvoice": {
339
+ "description": "Accessible label when invoice is being generated",
340
+ "message": "Invoice is being generated..."
341
+ },
342
+ "components.RegisteredCreditCard.expirationDate": {
343
+ "description": "Credit card expiration date label",
344
+ "message": "Expiration date: {expirationDate}"
345
+ },
346
+ "components.RegisteredCreditCard.inputAriaLabel": {
347
+ "description": "ARIA Label read by screen reader to inform which card is focused",
348
+ "message": "{selected, select, true {Unselect} other {Select}} {title}'s card"
349
+ },
86
350
  "components.RootSearchSuggestField.searchFieldPlaceholder": {
87
351
  "description": "Placeholder text displayed in the search field when it is empty.",
88
352
  "message": "Search for courses"
89
353
  },
354
+ "components.SaleTunnel.closeDialog": {
355
+ "description": "ARIA label used by screenreader to inform that the close dialog button is selected",
356
+ "message": "Close the dialog"
357
+ },
358
+ "components.SaleTunnel.loginToPurchase": {
359
+ "description": "Label displayed inside the product's CTA when user is not logged in",
360
+ "message": "Login to purchase"
361
+ },
362
+ "components.SaleTunnel.stepPayment": {
363
+ "description": "Label of the Payment step",
364
+ "message": "Payment"
365
+ },
366
+ "components.SaleTunnel.stepResume": {
367
+ "description": "Label of the Resume step",
368
+ "message": "Resume"
369
+ },
370
+ "components.SaleTunnel.stepValidation": {
371
+ "description": "Label of the Validation step",
372
+ "message": "Validation"
373
+ },
374
+ "components.SaleTunnelStepPayment.registeredCardSectionTitle": {
375
+ "description": "Label for the registered credit cards section",
376
+ "message": "Your registered credit card"
377
+ },
378
+ "components.SaleTunnelStepPayment.resumeTile": {
379
+ "description": "Label for the resume tile",
380
+ "message": "You are about to purchase"
381
+ },
382
+ "components.SaleTunnelStepPayment.userBillingAddressAddLabel": {
383
+ "description": "Label for the billing address add button",
384
+ "message": "Add an address"
385
+ },
386
+ "components.SaleTunnelStepPayment.userBillingAddressCreateLabel": {
387
+ "description": "Label for the billing address create button",
388
+ "message": "Create an address"
389
+ },
390
+ "components.SaleTunnelStepPayment.userBillingAddressFieldset": {
391
+ "description": "Label for the billing address fieldset",
392
+ "message": "Billing address"
393
+ },
394
+ "components.SaleTunnelStepPayment.userBillingAddressNoEntry": {
395
+ "description": "Message displayed when the user has no address.",
396
+ "message": "You have not yet a billing address."
397
+ },
398
+ "components.SaleTunnelStepPayment.userBillingAddressSelectLabel": {
399
+ "description": "Label for the billing address select",
400
+ "message": "Select a billing address"
401
+ },
402
+ "components.SaleTunnelStepPayment.userTile": {
403
+ "description": "Label for the user information tile",
404
+ "message": "Your personal information"
405
+ },
406
+ "components.SaleTunnelStepResume.congratulations": {
407
+ "description": "Text displayed to thank user for his order",
408
+ "message": "Congratulations!"
409
+ },
410
+ "components.SaleTunnelStepResume.cta": {
411
+ "description": "Label to the call to action to close sale tunnel",
412
+ "message": "Start this course now!"
413
+ },
414
+ "components.SaleTunnelStepResume.successDetailMessage": {
415
+ "description": "Text to remind that order's invoice will be send by email soon",
416
+ "message": "You will receive your invoice by email in a few moments."
417
+ },
418
+ "components.SaleTunnelStepResume.successMessage": {
419
+ "description": "Message to confirm that order has been created",
420
+ "message": "Your order has been successfully created."
421
+ },
422
+ "components.SaleTunnelStepValidation.availableCourseRuns": {
423
+ "description": "Course runs available text",
424
+ "message": "{ count, plural, =0 {No course runs} one {One course run} other {# course runs} } available"
425
+ },
426
+ "components.SaleTunnelStepValidation.courseRunDates": {
427
+ "description": "Course run date text",
428
+ "message": "From {start} to {end}"
429
+ },
430
+ "components.SaleTunnelStepValidation.includingVAT": {
431
+ "description": "Text displayed next to the price to mention this is the price including VAT.",
432
+ "message": "including VAT"
433
+ },
434
+ "components.SaleTunnelStepValidation.proceedToPayment": {
435
+ "description": "CTA to go to payment step",
436
+ "message": "Proceed to payment"
437
+ },
90
438
  "components.Search.errorMessage": {
91
439
  "description": "Error message for Search view when the request to load courses fails",
92
440
  "message": "Something's wrong! Courses could not be loaded."
@@ -95,6 +443,10 @@
95
443
  "description": "Accessibility text for the button/icon that toggles *off* the filters pane on mobile",
96
444
  "message": "Hide filters pane"
97
445
  },
446
+ "components.Search.resultsTitle": {
447
+ "description": "Title for the search results pane in course search (not shown, made for screen reader users).",
448
+ "message": "Search results"
449
+ },
98
450
  "components.Search.showFiltersPane": {
99
451
  "description": "Accessibility text for the button/icon that toggles *on* the filters pane on mobile",
100
452
  "message": "Show filters pane"