richie-education 2.24.0 → 2.25.0-b2.dev101

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 (492) hide show
  1. package/.eslintignore +2 -0
  2. package/.nvmrc +1 -1
  3. package/.prettierignore +2 -0
  4. package/.storybook/preview-body.html +1 -1
  5. package/.storybook/preview.tsx +5 -2
  6. package/cunningham.cjs +52 -43
  7. package/i18n/locales/ar-SA.json +500 -100
  8. package/i18n/locales/es-ES.json +500 -100
  9. package/i18n/locales/fa-IR.json +500 -100
  10. package/i18n/locales/fr-CA.json +564 -164
  11. package/i18n/locales/fr-FR.json +517 -117
  12. package/i18n/locales/ko-KR.json +500 -100
  13. package/i18n/locales/pt-PT.json +526 -126
  14. package/i18n/locales/ru-RU.json +500 -100
  15. package/i18n/locales/vi-VN.json +1734 -0
  16. package/jest/setup.ts +11 -1
  17. package/js/api/enrollment.ts +1 -1
  18. package/js/api/joanie.spec.ts +63 -2
  19. package/js/api/joanie.ts +218 -141
  20. package/js/api/lms/dummy.spec.ts +9 -1
  21. package/js/api/lms/dummy.ts +63 -10
  22. package/js/api/lms/joanie.spec.ts +49 -31
  23. package/js/api/lms/joanie.ts +53 -35
  24. package/js/api/lms/openedx-hawthorn.spec.ts +27 -11
  25. package/js/api/lms/openedx-hawthorn.ts +7 -6
  26. package/js/components/AddressesManagement/AddressForm/index.spec.tsx +157 -0
  27. package/js/components/AddressesManagement/AddressForm/index.stories.tsx +36 -0
  28. package/js/components/AddressesManagement/AddressForm/index.tsx +163 -0
  29. package/js/components/AddressesManagement/{validationSchema.ts → AddressForm/validationSchema.ts} +1 -23
  30. package/js/components/AddressesManagement/_styles.scss +1 -1
  31. package/js/components/AddressesManagement/index.spec.tsx +171 -202
  32. package/js/components/AddressesManagement/index.stories.tsx +29 -0
  33. package/js/components/AddressesManagement/index.tsx +11 -3
  34. package/js/components/Badge/index.spec.tsx +17 -0
  35. package/js/components/Badge/index.stories.tsx +22 -0
  36. package/js/components/Badge/index.tsx +18 -0
  37. package/js/components/Banner/index.tsx +6 -1
  38. package/js/components/ContractFrame/AbstractContractFrame.spec.tsx +332 -0
  39. package/js/components/ContractFrame/AbstractContractFrame.tsx +289 -0
  40. package/js/components/ContractFrame/LearnerContractFrame.spec.tsx +125 -0
  41. package/js/components/ContractFrame/LearnerContractFrame.tsx +42 -0
  42. package/js/components/ContractFrame/OrganizationContractFrame.spec.tsx +167 -0
  43. package/js/components/ContractFrame/OrganizationContractFrame.tsx +70 -0
  44. package/js/components/ContractFrame/_styles.scss +62 -0
  45. package/js/components/ContractFrame/iframe-manager.js +158 -0
  46. package/js/components/ContractFrame/index.ts +5 -0
  47. package/js/components/ContractStatus/index.spec.tsx +120 -0
  48. package/js/components/ContractStatus/index.tsx +67 -0
  49. package/js/components/CourseGlimpse/CourseGlimpseFooter.tsx +7 -7
  50. package/js/components/CourseGlimpse/index.tsx +5 -1
  51. package/js/components/CourseGlimpse/utils.ts +24 -16
  52. package/js/components/CourseGlimpseList/index.spec.tsx +1 -1
  53. package/js/components/CourseGlimpseList/index.tsx +1 -1
  54. package/js/components/CourseGlimpseList/utils.ts +3 -2
  55. package/js/components/DjangoCMSTemplate/index.spec.tsx +2 -2
  56. package/js/components/DownloadCertificateButton/index.tsx +58 -0
  57. package/js/components/DownloadContractButton/index.spec.tsx +155 -0
  58. package/js/components/DownloadContractButton/index.tsx +48 -0
  59. package/js/components/Form/CountrySelectField.tsx +28 -16
  60. package/js/components/Form/Input/index.spec.tsx +76 -0
  61. package/js/components/Form/Input/index.tsx +47 -0
  62. package/js/components/Form/Select/index.spec.tsx +99 -0
  63. package/js/components/Form/Select/index.tsx +43 -0
  64. package/js/components/{AddressesManagement → Form}/ValidationErrors.ts +10 -5
  65. package/js/components/Form/index.ts +5 -1
  66. package/js/components/Form/messages.ts +14 -0
  67. package/js/components/Form/test-utils.ts +19 -0
  68. package/js/components/Form/utils.spec.ts +72 -0
  69. package/js/components/Form/utils.ts +37 -0
  70. package/js/components/Icon/index.stories.tsx +2 -1
  71. package/js/components/Modal/_styles.scss +0 -8
  72. package/js/components/Modal/index.spec.tsx +0 -6
  73. package/js/components/Modal/index.tsx +23 -17
  74. package/js/components/PaymentButton/_styles.scss +26 -0
  75. package/js/{widgets/CourseProductItem → components/PaymentButton}/components/PaymentInterfaces/Dummy.tsx +1 -1
  76. package/js/{widgets/CourseProductItem → components/PaymentButton}/components/PaymentInterfaces/PayplugLightbox.tsx +30 -7
  77. package/js/{widgets/CourseProductItem → components/PaymentButton}/components/PaymentInterfaces/__mocks__/index.tsx +1 -1
  78. package/js/{widgets/CourseProductItem → components/PaymentButton}/components/PaymentInterfaces/index.spec.tsx +5 -3
  79. package/js/{widgets/CourseProductItem → components/PaymentButton}/components/PaymentInterfaces/index.tsx +7 -5
  80. package/js/components/PaymentButton/hooks/useTerms.tsx +74 -0
  81. package/js/components/PaymentButton/index.spec.tsx +1038 -0
  82. package/js/{widgets/CourseProductItem/components → components}/PaymentButton/index.tsx +94 -41
  83. package/js/components/PurchaseButton/index.spec.tsx +377 -0
  84. package/js/components/PurchaseButton/index.stories.tsx +15 -0
  85. package/js/{widgets/CourseProductItem/components → components}/PurchaseButton/index.tsx +72 -23
  86. package/js/components/PurchaseButton/styles.scss +7 -0
  87. package/js/components/RegisteredAddress/_styles.scss +1 -3
  88. package/js/components/RegisteredAddress/index.spec.tsx +1 -1
  89. package/js/components/RegisteredAddress/index.stories.tsx +40 -0
  90. package/js/components/RegisteredAddress/index.tsx +17 -19
  91. package/js/components/SaleTunnel/_styles.scss +11 -0
  92. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/RegisteredCreditCard/index.tsx +4 -10
  93. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepPayment/_styles.scss +7 -0
  94. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepPayment/index.spec.tsx +85 -61
  95. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepPayment/index.tsx +55 -57
  96. package/js/components/SaleTunnel/components/SaleTunnelStepResume/_styles.scss +63 -0
  97. package/js/components/SaleTunnel/components/SaleTunnelStepResume/index.spec.tsx +80 -0
  98. package/js/components/SaleTunnel/components/SaleTunnelStepResume/index.tsx +88 -0
  99. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepValidation/CourseRunsList.tsx +6 -2
  100. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepValidation/_styles.scss +5 -0
  101. package/js/components/SaleTunnel/components/SaleTunnelStepValidation/index.spec.tsx +170 -0
  102. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepValidation/index.tsx +41 -10
  103. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/StepBreadcrumb/index.spec.tsx +1 -1
  104. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/StepBreadcrumb/index.tsx +1 -1
  105. package/js/components/SaleTunnel/context.tsx +44 -0
  106. package/js/{widgets/CourseProductItem/components → components}/SaleTunnel/index.spec.tsx +27 -22
  107. package/js/{widgets/CourseProductItem/components → components}/SaleTunnel/index.tsx +96 -24
  108. package/js/components/SignContractButton/index.omniscientOrders.spec.tsx +135 -0
  109. package/js/components/SignContractButton/index.spec.tsx +213 -0
  110. package/js/components/SignContractButton/index.tsx +97 -0
  111. package/js/components/SuccessIcon/_styles.scss +66 -0
  112. package/js/components/SuccessIcon/index.tsx +10 -0
  113. package/js/components/TeacherDashboardCourseList/_styles.scss +0 -1
  114. package/js/components/TeacherDashboardCourseList/index.spec.tsx +9 -9
  115. package/js/components/TeacherDashboardCourseList/index.tsx +25 -31
  116. package/js/contexts/JoanieApiContext/index.spec.tsx +1 -1
  117. package/js/contexts/SessionContext/BaseSessionProvider.tsx +12 -22
  118. package/js/contexts/SessionContext/JoanieSessionProvider.spec.tsx +14 -0
  119. package/js/contexts/SessionContext/JoanieSessionProvider.tsx +33 -34
  120. package/js/contexts/SessionContext/index.spec.tsx +6 -7
  121. package/js/hooks/useBreadcrumbsPlaceholders.tsx +1 -1
  122. package/js/hooks/useContractAbilities/index.spec.ts +27 -0
  123. package/js/hooks/useContractAbilities/index.ts +8 -0
  124. package/js/hooks/useContractArchive/index.download.spec.tsx +126 -0
  125. package/js/hooks/useContractArchive/index.spec.tsx +91 -0
  126. package/js/hooks/useContractArchive/index.ts +64 -0
  127. package/js/hooks/useContracts/index.tsx +68 -0
  128. package/js/hooks/useCourseProductRelation/index.ts +8 -5
  129. package/js/hooks/useCourseProductUnion/index.spec.tsx +14 -10
  130. package/js/hooks/useCourseProductUnion/index.ts +6 -2
  131. package/js/hooks/useCourseProducts.ts +45 -0
  132. package/js/hooks/useCourseSearchParams/computeNewFilterValue.ts +3 -3
  133. package/js/hooks/useCourses/index.spec.tsx +2 -2
  134. package/js/hooks/useCourses/index.ts +4 -4
  135. package/js/hooks/useCreditCards/index.spec.tsx +4 -4
  136. package/js/hooks/useDashboardAddressForm.tsx +85 -87
  137. package/js/hooks/useDownloadCertificate/index.spec.tsx +19 -6
  138. package/js/hooks/useDownloadCertificate/index.tsx +2 -20
  139. package/js/hooks/useEnrollments.ts +1 -1
  140. package/js/hooks/useJoanieUserAbilities/index.not.isJoanieEnabled.spec.tsx +17 -0
  141. package/js/hooks/useJoanieUserAbilities/index.spec.tsx +68 -0
  142. package/js/hooks/useJoanieUserAbilities/index.tsx +11 -0
  143. package/js/hooks/useJoanieUserProfile.tsx +34 -0
  144. package/js/hooks/useOrders.ts +69 -26
  145. package/js/hooks/useOrganizations/index.ts +1 -1
  146. package/js/hooks/useProductOrder/index.spec.tsx +113 -0
  147. package/js/hooks/useProductOrder/index.tsx +33 -0
  148. package/js/hooks/useQueryKeyInvalidateListener.tsx +16 -0
  149. package/js/hooks/useResources/index.spec.tsx +30 -29
  150. package/js/hooks/useResources/index.tsx +11 -4
  151. package/js/hooks/useResources/useResourcesOmniscient.ts +2 -2
  152. package/js/hooks/useResources/useResourcesRoot.ts +21 -17
  153. package/js/hooks/useTeacherPendingContractsCount/index.ts +34 -0
  154. package/js/hooks/useUnionResource/index.spec.tsx +5 -2
  155. package/js/hooks/useUnionResource/index.ts +20 -3
  156. package/js/hooks/useUnionResource/utils/fetchEntity.ts +5 -4
  157. package/js/index.tsx +2 -2
  158. package/js/pages/DashboardAddressesManagement/DashboardAddressBox.tsx +1 -1
  159. package/js/pages/DashboardAddressesManagement/DashboardCreateAddress.spec.tsx +79 -72
  160. package/js/pages/DashboardAddressesManagement/DashboardCreateAddress.tsx +4 -4
  161. package/js/pages/DashboardAddressesManagement/DashboardEditAddress.spec.tsx +32 -23
  162. package/js/pages/DashboardAddressesManagement/DashboardEditAddress.tsx +6 -6
  163. package/js/pages/DashboardAddressesManagement/DashboardEditAddressLoader.tsx +2 -2
  164. package/js/pages/DashboardAddressesManagement/index.spec.tsx +4 -3
  165. package/js/pages/DashboardAddressesManagement/index.tsx +5 -5
  166. package/js/pages/DashboardCertificates/index.spec.tsx +3 -2
  167. package/js/pages/DashboardCertificates/index.tsx +2 -1
  168. package/js/pages/DashboardContracts/_styles.scss +8 -0
  169. package/js/pages/DashboardContracts/index.spec.tsx +147 -0
  170. package/js/pages/DashboardContracts/index.tsx +76 -0
  171. package/js/pages/DashboardCourses/index.spec.tsx +81 -61
  172. package/js/pages/DashboardCourses/index.tsx +15 -12
  173. package/js/pages/DashboardCourses/useOrdersEnrollments.tsx +34 -8
  174. package/js/pages/DashboardCreditCardsManagement/DashboardCreditCardBox.tsx +1 -1
  175. package/js/pages/DashboardCreditCardsManagement/DashboardEditCreditCard.spec.tsx +7 -6
  176. package/js/pages/DashboardCreditCardsManagement/DashboardEditCreditCard.tsx +43 -45
  177. package/js/pages/DashboardCreditCardsManagement/DashboardEditCreditCardLoader.tsx +2 -2
  178. package/js/pages/DashboardCreditCardsManagement/index.spec.tsx +13 -12
  179. package/js/pages/DashboardCreditCardsManagement/index.tsx +3 -3
  180. package/js/pages/DashboardOrderLayout/_styles.scss +5 -0
  181. package/js/pages/DashboardOrderLayout/index.spec.tsx +8 -8
  182. package/js/pages/DashboardOrderLayout/index.tsx +11 -6
  183. package/js/pages/TeacherDashboardContractsLayout/TeacherDashboardContracts/index.spec.tsx +358 -0
  184. package/js/pages/TeacherDashboardContractsLayout/TeacherDashboardContracts/index.tsx +129 -0
  185. package/js/pages/TeacherDashboardContractsLayout/TeacherDashboardCourseContractsLayout/index.tsx +26 -0
  186. package/js/pages/TeacherDashboardContractsLayout/TeacherDashboardOrganizationContractsLayout/index.tsx +26 -0
  187. package/js/pages/TeacherDashboardContractsLayout/components/BulkDownloadContractButton/index.spec.tsx +136 -0
  188. package/js/pages/TeacherDashboardContractsLayout/components/BulkDownloadContractButton/index.timer.spec.tsx +144 -0
  189. package/js/pages/TeacherDashboardContractsLayout/components/BulkDownloadContractButton/index.tsx +73 -0
  190. package/js/pages/TeacherDashboardContractsLayout/components/ContractActionsBar/index.spec.tsx +185 -0
  191. package/js/pages/TeacherDashboardContractsLayout/components/ContractActionsBar/index.tsx +47 -0
  192. package/js/pages/TeacherDashboardContractsLayout/components/ContractFiltersBar/index.spec.tsx +179 -0
  193. package/js/pages/TeacherDashboardContractsLayout/components/ContractFiltersBar/index.tsx +86 -0
  194. package/js/pages/TeacherDashboardContractsLayout/components/SignOrganizationContractButton/index.spec.tsx +109 -0
  195. package/js/pages/TeacherDashboardContractsLayout/components/SignOrganizationContractButton/index.tsx +60 -0
  196. package/js/pages/TeacherDashboardContractsLayout/hooks/useCheckContractArchiveExists/index.spec.tsx +124 -0
  197. package/js/pages/TeacherDashboardContractsLayout/hooks/useCheckContractArchiveExists/index.tsx +73 -0
  198. package/js/pages/TeacherDashboardContractsLayout/hooks/useDefaultOrganizationId/index.spec.tsx +134 -0
  199. package/js/pages/TeacherDashboardContractsLayout/hooks/useDefaultOrganizationId/index.tsx +28 -0
  200. package/js/pages/TeacherDashboardContractsLayout/hooks/useDownloadContractArchive/contractArchiveLocalStorage.spec.ts +85 -0
  201. package/js/pages/TeacherDashboardContractsLayout/hooks/useDownloadContractArchive/contractArchiveLocalStorage.ts +50 -0
  202. package/js/pages/TeacherDashboardContractsLayout/hooks/useDownloadContractArchive/index.spec.tsx +266 -0
  203. package/js/pages/TeacherDashboardContractsLayout/hooks/useDownloadContractArchive/index.tsx +153 -0
  204. package/js/pages/TeacherDashboardContractsLayout/hooks/useHasContractToDownload/index.spec.tsx +100 -0
  205. package/js/pages/TeacherDashboardContractsLayout/hooks/useHasContractToDownload/index.tsx +27 -0
  206. package/js/pages/TeacherDashboardContractsLayout/hooks/useTeacherContractFilters/index.spec.tsx +193 -0
  207. package/js/pages/TeacherDashboardContractsLayout/hooks/useTeacherContractFilters/index.tsx +44 -0
  208. package/js/pages/TeacherDashboardContractsLayout/hooks/useTeacherContractsToSign.tsx +32 -0
  209. package/js/pages/TeacherDashboardContractsLayout/index.ts +2 -0
  210. package/js/pages/TeacherDashboardContractsLayout/styles.scss +15 -0
  211. package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/CourseRunListCell/index.spec.tsx +1 -1
  212. package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/_styles.scss +1 -2
  213. package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/index.spec.tsx +2 -2
  214. package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/utils.spec.tsx +1 -1
  215. package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/utils.tsx +11 -10
  216. package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/index.tsx +9 -8
  217. package/js/pages/{TeacherCoursesDashboardLoader → TeacherDashboardCoursesLoader}/index.spec.tsx +17 -17
  218. package/js/pages/{TeacherCoursesDashboardLoader → TeacherDashboardCoursesLoader}/index.tsx +7 -7
  219. package/js/pages/{TeacherOrganizationCourseDashboardLoader → TeacherDashboardOrganizationCourseLoader}/index.tsx +5 -5
  220. package/js/pages/{TeacherTrainingDashboard/TeacherTrainingDashboardLoader.tsx → TeacherDashboardTraining/TeacherDashboardTrainingLoader.tsx} +10 -9
  221. package/js/pages/{TeacherTrainingDashboard → TeacherDashboardTraining}/index.spec.tsx +76 -6
  222. package/js/pages/{TeacherTrainingDashboard → TeacherDashboardTraining}/index.tsx +6 -6
  223. package/js/settings.dev.dist.ts +3 -0
  224. package/js/settings.ts +29 -1
  225. package/js/translations/ar-SA.json +1 -1
  226. package/js/translations/es-ES.json +1 -1
  227. package/js/translations/fa-IR.json +1 -1
  228. package/js/translations/fr-CA.json +1 -1
  229. package/js/translations/fr-FR.json +1 -1
  230. package/js/translations/ko-KR.json +1 -1
  231. package/js/translations/pt-PT.json +1 -1
  232. package/js/translations/ru-RU.json +1 -1
  233. package/js/translations/vi-VN.json +1 -0
  234. package/js/types/Joanie.ts +263 -80
  235. package/js/types/Suggestion.ts +2 -2
  236. package/js/types/User.ts +19 -1
  237. package/js/types/commonDataProps.ts +3 -0
  238. package/js/types/index.ts +1 -1
  239. package/js/utils/AbilitiesHelper/contractAbilities.spec.ts +35 -0
  240. package/js/utils/AbilitiesHelper/contractAbilities.ts +14 -0
  241. package/js/utils/AbilitiesHelper/index.ts +71 -0
  242. package/js/utils/AbilitiesHelper/joanieUserProfileAbilities.spec.ts +55 -0
  243. package/js/utils/AbilitiesHelper/joanieUserProfileAbilities.ts +16 -0
  244. package/js/utils/AbilitiesHelper/types.ts +36 -0
  245. package/js/utils/ContractHelper/index.spec.ts +73 -0
  246. package/js/utils/ContractHelper/index.ts +72 -0
  247. package/js/utils/CourseRuns/index.spec.tsx +20 -1
  248. package/js/utils/CourseRuns/index.ts +14 -2
  249. package/js/utils/CoursesHelper/index.spec.ts +45 -55
  250. package/js/utils/CoursesHelper/index.ts +6 -7
  251. package/js/utils/CreditCardHelper/index.spec.tsx +26 -22
  252. package/js/utils/CreditCardHelper/index.tsx +19 -6
  253. package/js/utils/ObjectHelper/index.spec.ts +18 -10
  254. package/js/utils/ObjectHelper/index.ts +9 -0
  255. package/js/utils/OrderHelper/index.ts +32 -0
  256. package/js/utils/ProductHelper/index.ts +5 -1
  257. package/js/utils/StringHelper/index.spec.tsx +11 -0
  258. package/js/utils/StringHelper/index.ts +8 -0
  259. package/js/utils/UserHelper/index.spec.ts +18 -0
  260. package/js/utils/UserHelper/index.ts +8 -0
  261. package/js/utils/download.ts +43 -0
  262. package/js/utils/errors/HttpError.ts +10 -0
  263. package/js/utils/indirection/window.ts +1 -1
  264. package/js/utils/react-query/createQueryClient.ts +12 -21
  265. package/js/utils/react-query/useLocalizedQueryKey.ts +1 -1
  266. package/js/utils/react-query/useSessionMutation/index.spec.tsx +8 -8
  267. package/js/utils/react-query/useSessionMutation/index.ts +6 -11
  268. package/js/utils/react-query/useSessionQuery/index.spec.tsx +36 -8
  269. package/js/utils/react-query/useSessionQuery/index.ts +14 -21
  270. package/js/utils/search/getSuggestionsSection/index.spec.ts +4 -3
  271. package/js/utils/search/getSuggestionsSection/index.ts +4 -1
  272. package/js/utils/search/index.tsx +8 -3
  273. package/js/utils/test/createTestQueryClient.ts +7 -7
  274. package/js/utils/test/expectBanner.ts +16 -3
  275. package/js/utils/test/factories/factories.ts +4 -4
  276. package/js/utils/test/factories/joanie.spec.ts +7 -0
  277. package/js/utils/test/factories/joanie.ts +214 -63
  278. package/js/utils/test/factories/reactQuery.ts +1 -1
  279. package/js/utils/test/factories/richie.ts +4 -2
  280. package/js/utils/test/mockCourseProductWithOrder.ts +28 -0
  281. package/js/utils/test/mockPaginatedResponse.ts +1 -1
  282. package/js/utils/test/render.tsx +72 -0
  283. package/js/utils/test/wrappers/IntlWrapper.tsx +23 -0
  284. package/js/utils/test/wrappers/JoanieAppWrapper.tsx +42 -0
  285. package/js/utils/test/wrappers/PresentationalAppWrapper.tsx +18 -0
  286. package/js/utils/test/wrappers/ReactQueryWrapper.tsx +16 -0
  287. package/js/utils/test/wrappers/RouterWrapper.tsx +29 -0
  288. package/js/utils/test/wrappers/types.ts +26 -0
  289. package/js/widgets/Dashboard/components/DashboardAvatar/_styles.scss +17 -5
  290. package/js/widgets/Dashboard/components/DashboardAvatar/index.spec.tsx +9 -2
  291. package/js/widgets/Dashboard/components/DashboardAvatar/index.tsx +16 -5
  292. package/js/widgets/Dashboard/components/DashboardBox/index.stories.tsx +1 -1
  293. package/js/widgets/Dashboard/components/DashboardBreadcrumbs/_styles.scss +1 -0
  294. package/js/widgets/Dashboard/components/DashboardBreadcrumbs/index.tsx +7 -4
  295. package/js/widgets/Dashboard/components/DashboardCard/index.spec.tsx +1 -1
  296. package/js/widgets/Dashboard/components/DashboardCard/index.stories.tsx +3 -3
  297. package/js/widgets/Dashboard/components/DashboardCard/index.tsx +2 -2
  298. package/js/widgets/Dashboard/components/DashboardItem/Certificate/index.spec.tsx +49 -9
  299. package/js/widgets/Dashboard/components/DashboardItem/Certificate/index.tsx +27 -73
  300. package/js/widgets/Dashboard/components/DashboardItem/CertificateStatus/index.spec.tsx +65 -0
  301. package/js/widgets/Dashboard/components/DashboardItem/CertificateStatus/index.tsx +59 -0
  302. package/js/widgets/Dashboard/components/DashboardItem/Contract/_styles.scss +29 -0
  303. package/js/widgets/Dashboard/components/DashboardItem/Contract/index.spec.tsx +197 -0
  304. package/js/widgets/Dashboard/components/DashboardItem/Contract/index.stories.tsx +34 -0
  305. package/js/widgets/Dashboard/components/DashboardItem/Contract/index.tsx +53 -0
  306. package/js/widgets/Dashboard/components/DashboardItem/CourseEnrolling/hooks/useCourseRunPeriodMessage.ts +76 -0
  307. package/js/widgets/Dashboard/components/DashboardItem/CourseEnrolling/index.spec.tsx +158 -0
  308. package/js/widgets/Dashboard/components/DashboardItem/{DashboardItemCourseEnrolling.stories.tsx → CourseEnrolling/index.stories.tsx} +6 -6
  309. package/js/widgets/Dashboard/components/DashboardItem/{DashboardItemCourseEnrolling.tsx → CourseEnrolling/index.tsx} +141 -84
  310. package/js/widgets/Dashboard/components/DashboardItem/Enrollment/DashboardItemEnrollment.spec.tsx +40 -37
  311. package/js/widgets/Dashboard/components/DashboardItem/Enrollment/DashboardItemEnrollment.tsx +29 -11
  312. package/js/widgets/Dashboard/components/DashboardItem/Enrollment/ProductCertificateFooter/index.spec.tsx +248 -0
  313. package/js/widgets/Dashboard/components/DashboardItem/Enrollment/ProductCertificateFooter/index.tsx +89 -0
  314. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrder.spec.tsx +188 -117
  315. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrder.tsx +124 -78
  316. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderContract.spec.tsx +299 -0
  317. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderContract.useUnionResource.cache.spec.tsx +286 -0
  318. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderReadonly.stories.tsx +9 -5
  319. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderWritable.stories.tsx +10 -6
  320. package/js/widgets/Dashboard/components/DashboardItem/Order/OrderStateMessage/index.spec.tsx +121 -0
  321. package/js/widgets/Dashboard/components/DashboardItem/Order/OrderStateMessage/index.tsx +98 -0
  322. package/js/widgets/Dashboard/components/DashboardItem/Order/_styles.scss +43 -0
  323. package/js/widgets/Dashboard/components/DashboardItem/_styles.scss +34 -37
  324. package/js/widgets/Dashboard/components/DashboardItem/index.spec.tsx +74 -4
  325. package/js/widgets/Dashboard/components/DashboardItem/index.stories.tsx +18 -0
  326. package/js/widgets/Dashboard/components/DashboardItem/index.tsx +91 -26
  327. package/js/widgets/Dashboard/components/DashboardItem/stories.mock.ts +4 -8
  328. package/js/widgets/Dashboard/components/DashboardLayout/_styles.scss +14 -5
  329. package/js/widgets/Dashboard/components/DashboardLayout/index.tsx +10 -3
  330. package/js/widgets/Dashboard/components/DashboardListAvatar/_styles.scss +8 -0
  331. package/js/widgets/Dashboard/components/DashboardListAvatar/index.tsx +11 -0
  332. package/js/widgets/Dashboard/components/DashboardOrderLoader/_styles.scss +5 -0
  333. package/js/widgets/Dashboard/components/DashboardOrderLoader/index.tsx +50 -14
  334. package/js/widgets/Dashboard/components/DashboardSidebar/_styles.scss +37 -24
  335. package/js/widgets/Dashboard/components/DashboardSidebar/components/ContractNavLink/index.spec.tsx +244 -0
  336. package/js/widgets/Dashboard/components/DashboardSidebar/components/ContractNavLink/index.tsx +49 -0
  337. package/js/widgets/Dashboard/components/DashboardSidebar/components/MenuNavLink/index.spec.tsx +40 -0
  338. package/js/widgets/Dashboard/components/DashboardSidebar/components/MenuNavLink/index.tsx +28 -0
  339. package/js/widgets/Dashboard/components/DashboardSidebar/components/NavigationSelect.tsx +58 -0
  340. package/js/widgets/Dashboard/components/DashboardSidebar/index.stories.tsx +11 -1
  341. package/js/widgets/Dashboard/components/DashboardSidebar/index.tsx +18 -69
  342. package/js/widgets/Dashboard/components/DashboardSidebar/utils.ts +6 -0
  343. package/js/widgets/Dashboard/components/FilterOrganization/index.tsx +58 -0
  344. package/js/widgets/Dashboard/components/FiltersBar/index.tsx +9 -0
  345. package/js/widgets/Dashboard/components/LearnerDashboardSidebar/index.tsx +4 -2
  346. package/js/widgets/Dashboard/components/NavigateWithParams/index.spec.tsx +31 -40
  347. package/js/widgets/Dashboard/components/RouterButton/index.tsx +2 -1
  348. package/js/widgets/Dashboard/components/Signature/DummyContractPlaceholder.tsx +25 -0
  349. package/js/widgets/Dashboard/components/Signature/SignatureDummy.tsx +58 -0
  350. package/js/widgets/Dashboard/components/Signature/SignatureLexPersona.tsx +72 -0
  351. package/js/widgets/Dashboard/components/TeacherDashboardCourseSidebar/index.spec.tsx +215 -0
  352. package/js/widgets/Dashboard/components/{TeacherCourseDashboardSidebar → TeacherDashboardCourseSidebar}/index.tsx +75 -31
  353. package/js/widgets/Dashboard/components/TeacherDashboardCourseSidebar/utils.ts +23 -0
  354. package/js/widgets/Dashboard/components/TeacherDashboardOrganizationSidebar/index.spec.tsx +154 -0
  355. package/js/widgets/Dashboard/components/TeacherDashboardOrganizationSidebar/index.stories.tsx +42 -0
  356. package/js/widgets/Dashboard/components/{TeacherOrganizationDashboardSidebar → TeacherDashboardOrganizationSidebar}/index.tsx +40 -29
  357. package/js/widgets/Dashboard/components/{TeacherProfileDashboardSidebar → TeacherDashboardProfileSidebar}/components/OrganizationLinks/_styles.scss +27 -10
  358. package/js/widgets/Dashboard/components/TeacherDashboardProfileSidebar/components/OrganizationLinks/index.spec.tsx +49 -0
  359. package/js/widgets/Dashboard/components/{TeacherProfileDashboardSidebar → TeacherDashboardProfileSidebar}/components/OrganizationLinks/index.tsx +18 -7
  360. package/js/widgets/Dashboard/components/{TeacherProfileDashboardSidebar → TeacherDashboardProfileSidebar}/index.spec.tsx +13 -39
  361. package/js/widgets/Dashboard/components/{TeacherProfileDashboardSidebar → TeacherDashboardProfileSidebar}/index.stories.tsx +5 -5
  362. package/js/widgets/Dashboard/components/{TeacherProfileDashboardSidebar → TeacherDashboardProfileSidebar}/index.tsx +4 -3
  363. package/js/widgets/Dashboard/hooks/useEnroll/index.ts +8 -8
  364. package/js/widgets/Dashboard/index.spec.tsx +22 -12
  365. package/js/widgets/Dashboard/utils/learnerRouteMessages.tsx +12 -1
  366. package/js/widgets/Dashboard/utils/learnerRoutes.tsx +6 -0
  367. package/js/widgets/Dashboard/utils/teacherRouteMessages.tsx +60 -4
  368. package/js/widgets/Dashboard/utils/teacherRoutes.tsx +87 -13
  369. package/js/widgets/LtiConsumer/index.spec.tsx +44 -33
  370. package/js/widgets/LtiConsumer/index.tsx +11 -15
  371. package/js/widgets/Search/components/SearchFilterGroup/index.spec.tsx +0 -5
  372. package/js/widgets/Search/components/SearchFilterGroupModal/_styles.scss +0 -9
  373. package/js/widgets/Search/components/SearchFilterGroupModal/index.spec.tsx +0 -5
  374. package/js/widgets/Search/components/SearchFilterGroupModal/index.tsx +86 -60
  375. package/js/widgets/Search/components/SearchFilterValueParent/index.stories.tsx +51 -0
  376. package/js/widgets/Search/components/SearchFilterValueParent/index.tsx +7 -7
  377. package/js/widgets/Search/components/SearchFiltersPane/_styles.scss +2 -16
  378. package/js/widgets/Search/components/SearchFiltersPane/index.tsx +9 -6
  379. package/js/widgets/Search/hooks/useCourseSearch/index.ts +13 -7
  380. package/js/widgets/Search/index.spec.tsx +3 -2
  381. package/js/widgets/Search/utils/getResourceList/index.spec.ts +12 -5
  382. package/js/widgets/Search/utils/getResourceList/index.ts +6 -2
  383. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/CourseProductItemFooter/index.tsx +74 -0
  384. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/_styles.scss +11 -14
  385. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCertificateItem/_styles.scss +1 -1
  386. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCertificateItem/index.spec.tsx +13 -2
  387. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/components/CourseProductCertificateItem/index.stories.tsx +33 -0
  388. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCertificateItem/index.tsx +5 -8
  389. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/CourseRunList.tsx +1 -1
  390. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/EnrollableCourseRunList.tsx +16 -8
  391. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/EnrolledCourseRun.tsx +5 -3
  392. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/_styles.scss +1 -0
  393. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/index.spec.tsx +100 -35
  394. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseRunItem/index.spec.tsx +7 -4
  395. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/components/CourseRunItem/index.stories.tsx +36 -0
  396. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseRunItem/index.tsx +5 -3
  397. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/components/ProductSignatureHeader/index.tsx +40 -0
  398. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.spec.tsx +898 -0
  399. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.stories.tsx +83 -0
  400. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.tsx +253 -0
  401. package/js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/CourseRunUnenrollmentButton/index.tsx +3 -2
  402. package/js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/_styles.scss +0 -25
  403. package/js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/index.joanie.spec.tsx +73 -30
  404. package/js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/index.openedx.spec.tsx +10 -5
  405. package/js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/index.tsx +54 -26
  406. package/js/widgets/SyllabusCourseRunsList/components/CourseRunItemWithEnrollment/index.tsx +1 -0
  407. package/js/widgets/SyllabusCourseRunsList/components/CourseWishButton/_styles.scss +0 -3
  408. package/js/widgets/SyllabusCourseRunsList/components/CourseWishButton/hooks/useCourseWish/index.spec.tsx +12 -9
  409. package/js/widgets/SyllabusCourseRunsList/components/CourseWishButton/index.login.spec.tsx +14 -12
  410. package/js/widgets/SyllabusCourseRunsList/components/CourseWishButton/index.logout.spec.tsx +4 -6
  411. package/js/widgets/SyllabusCourseRunsList/components/CourseWishButton/index.tsx +5 -5
  412. package/js/widgets/SyllabusCourseRunsList/components/SyllabusAsideList/index.tsx +2 -2
  413. package/js/widgets/SyllabusCourseRunsList/components/SyllabusCourseRun/index.tsx +19 -13
  414. package/js/widgets/SyllabusCourseRunsList/components/SyllabusSimpleCourseRunsList/index.tsx +1 -0
  415. package/js/widgets/SyllabusCourseRunsList/hooks/useCourseEnrollment/index.spec.tsx +2 -1
  416. package/js/widgets/SyllabusCourseRunsList/hooks/useCourseEnrollment/index.ts +14 -19
  417. package/js/widgets/SyllabusCourseRunsList/index.spec.tsx +54 -14
  418. package/js/widgets/SyllabusCourseRunsList/index.tsx +5 -8
  419. package/js/widgets/UserLogin/components/UserMenu/DesktopUserMenu.tsx +2 -1
  420. package/js/widgets/UserLogin/components/UserMenu/MobileUserMenu.tsx +2 -1
  421. package/js/widgets/UserLogin/components/UserMenu/index.tsx +6 -5
  422. package/js/widgets/UserLogin/index.not.isJoanieEnabled.spec.tsx +120 -0
  423. package/js/widgets/UserLogin/index.spec.tsx +108 -43
  424. package/js/widgets/UserLogin/index.stories.tsx +29 -0
  425. package/js/widgets/UserLogin/index.tsx +33 -15
  426. package/js/widgets/index.tsx +3 -6
  427. package/mocks/browser.ts +1 -1
  428. package/mocks/handlers/contracts.ts +16 -0
  429. package/mocks/handlers.ts +3 -1
  430. package/package.json +82 -78
  431. package/scss/_main.scss +2 -0
  432. package/scss/colors/_palette.scss +2 -2
  433. package/scss/colors/_theme.scss +6 -16
  434. package/scss/components/_content.scss +1 -1
  435. package/scss/components/_index.scss +24 -14
  436. package/scss/generic/_type.scss +1 -1
  437. package/scss/objects/_characteristics.scss +7 -14
  438. package/scss/objects/_course_glimpses.scss +3 -7
  439. package/scss/objects/_dashboard.scss +28 -0
  440. package/scss/objects/_form.scss +14 -355
  441. package/scss/objects/_index.scss +1 -0
  442. package/scss/objects/_list.scss +8 -0
  443. package/scss/objects/_organization_glimpses.scss +2 -8
  444. package/scss/objects/_selector.scss +1 -0
  445. package/scss/trumps/_bootstrap.scss +4 -0
  446. package/scss/vendors/css/cunningham-tokens.css +89 -25
  447. package/scss/vendors/cunningham-tokens.scss +208 -128
  448. package/js/components/AddressesManagement/AddressForm.spec.tsx +0 -206
  449. package/js/components/AddressesManagement/AddressForm.tsx +0 -169
  450. package/js/components/Button/index.spec.tsx +0 -36
  451. package/js/components/Button/index.stories.tsx +0 -26
  452. package/js/components/Button/index.tsx +0 -38
  453. package/js/components/Form/CheckboxField.stories.tsx +0 -12
  454. package/js/components/Form/Field.stories.config.tsx +0 -24
  455. package/js/components/Form/Inputs.tsx +0 -295
  456. package/js/components/Form/RadioField.stories.tsx +0 -18
  457. package/js/components/Form/SelectField.stories.tsx +0 -27
  458. package/js/components/Form/TextAreaField.stories.tsx +0 -12
  459. package/js/components/Form/TextField.stories.tsx +0 -12
  460. package/js/components/Form/index.spec.tsx +0 -297
  461. package/js/hooks/useProduct.ts +0 -28
  462. package/js/utils/test/mockProductWithOrder.ts +0 -17
  463. package/js/widgets/CourseProductItem/components/PaymentButton/_styles.scss +0 -12
  464. package/js/widgets/CourseProductItem/components/PaymentButton/index.spec.tsx +0 -473
  465. package/js/widgets/CourseProductItem/components/PurchaseButton/index.spec.tsx +0 -259
  466. package/js/widgets/CourseProductItem/components/SaleTunnel/_styles.scss +0 -41
  467. package/js/widgets/CourseProductItem/components/SaleTunnelStepResume/_styles.scss +0 -130
  468. package/js/widgets/CourseProductItem/components/SaleTunnelStepResume/index.spec.tsx +0 -29
  469. package/js/widgets/CourseProductItem/components/SaleTunnelStepResume/index.tsx +0 -59
  470. package/js/widgets/CourseProductItem/components/SaleTunnelStepValidation/index.spec.tsx +0 -71
  471. package/js/widgets/CourseProductItem/contexts/CourseProductContext/index.spec.tsx +0 -35
  472. package/js/widgets/CourseProductItem/contexts/CourseProductContext/index.tsx +0 -45
  473. package/js/widgets/CourseProductItem/index.spec.tsx +0 -486
  474. package/js/widgets/CourseProductItem/index.tsx +0 -205
  475. package/js/widgets/Dashboard/components/DashboardItem/DashboardItemCourseEnrolling.spec.tsx +0 -64
  476. package/js/widgets/Dashboard/components/TeacherCourseDashboardSidebar/index.spec.tsx +0 -105
  477. package/js/widgets/Dashboard/components/TeacherOrganizationDashboardSidebar/index.stories.tsx +0 -28
  478. /package/js/components/AddressesManagement/{validationSchema.spec.ts → AddressForm/validationSchema.spec.ts} +0 -0
  479. /package/js/{widgets/CourseProductItem/components → components}/EnrollmentDate/index.tsx +0 -0
  480. /package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/RegisteredCreditCard/_styles.scss +0 -0
  481. /package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/RegisteredCreditCard/index.spec.tsx +0 -0
  482. /package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepValidation/TargetCourseDetail.tsx +0 -0
  483. /package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/StepBreadcrumb/_styles.scss +0 -0
  484. /package/js/{widgets/CourseProductItem/hooks → hooks}/useStepManager/index.spec.ts +0 -0
  485. /package/js/{widgets/CourseProductItem/hooks → hooks}/useStepManager/index.ts +0 -0
  486. /package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/CourseRunListCell/index.tsx +0 -0
  487. /package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/index.tsx +0 -0
  488. /package/js/pages/{TeacherTrainingDashboard → TeacherDashboardTraining}/_styles.scss +0 -0
  489. /package/js/widgets/Dashboard/components/{TeacherCourseDashboardSidebar → TeacherDashboardCourseSidebar}/_styles.scss +0 -0
  490. /package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/CourseRunSection.tsx +0 -0
  491. /package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/index.tsx +0 -0
  492. /package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/types/payments/payplug.d.ts +0 -0
@@ -2,369 +2,28 @@
2
2
  // Form objects
3
3
  //
4
4
 
5
- //
6
- // For accessibility and user experience purposes, an input should be always
7
- // associated to a label.
8
- //
9
- //
10
5
  // Example of a form class structure:
11
6
  // .form
12
- // .form-group
13
- // .form-field
14
- // .form-field__box
15
- // .form-field__input
16
- // .form-field__label
17
- // .form-field__message--error
18
- // .form-field
19
- // .form-field__box
20
- // .form-field__input
21
- // .form-field__label
22
- // .form-field
23
- // .form-field__box
24
- // .form-field__checkbox-input
25
- // .form-field__checkbox-control
26
- // .form-field__label
27
- // .form-field
28
- // .form-field__box
29
- // .form-field__label
30
- // .form-field__select-container
31
- // .form-field__select-input
32
- // .form-field__select-arrow
33
-
34
- @mixin input-base-style() {
35
- -webkit-appearance: none;
36
- appearance: none;
37
- background: none;
38
- border-radius: 4px;
39
- border: 2px solid r-theme-val(form, input-border);
40
- box-sizing: border-box;
41
- color: r-theme-val(form, input-color);
42
- min-height: 3rem;
43
- display: block;
44
- padding: 1rem 1rem 0 1rem;
45
- width: 100%;
46
-
47
- &::placeholder {
48
- color: transparent;
49
- }
50
-
51
- &:focus {
52
- border-color: r-theme-val(form, input-border-focus);
53
- box-shadow: 0 0 0 2px r-theme-val(form, input-outline);
54
- outline: none;
55
- }
56
-
57
- &[disabled] {
58
- background-color: r-theme-val(form, input-disabled-background);
59
- cursor: not-allowed;
60
- }
61
- }
62
-
7
+ // .form-row
8
+ // .c__field ( should be form-field when cunningham is improved)
63
9
  .form {
64
- &-group {
10
+ .c__field {
11
+ width: auto;
65
12
  display: flex;
66
- flex-direction: row;
67
-
68
- & > .form-field {
69
- flex: 1;
70
- margin-bottom: 2rem;
71
- margin-left: 0.5rem;
72
- margin-right: 0.5rem;
73
- }
74
-
75
- margin: 0 -0.5rem;
13
+ flex: 1;
76
14
  }
77
15
 
78
- &-field {
79
- font-family: $r-font-family-hind;
80
- font-size: 1rem;
81
- line-height: 1rem;
82
- margin: 0;
83
- position: relative;
84
-
85
- &:hover {
86
- // Wanted to use &__input syntax but it compiles as .form-field:hover__input :(
87
- .form-field__input,
88
- .form-field__textarea,
89
- .form-field__select-input,
90
- .form-field__radio-control,
91
- .form-field__checkbox-control {
92
- border-color: r-theme-val(form, input-hover-color);
93
- }
94
-
95
- .form-field__checkbox-input + .form-field__label,
96
- .form-field__radio-input + .form-field__label {
97
- color: r-theme-val(form, input-hover-color);
98
- }
99
- }
100
-
101
- &:not(:last-child) {
102
- margin-bottom: 2rem;
103
- }
104
-
105
- // Common elements
106
- &__box {
107
- display: block;
108
- position: relative;
109
- }
110
-
111
- &__label {
112
- color: r-theme-val(form, input-placeholder);
113
- cursor: pointer;
114
- margin: 0;
115
- position: relative;
116
- }
117
-
118
- // Text inputs & Textarea
119
- &__input,
120
- &__textarea {
121
- @include input-base-style;
122
- }
123
-
124
- &__textarea {
125
- padding-top: 1.5rem;
126
- }
127
-
128
- &__input + &__label,
129
- &__textarea + &__label {
130
- left: 0;
131
- margin: 0 1rem;
132
- max-width: calc(100% - 2rem);
133
- overflow: hidden;
134
- padding: 0.33rem 0;
135
- pointer-events: none;
136
- position: absolute;
137
- text-overflow: ellipsis;
138
- transform-origin: top left;
139
- transition: transform 300ms $r-ease-out;
140
- white-space: nowrap;
141
- width: 100%;
142
- }
143
-
144
- &__input + &__label {
145
- top: 50%;
146
- transform: translateY(-50%);
147
- }
148
-
149
- &__textarea + &__label {
150
- top: 0.5rem;
151
- z-index: 1;
152
- }
153
-
154
- &__input:focus + &__label,
155
- &__input:not(:placeholder-shown) + &__label {
156
- transform: scale(0.66) translateY(-100%);
157
- }
158
-
159
- &__textarea:focus + &__label,
160
- &__textarea:not(:placeholder-shown) + &__label {
161
- transform: scale(0.66) translateY(-0.25rem);
162
- }
163
-
164
- // Checkbox & Radio
165
- &__checkbox-input,
166
- &__radio-input {
167
- opacity: 0;
168
- position: absolute;
169
- z-index: -1;
170
-
171
- &[disabled] ~ label {
172
- cursor: not-allowed;
173
-
174
- span {
175
- background-color: r-theme-val(form, input-disabled-background);
176
- }
177
- }
178
- }
179
-
180
- &__checkbox-input + &__label,
181
- &__radio-input + &__label {
182
- color: r-theme-val(form, input-color);
183
- }
184
-
185
- &__checkbox-input:focus + &__label > &__checkbox-control,
186
- &__radio-input:focus + &__label > &__radio-control {
187
- box-shadow: 0 0 0 2px r-theme-val(form, input-outline);
188
- }
189
-
190
- &__checkbox-control,
191
- &__radio-control {
192
- $tick-size: 1.125rem;
193
- align-items: center;
194
- background-color: r-theme-val(form, input-unchecked-background);
195
- border-radius: 100vw;
196
- border: 2px solid r-theme-val(form, input-unchecked-border);
197
- box-sizing: border-box;
198
- color: r-theme-val(form, input-unchecked-color);
199
- display: inline-flex;
200
- height: $tick-size;
201
- justify-content: center;
202
- margin-right: 0.625rem;
203
- position: relative;
204
- vertical-align: middle;
205
- width: $tick-size;
206
- }
207
-
208
- &__checkbox-control {
209
- svg {
210
- fill: currentColor;
211
- max-height: 100%;
212
- transform: translate(-$onepixel * 0.45, $onepixel * 0.45);
213
- width: 65%;
214
- }
215
- }
216
-
217
- &__radio-control:before {
218
- background: transparent;
219
- border-radius: 100vw;
220
- content: '';
221
- display: block;
222
- height: 60%;
223
- left: 50%;
224
- position: absolute;
225
- top: 50%;
226
- transform-origin: center center;
227
- transform: translate(-50%, -50%) scale(calc(100 / 60));
228
- transition: transform 400ms $r-ease-out;
229
- width: 60%;
230
- }
231
-
232
- &__checkbox-input:checked + &__label > &__checkbox-control,
233
- &__radio-input:checked + &__label > &__radio-control {
234
- background-color: r-theme-val(form, input-checked-background);
235
- border-color: r-theme-val(form, input-checked-border);
236
- color: r-theme-val(form, input-checked-color);
237
- }
238
-
239
- &__radio-input:checked + &__label > &__radio-control:before {
240
- background-color: r-theme-val(form, input-checked-color);
241
- transform: translate(-50%, -50%) scale(1);
242
- }
243
-
244
- // Select
245
- &__select-container {
246
- display: block;
247
- position: relative;
248
- }
249
-
250
- &__select-input {
251
- @include input-base-style;
252
- background-color: transparent;
253
- cursor: pointer;
254
- line-height: 1em;
255
- padding: 1rem 1rem 0.75rem 1rem;
256
- position: relative;
257
- }
258
-
259
- &__select-input + &__select-arrow {
260
- border-left: 6px solid transparent;
261
- border-radius: 6px;
262
- border-right: 6px solid transparent;
263
- border-top: 6px solid currentColor;
264
- height: 6px;
265
- pointer-events: none;
266
- position: absolute;
267
- right: 6px;
268
- top: 50%;
269
- transform: translateY(-50%);
270
- width: 6px;
271
- }
272
-
273
- &__label + &__select-container {
274
- margin-top: 0.5rem;
275
- }
276
-
277
- // Message
278
- &__message {
279
- color: r-theme-val(form, message-color);
280
- display: inline-block;
281
- font-size: 0.875rem;
282
- line-height: 1.75em;
283
- padding: 0 2px;
284
- text-align: justify;
285
-
286
- &__icon {
287
- fill: currentColor;
288
- height: 1em;
289
- margin-right: 0.25rem;
290
- width: 1em;
291
- }
292
- }
293
-
294
- // == Modifiers
295
- &--minimal {
296
- display: inline-block;
297
- margin: 0;
298
- width: inherit;
299
-
300
- .form-field__label {
301
- position: absolute;
302
- left: -9999rem;
303
- }
304
-
305
- .form-field__select-container {
306
- display: inline-block;
307
- margin-top: 0;
308
- }
309
-
310
- .form-field__select-input {
311
- border: none;
312
- box-sizing: content-box;
313
- min-height: inherit;
314
- padding: 0 1.5rem 0 0;
315
- text-overflow: ellipsis;
316
- }
317
- }
318
-
319
- &--align-right {
320
- text-align: right;
321
-
322
- .form-field__input,
323
- .form-field__select-input,
324
- .form-field__textarea {
325
- text-align: right;
326
- }
327
-
328
- .form-field__input + .form-field__label,
329
- .form-field__textarea + .form-field__label {
330
- left: inherit;
331
- right: 0;
332
- transform-origin: top right;
333
- }
334
- }
335
-
336
- // Required
337
- &--required &__label:after {
338
- color: r-theme-val(form, required-note-color);
339
- content: '*';
340
- position: absolute;
341
- vertical-align: super;
342
- }
343
-
344
- // Error
345
- &--error {
346
- .form-field__label {
347
- color: r-theme-val(form, input-color-error);
348
- }
349
-
350
- .form-field__input,
351
- .form-field__textarea,
352
- .form-field__select-input,
353
- .form-field__radio-control,
354
- .form-field__checkbox-control {
355
- border-color: r-theme-val(form, input-border-error);
356
- }
357
-
358
- .form-field__message {
359
- color: r-theme-val(form, input-color-error);
360
- }
16
+ &-row {
17
+ display: flex;
18
+ flex-direction: row;
19
+ gap: rem-calc(16px);
20
+ margin-bottom: rem-calc(10px);
21
+ &:last-child {
22
+ margin-bottom: 0;
361
23
  }
362
- }
363
24
 
364
- &__required-fields-note {
365
- font-style: italic;
366
- span {
367
- color: r-theme-val(form, required-note-color);
25
+ @include media-breakpoint-down(xs) {
26
+ flex-direction: column;
368
27
  }
369
28
  }
370
29
  }
@@ -2,6 +2,7 @@
2
2
  @import './banner';
3
3
  @import './breadcrumbs';
4
4
  @import './dashboard';
5
+ @import './list';
5
6
  @import './course_glimpses';
6
7
  @import './blogpost_glimpses';
7
8
  @import './organization_glimpses';
@@ -0,0 +1,8 @@
1
+ .list {
2
+ &__count-description {
3
+ flex-basis: 100%; // Should not wrap as mozaic list elements
4
+ color: r-theme-val(course-glimpse-list, count-color);
5
+ text-align: right;
6
+ align-self: self-end;
7
+ }
8
+ }
@@ -131,18 +131,12 @@
131
131
  }
132
132
 
133
133
  &__logo {
134
- position: relative;
134
+ height: 100%;
135
135
  width: 100%;
136
- padding-bottom: 56.25%; // Aspect ratio 16/9
137
136
 
138
137
  & > img {
139
- position: absolute;
140
- top: 0;
141
- right: 0;
142
- bottom: 0;
143
- left: 0;
144
- width: 100%;
145
138
  height: 100%;
139
+ width: 100%;
146
140
  object-fit: contain;
147
141
  object-position: center;
148
142
  }
@@ -66,6 +66,7 @@
66
66
  min-width: 10rem;
67
67
  padding: 0.5rem 1.5rem;
68
68
  text-align: left;
69
+ white-space: nowrap;
69
70
 
70
71
  &:hover {
71
72
  color: r-theme-val(selector, hover-color);
@@ -0,0 +1,4 @@
1
+ // Without this, bootstrap overrides Cunningham buttons style.
2
+ a.c__button:hover {
3
+ text-decoration: none;
4
+ }
@@ -1,15 +1,5 @@
1
1
  :root {
2
- --c--theme--colors--primary-text: #ffffff;
3
- --c--theme--colors--primary-100: #ffcad1;
4
- --c--theme--colors--primary-200: #f19597;
5
- --c--theme--colors--primary-300: #e86a6f;
6
- --c--theme--colors--primary-400: #f2444b;
7
- --c--theme--colors--primary-500: #f72c30;
8
- --c--theme--colors--primary-600: #e81f2f;
9
- --c--theme--colors--primary-700: #d60f29;
10
- --c--theme--colors--primary-800: #c90022;
11
- --c--theme--colors--primary-900: #bb0014;
12
- --c--theme--colors--secondary-text: #555f6b;
2
+ --c--theme--colors--secondary-text: var(--c--theme--colors--greyscale-700);
13
3
  --c--theme--colors--secondary-100: #eff8ff;
14
4
  --c--theme--colors--secondary-200: #eaf3fd;
15
5
  --c--theme--colors--secondary-300: #e2ebf5;
@@ -19,7 +9,16 @@
19
9
  --c--theme--colors--secondary-700: #656c75;
20
10
  --c--theme--colors--secondary-800: #454d55;
21
11
  --c--theme--colors--secondary-900: #242b32;
22
- --c--theme--colors--greyscale-000: #ffffff;
12
+ --c--theme--colors--info-text: var(--c--theme--colors--greyscale-000);
13
+ --c--theme--colors--info-100: #ebf2fc;
14
+ --c--theme--colors--info-200: #8cb5ea;
15
+ --c--theme--colors--info-300: #5894e1;
16
+ --c--theme--colors--info-400: #377fdb;
17
+ --c--theme--colors--info-500: #055fd2;
18
+ --c--theme--colors--info-600: #0556bf;
19
+ --c--theme--colors--info-700: #044395;
20
+ --c--theme--colors--info-800: #033474;
21
+ --c--theme--colors--info-900: #022858;
23
22
  --c--theme--colors--greyscale-100: #fafafb;
24
23
  --c--theme--colors--greyscale-200: #f3f4f4;
25
24
  --c--theme--colors--greyscale-300: #e7e8ea;
@@ -29,7 +28,16 @@
29
28
  --c--theme--colors--greyscale-700: #555f6b;
30
29
  --c--theme--colors--greyscale-800: #303c4b;
31
30
  --c--theme--colors--greyscale-900: #0c1a2b;
32
- --c--theme--colors--success-text: #ffffff;
31
+ --c--theme--colors--greyscale-000: #ffffff;
32
+ --c--theme--colors--primary-100: #ffcad1;
33
+ --c--theme--colors--primary-200: #f19597;
34
+ --c--theme--colors--primary-300: #e86a6f;
35
+ --c--theme--colors--primary-400: #f2444b;
36
+ --c--theme--colors--primary-500: #f72c30;
37
+ --c--theme--colors--primary-600: #e81f2f;
38
+ --c--theme--colors--primary-700: #d60f29;
39
+ --c--theme--colors--primary-800: #c90022;
40
+ --c--theme--colors--primary-900: #bb0014;
33
41
  --c--theme--colors--success-100: #effcd3;
34
42
  --c--theme--colors--success-200: #dbfaa9;
35
43
  --c--theme--colors--success-300: #bef27c;
@@ -39,17 +47,6 @@
39
47
  --c--theme--colors--success-700: #419a14;
40
48
  --c--theme--colors--success-800: #2c7c0c;
41
49
  --c--theme--colors--success-900: #1d6607;
42
- --c--theme--colors--info-text: #ffffff;
43
- --c--theme--colors--info-100: #ebf2fc;
44
- --c--theme--colors--info-200: #8cb5ea;
45
- --c--theme--colors--info-300: #5894e1;
46
- --c--theme--colors--info-400: #377fdb;
47
- --c--theme--colors--info-500: #055fd2;
48
- --c--theme--colors--info-600: #0556bf;
49
- --c--theme--colors--info-700: #044395;
50
- --c--theme--colors--info-800: #033474;
51
- --c--theme--colors--info-900: #022858;
52
- --c--theme--colors--warning-text: #ffffff;
53
50
  --c--theme--colors--warning-100: #fff8cd;
54
51
  --c--theme--colors--warning-200: #ffef9b;
55
52
  --c--theme--colors--warning-300: #ffe469;
@@ -59,7 +56,6 @@
59
56
  --c--theme--colors--warning-700: #b78702;
60
57
  --c--theme--colors--warning-800: #936901;
61
58
  --c--theme--colors--warning-900: #7a5400;
62
- --c--theme--colors--danger-text: #ffffff;
63
59
  --c--theme--colors--danger-100: #f4b0b0;
64
60
  --c--theme--colors--danger-200: #ee8a8a;
65
61
  --c--theme--colors--danger-300: #e65454;
@@ -69,6 +65,10 @@
69
65
  --c--theme--colors--danger-700: #9b0000;
70
66
  --c--theme--colors--danger-800: #780000;
71
67
  --c--theme--colors--danger-900: #5c0000;
68
+ --c--theme--colors--primary-text: var(--c--theme--colors--greyscale-000);
69
+ --c--theme--colors--success-text: var(--c--theme--colors--greyscale-000);
70
+ --c--theme--colors--warning-text: var(--c--theme--colors--greyscale-000);
71
+ --c--theme--colors--danger-text: var(--c--theme--colors--greyscale-000);
72
72
  --c--theme--colors--black: #090909;
73
73
  --c--theme--colors--dark-grey: #232323;
74
74
  --c--theme--colors--charcoal: #29303b;
@@ -106,6 +106,15 @@
106
106
  --c--theme--font--weights--black: 800;
107
107
  --c--theme--font--families--base: Hind;
108
108
  --c--theme--font--families--accent: Montserrat;
109
+ --c--theme--font--letterspacings--h1: normal;
110
+ --c--theme--font--letterspacings--h2: normal;
111
+ --c--theme--font--letterspacings--h3: normal;
112
+ --c--theme--font--letterspacings--h4: normal;
113
+ --c--theme--font--letterspacings--h5: 1px;
114
+ --c--theme--font--letterspacings--h6: normal;
115
+ --c--theme--font--letterspacings--l: normal;
116
+ --c--theme--font--letterspacings--m: normal;
117
+ --c--theme--font--letterspacings--s: normal;
109
118
  --c--theme--spacings--xl: 4rem;
110
119
  --c--theme--spacings--l: 3rem;
111
120
  --c--theme--spacings--b: 1.625rem;
@@ -116,4 +125,59 @@
116
125
  --c--theme--transitions--ease-out: cubic-bezier(0.33, 1, 0.68, 1);
117
126
  --c--theme--transitions--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
118
127
  --c--theme--transitions--duration: 250ms;
128
+ --c--theme--breakpoints--xs: 0;
129
+ --c--theme--breakpoints--sm: 576px;
130
+ --c--theme--breakpoints--md: 768px;
131
+ --c--theme--breakpoints--lg: 992px;
132
+ --c--theme--breakpoints--xl: 1200px;
133
+ --c--theme--breakpoints--xxl: 1400px;
134
+ --c--components--button--font-family: Montserrat;
135
+ }
136
+ .cunningham-theme--dark {
137
+ --c--theme--colors--greyscale-100: #182536;
138
+ --c--theme--colors--greyscale-200: #303c4b;
139
+ --c--theme--colors--greyscale-300: #555f6b;
140
+ --c--theme--colors--greyscale-400: #79818a;
141
+ --c--theme--colors--greyscale-500: #9ea3aa;
142
+ --c--theme--colors--greyscale-600: #c2c6ca;
143
+ --c--theme--colors--greyscale-700: #e7e8ea;
144
+ --c--theme--colors--greyscale-800: #f3f4f4;
145
+ --c--theme--colors--greyscale-900: #fafafb;
146
+ --c--theme--colors--greyscale-000: #0c1a2b;
147
+ --c--theme--colors--primary-100: #3b4c62;
148
+ --c--theme--colors--primary-200: #4d6481;
149
+ --c--theme--colors--primary-300: #6381a6;
150
+ --c--theme--colors--primary-400: #7fa5d5;
151
+ --c--theme--colors--primary-500: #8cb5ea;
152
+ --c--theme--colors--primary-600: #a3c4ee;
153
+ --c--theme--colors--primary-700: #c3d8f4;
154
+ --c--theme--colors--primary-800: #dde9f8;
155
+ --c--theme--colors--primary-900: #f4f8fd;
156
+ --c--theme--colors--success-100: #eef8d7;
157
+ --c--theme--colors--success-200: #d9f1b2;
158
+ --c--theme--colors--success-300: #bde985;
159
+ --c--theme--colors--success-400: #a0e25d;
160
+ --c--theme--colors--success-500: #76d628;
161
+ --c--theme--colors--success-600: #5bb520;
162
+ --c--theme--colors--success-700: #43941a;
163
+ --c--theme--colors--success-800: #307414;
164
+ --c--theme--colors--success-900: #225d10;
165
+ --c--theme--colors--warning-100: #f7f3d5;
166
+ --c--theme--colors--warning-200: #f0e5aa;
167
+ --c--theme--colors--warning-300: #e8d680;
168
+ --c--theme--colors--warning-400: #e3c95f;
169
+ --c--theme--colors--warning-500: #d9b32b;
170
+ --c--theme--colors--warning-600: #bd9721;
171
+ --c--theme--colors--warning-700: #9d7b1c;
172
+ --c--theme--colors--warning-800: #7e6016;
173
+ --c--theme--colors--warning-900: #684d12;
174
+ --c--theme--colors--danger-100: #f8d0d0;
175
+ --c--theme--colors--danger-200: #f09898;
176
+ --c--theme--colors--danger-300: #f09898;
177
+ --c--theme--colors--danger-400: #ed8585;
178
+ --c--theme--colors--danger-500: #e96666;
179
+ --c--theme--colors--danger-600: #dd6666;
180
+ --c--theme--colors--danger-700: #c36666;
181
+ --c--theme--colors--danger-800: #ae6666;
182
+ --c--theme--colors--danger-900: #9d6666;
119
183
  }