@openedx/frontend-app-catalog 1.0.0-alpha.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 (390) hide show
  1. package/LICENSE +661 -0
  2. package/README.rst +300 -0
  3. package/dist/Main.d.ts +3 -0
  4. package/dist/Main.js +8 -0
  5. package/dist/Main.js.map +1 -0
  6. package/dist/app.d.ts +3 -0
  7. package/dist/app.js +22 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/assets/images/no-course-image.svg +4 -0
  10. package/dist/assets/scss/_animations.scss +23 -0
  11. package/dist/catalog/CatalogPage.d.ts +2 -0
  12. package/dist/catalog/CatalogPage.js +64 -0
  13. package/dist/catalog/CatalogPage.js.map +1 -0
  14. package/dist/catalog/hooks/types.d.ts +24 -0
  15. package/dist/catalog/hooks/types.js +2 -0
  16. package/dist/catalog/hooks/types.js.map +1 -0
  17. package/dist/catalog/hooks/useCatalog.d.ts +29 -0
  18. package/dist/catalog/hooks/useCatalog.js +52 -0
  19. package/dist/catalog/hooks/useCatalog.js.map +1 -0
  20. package/dist/catalog/hooks/useCourseData.d.ts +12 -0
  21. package/dist/catalog/hooks/useCourseData.js +21 -0
  22. package/dist/catalog/hooks/useCourseData.js.map +1 -0
  23. package/dist/catalog/hooks/useDebouncedSearchInput.d.ts +7 -0
  24. package/dist/catalog/hooks/useDebouncedSearchInput.js +26 -0
  25. package/dist/catalog/hooks/useDebouncedSearchInput.js.map +1 -0
  26. package/dist/catalog/hooks/useFilter.d.ts +18 -0
  27. package/dist/catalog/hooks/useFilter.js +58 -0
  28. package/dist/catalog/hooks/useFilter.js.map +1 -0
  29. package/dist/catalog/hooks/usePagination.d.ts +13 -0
  30. package/dist/catalog/hooks/usePagination.js +25 -0
  31. package/dist/catalog/hooks/usePagination.js.map +1 -0
  32. package/dist/catalog/hooks/useSearch.d.ts +16 -0
  33. package/dist/catalog/hooks/useSearch.js +63 -0
  34. package/dist/catalog/hooks/useSearch.js.map +1 -0
  35. package/dist/catalog/messages.d.ts +68 -0
  36. package/dist/catalog/messages.js +70 -0
  37. package/dist/catalog/messages.js.map +1 -0
  38. package/dist/catalog/types.d.ts +6 -0
  39. package/dist/catalog/types.js +2 -0
  40. package/dist/catalog/types.js.map +1 -0
  41. package/dist/catalog/utils.d.ts +25 -0
  42. package/dist/catalog/utils.js +82 -0
  43. package/dist/catalog/utils.js.map +1 -0
  44. package/dist/constants.d.ts +18 -0
  45. package/dist/constants.js +15 -0
  46. package/dist/constants.js.map +1 -0
  47. package/dist/course-about/CourseAboutPage.d.ts +2 -0
  48. package/dist/course-about/CourseAboutPage.js +39 -0
  49. package/dist/course-about/CourseAboutPage.js.map +1 -0
  50. package/dist/course-about/CourseAboutPage.scss +36 -0
  51. package/dist/course-about/course-intro/CourseIntro.d.ts +4 -0
  52. package/dist/course-about/course-intro/CourseIntro.js +19 -0
  53. package/dist/course-about/course-intro/CourseIntro.js.map +1 -0
  54. package/dist/course-about/course-intro/components/EnrolledStatus.d.ts +2 -0
  55. package/dist/course-about/course-intro/components/EnrolledStatus.js +13 -0
  56. package/dist/course-about/course-intro/components/EnrolledStatus.js.map +1 -0
  57. package/dist/course-about/course-intro/components/EnrollmentButton.d.ts +2 -0
  58. package/dist/course-about/course-intro/components/EnrollmentButton.js +12 -0
  59. package/dist/course-about/course-intro/components/EnrollmentButton.js.map +1 -0
  60. package/dist/course-about/course-intro/components/StatusMessage.d.ts +2 -0
  61. package/dist/course-about/course-intro/components/StatusMessage.js +12 -0
  62. package/dist/course-about/course-intro/components/StatusMessage.js.map +1 -0
  63. package/dist/course-about/course-intro/components/index.d.ts +3 -0
  64. package/dist/course-about/course-intro/components/index.js +4 -0
  65. package/dist/course-about/course-intro/components/index.js.map +1 -0
  66. package/dist/course-about/course-intro/components/types.d.ts +18 -0
  67. package/dist/course-about/course-intro/components/types.js +2 -0
  68. package/dist/course-about/course-intro/components/types.js.map +1 -0
  69. package/dist/course-about/course-intro/constants.d.ts +10 -0
  70. package/dist/course-about/course-intro/constants.js +12 -0
  71. package/dist/course-about/course-intro/constants.js.map +1 -0
  72. package/dist/course-about/course-intro/course-media/CourseMedia.d.ts +3 -0
  73. package/dist/course-about/course-intro/course-media/CourseMedia.js +17 -0
  74. package/dist/course-about/course-intro/course-media/CourseMedia.js.map +1 -0
  75. package/dist/course-about/course-intro/course-media/CourseMedia.scss +24 -0
  76. package/dist/course-about/course-intro/course-media/messages.d.ts +8 -0
  77. package/dist/course-about/course-intro/course-media/messages.js +10 -0
  78. package/dist/course-about/course-intro/course-media/messages.js.map +1 -0
  79. package/dist/course-about/course-intro/course-media/types.d.ts +8 -0
  80. package/dist/course-about/course-intro/course-media/types.js +2 -0
  81. package/dist/course-about/course-intro/course-media/types.js.map +1 -0
  82. package/dist/course-about/course-intro/course-media/utils.d.ts +12 -0
  83. package/dist/course-about/course-intro/course-media/utils.js +18 -0
  84. package/dist/course-about/course-intro/course-media/utils.js.map +1 -0
  85. package/dist/course-about/course-intro/hooks/index.d.ts +2 -0
  86. package/dist/course-about/course-intro/hooks/index.js +3 -0
  87. package/dist/course-about/course-intro/hooks/index.js.map +1 -0
  88. package/dist/course-about/course-intro/hooks/types.d.ts +16 -0
  89. package/dist/course-about/course-intro/hooks/types.js +2 -0
  90. package/dist/course-about/course-intro/hooks/types.js.map +1 -0
  91. package/dist/course-about/course-intro/hooks/useEnrollmentActions.d.ts +7 -0
  92. package/dist/course-about/course-intro/hooks/useEnrollmentActions.js +47 -0
  93. package/dist/course-about/course-intro/hooks/useEnrollmentActions.js.map +1 -0
  94. package/dist/course-about/course-intro/hooks/useEnrollmentStatus.d.ts +4 -0
  95. package/dist/course-about/course-intro/hooks/useEnrollmentStatus.js +35 -0
  96. package/dist/course-about/course-intro/hooks/useEnrollmentStatus.js.map +1 -0
  97. package/dist/course-about/course-intro/messages.d.ts +43 -0
  98. package/dist/course-about/course-intro/messages.js +45 -0
  99. package/dist/course-about/course-intro/messages.js.map +1 -0
  100. package/dist/course-about/course-intro/utils.d.ts +4 -0
  101. package/dist/course-about/course-intro/utils.js +7 -0
  102. package/dist/course-about/course-intro/utils.js.map +1 -0
  103. package/dist/course-about/course-overview/index.d.ts +2 -0
  104. package/dist/course-about/course-overview/index.js +21 -0
  105. package/dist/course-about/course-overview/index.js.map +1 -0
  106. package/dist/course-about/course-overview/types.d.ts +4 -0
  107. package/dist/course-about/course-overview/types.js +2 -0
  108. package/dist/course-about/course-overview/types.js.map +1 -0
  109. package/dist/course-about/course-overview/utils.d.ts +6 -0
  110. package/dist/course-about/course-overview/utils.js +12 -0
  111. package/dist/course-about/course-overview/utils.js.map +1 -0
  112. package/dist/course-about/course-sidebar/CourseSidebar.d.ts +5 -0
  113. package/dist/course-about/course-sidebar/CourseSidebar.js +7 -0
  114. package/dist/course-about/course-sidebar/CourseSidebar.js.map +1 -0
  115. package/dist/course-about/course-sidebar/sidebar-details/SidebarDetails.d.ts +5 -0
  116. package/dist/course-about/course-sidebar/sidebar-details/SidebarDetails.js +38 -0
  117. package/dist/course-about/course-sidebar/sidebar-details/SidebarDetails.js.map +1 -0
  118. package/dist/course-about/course-sidebar/sidebar-details/SidebarDetailsItem.d.ts +3 -0
  119. package/dist/course-about/course-sidebar/sidebar-details/SidebarDetailsItem.js +5 -0
  120. package/dist/course-about/course-sidebar/sidebar-details/SidebarDetailsItem.js.map +1 -0
  121. package/dist/course-about/course-sidebar/sidebar-details/constants.d.ts +7 -0
  122. package/dist/course-about/course-sidebar/sidebar-details/constants.js +8 -0
  123. package/dist/course-about/course-sidebar/sidebar-details/constants.js.map +1 -0
  124. package/dist/course-about/course-sidebar/sidebar-details/messages.d.ts +43 -0
  125. package/dist/course-about/course-sidebar/sidebar-details/messages.js +45 -0
  126. package/dist/course-about/course-sidebar/sidebar-details/messages.js.map +1 -0
  127. package/dist/course-about/course-sidebar/sidebar-details/types.d.ts +8 -0
  128. package/dist/course-about/course-sidebar/sidebar-details/types.js +2 -0
  129. package/dist/course-about/course-sidebar/sidebar-details/types.js.map +1 -0
  130. package/dist/course-about/course-sidebar/sidebar-details/utils.d.ts +37 -0
  131. package/dist/course-about/course-sidebar/sidebar-details/utils.js +49 -0
  132. package/dist/course-about/course-sidebar/sidebar-details/utils.js.map +1 -0
  133. package/dist/course-about/course-sidebar/sidebar-social/SidebarSocial.d.ts +5 -0
  134. package/dist/course-about/course-sidebar/sidebar-social/SidebarSocial.js +14 -0
  135. package/dist/course-about/course-sidebar/sidebar-social/SidebarSocial.js.map +1 -0
  136. package/dist/course-about/course-sidebar/sidebar-social/SocialLinks.d.ts +5 -0
  137. package/dist/course-about/course-sidebar/sidebar-social/SocialLinks.js +5 -0
  138. package/dist/course-about/course-sidebar/sidebar-social/SocialLinks.js.map +1 -0
  139. package/dist/course-about/course-sidebar/sidebar-social/messages.d.ts +43 -0
  140. package/dist/course-about/course-sidebar/sidebar-social/messages.js +45 -0
  141. package/dist/course-about/course-sidebar/sidebar-social/messages.js.map +1 -0
  142. package/dist/course-about/course-sidebar/sidebar-social/types.d.ts +7 -0
  143. package/dist/course-about/course-sidebar/sidebar-social/types.js +2 -0
  144. package/dist/course-about/course-sidebar/sidebar-social/types.js.map +1 -0
  145. package/dist/course-about/course-sidebar/sidebar-social/utils.d.ts +23 -0
  146. package/dist/course-about/course-sidebar/sidebar-social/utils.js +71 -0
  147. package/dist/course-about/course-sidebar/sidebar-social/utils.js.map +1 -0
  148. package/dist/course-about/data/api.d.ts +10 -0
  149. package/dist/course-about/data/api.js +36 -0
  150. package/dist/course-about/data/api.js.map +1 -0
  151. package/dist/course-about/data/hooks.d.ts +3 -0
  152. package/dist/course-about/data/hooks.js +35 -0
  153. package/dist/course-about/data/hooks.js.map +1 -0
  154. package/dist/course-about/data/types.d.ts +10 -0
  155. package/dist/course-about/data/types.js +2 -0
  156. package/dist/course-about/data/types.js.map +1 -0
  157. package/dist/course-about/data/urls.d.ts +8 -0
  158. package/dist/course-about/data/urls.js +10 -0
  159. package/dist/course-about/data/urls.js.map +1 -0
  160. package/dist/course-about/layout.d.ts +31 -0
  161. package/dist/course-about/layout.js +11 -0
  162. package/dist/course-about/layout.js.map +1 -0
  163. package/dist/course-about/messages.d.ts +18 -0
  164. package/dist/course-about/messages.js +20 -0
  165. package/dist/course-about/messages.js.map +1 -0
  166. package/dist/course-about/types.d.ts +125 -0
  167. package/dist/course-about/types.js +2 -0
  168. package/dist/course-about/types.js.map +1 -0
  169. package/dist/data/course-list-search/api.d.ts +6 -0
  170. package/dist/data/course-list-search/api.js +33 -0
  171. package/dist/data/course-list-search/api.js.map +1 -0
  172. package/dist/data/course-list-search/constants.d.ts +2 -0
  173. package/dist/data/course-list-search/constants.js +3 -0
  174. package/dist/data/course-list-search/constants.js.map +1 -0
  175. package/dist/data/course-list-search/hooks.d.ts +5 -0
  176. package/dist/data/course-list-search/hooks.js +47 -0
  177. package/dist/data/course-list-search/hooks.js.map +1 -0
  178. package/dist/data/course-list-search/types.d.ts +65 -0
  179. package/dist/data/course-list-search/types.js +2 -0
  180. package/dist/data/course-list-search/types.js.map +1 -0
  181. package/dist/data/course-list-search/urls.d.ts +2 -0
  182. package/dist/data/course-list-search/urls.js +4 -0
  183. package/dist/data/course-list-search/urls.js.map +1 -0
  184. package/dist/data/course-list-search/utils.d.ts +9 -0
  185. package/dist/data/course-list-search/utils.js +40 -0
  186. package/dist/data/course-list-search/utils.js.map +1 -0
  187. package/dist/generic/alert-notification/index.d.ts +2 -0
  188. package/dist/generic/alert-notification/index.js +5 -0
  189. package/dist/generic/alert-notification/index.js.map +1 -0
  190. package/dist/generic/alert-notification/types.d.ts +6 -0
  191. package/dist/generic/alert-notification/types.js +2 -0
  192. package/dist/generic/alert-notification/types.js.map +1 -0
  193. package/dist/generic/course-card/index.d.ts +2 -0
  194. package/dist/generic/course-card/index.js +27 -0
  195. package/dist/generic/course-card/index.js.map +1 -0
  196. package/dist/generic/course-card/messages.d.ts +8 -0
  197. package/dist/generic/course-card/messages.js +10 -0
  198. package/dist/generic/course-card/messages.js.map +1 -0
  199. package/dist/generic/course-card/types.d.ts +35 -0
  200. package/dist/generic/course-card/types.js +2 -0
  201. package/dist/generic/course-card/types.js.map +1 -0
  202. package/dist/generic/course-card/utils.d.ts +10 -0
  203. package/dist/generic/course-card/utils.js +24 -0
  204. package/dist/generic/course-card/utils.js.map +1 -0
  205. package/dist/generic/index.d.ts +5 -0
  206. package/dist/generic/index.js +6 -0
  207. package/dist/generic/index.js.map +1 -0
  208. package/dist/generic/loading-spinner/index.d.ts +3 -0
  209. package/dist/generic/loading-spinner/index.js +10 -0
  210. package/dist/generic/loading-spinner/index.js.map +1 -0
  211. package/dist/generic/loading-spinner/messages.d.ts +8 -0
  212. package/dist/generic/loading-spinner/messages.js +10 -0
  213. package/dist/generic/loading-spinner/messages.js.map +1 -0
  214. package/dist/generic/loading-spinner/types.d.ts +3 -0
  215. package/dist/generic/loading-spinner/types.js +2 -0
  216. package/dist/generic/loading-spinner/types.js.map +1 -0
  217. package/dist/generic/sub-header/index.d.ts +2 -0
  218. package/dist/generic/sub-header/index.js +4 -0
  219. package/dist/generic/sub-header/index.js.map +1 -0
  220. package/dist/generic/sub-header/types.d.ts +4 -0
  221. package/dist/generic/sub-header/types.js +2 -0
  222. package/dist/generic/sub-header/types.js.map +1 -0
  223. package/dist/generic/video-modal/index.d.ts +2 -0
  224. package/dist/generic/video-modal/index.js +10 -0
  225. package/dist/generic/video-modal/index.js.map +1 -0
  226. package/dist/generic/video-modal/messages.d.ts +13 -0
  227. package/dist/generic/video-modal/messages.js +15 -0
  228. package/dist/generic/video-modal/messages.js.map +1 -0
  229. package/dist/generic/video-modal/types.d.ts +6 -0
  230. package/dist/generic/video-modal/types.js +2 -0
  231. package/dist/generic/video-modal/types.js.map +1 -0
  232. package/dist/home/HomePage.d.ts +2 -0
  233. package/dist/home/HomePage.js +14 -0
  234. package/dist/home/HomePage.js.map +1 -0
  235. package/dist/home/components/courses-list/CoursesList.d.ts +2 -0
  236. package/dist/home/components/courses-list/CoursesList.js +50 -0
  237. package/dist/home/components/courses-list/CoursesList.js.map +1 -0
  238. package/dist/home/components/courses-list/messages.d.ts +23 -0
  239. package/dist/home/components/courses-list/messages.js +25 -0
  240. package/dist/home/components/courses-list/messages.js.map +1 -0
  241. package/dist/home/components/home-banner/HomeBanner.d.ts +2 -0
  242. package/dist/home/components/home-banner/HomeBanner.js +25 -0
  243. package/dist/home/components/home-banner/HomeBanner.js.map +1 -0
  244. package/dist/home/components/home-banner/HomePageOverlay.d.ts +2 -0
  245. package/dist/home/components/home-banner/HomePageOverlay.js +10 -0
  246. package/dist/home/components/home-banner/HomePageOverlay.js.map +1 -0
  247. package/dist/home/components/home-banner/HomePromoVideoBtn.d.ts +3 -0
  248. package/dist/home/components/home-banner/HomePromoVideoBtn.js +10 -0
  249. package/dist/home/components/home-banner/HomePromoVideoBtn.js.map +1 -0
  250. package/dist/home/components/home-banner/index.scss +20 -0
  251. package/dist/home/components/home-banner/messages.d.ts +28 -0
  252. package/dist/home/components/home-banner/messages.js +30 -0
  253. package/dist/home/components/home-banner/messages.js.map +1 -0
  254. package/dist/home/components/home-banner/types.d.ts +3 -0
  255. package/dist/home/components/home-banner/types.js +2 -0
  256. package/dist/home/components/home-banner/types.js.map +1 -0
  257. package/dist/home/components/index.d.ts +2 -0
  258. package/dist/home/components/index.js +3 -0
  259. package/dist/home/components/index.js.map +1 -0
  260. package/dist/home/constants.d.ts +1 -0
  261. package/dist/home/constants.js +2 -0
  262. package/dist/home/constants.js.map +1 -0
  263. package/dist/home/messages.d.ts +8 -0
  264. package/dist/home/messages.js +10 -0
  265. package/dist/home/messages.js.map +1 -0
  266. package/dist/i18n/index.d.ts +1 -0
  267. package/dist/i18n/index.js +2 -0
  268. package/dist/i18n/index.js.map +1 -0
  269. package/dist/index.d.ts +23 -0
  270. package/dist/index.js +3 -0
  271. package/dist/index.js.map +1 -0
  272. package/dist/routes.d.ts +28 -0
  273. package/dist/routes.js +62 -0
  274. package/dist/routes.js.map +1 -0
  275. package/dist/slots/CourseAboutCourseImageSlot/index.d.ts +6 -0
  276. package/dist/slots/CourseAboutCourseImageSlot/index.js +9 -0
  277. package/dist/slots/CourseAboutCourseImageSlot/index.js.map +1 -0
  278. package/dist/slots/CourseAboutCourseMediaSlot/index.d.ts +9 -0
  279. package/dist/slots/CourseAboutCourseMediaSlot/index.js +6 -0
  280. package/dist/slots/CourseAboutCourseMediaSlot/index.js.map +1 -0
  281. package/dist/slots/CourseAboutEnrollmentButtonSlot/index.d.ts +10 -0
  282. package/dist/slots/CourseAboutEnrollmentButtonSlot/index.js +6 -0
  283. package/dist/slots/CourseAboutEnrollmentButtonSlot/index.js.map +1 -0
  284. package/dist/slots/CourseAboutIntroSlot/index.d.ts +6 -0
  285. package/dist/slots/CourseAboutIntroSlot/index.js +6 -0
  286. package/dist/slots/CourseAboutIntroSlot/index.js.map +1 -0
  287. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoButtonSlot/index.d.ts +6 -0
  288. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoButtonSlot/index.js +11 -0
  289. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoButtonSlot/index.js.map +1 -0
  290. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalContentSlot/index.d.ts +6 -0
  291. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalContentSlot/index.js +9 -0
  292. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalContentSlot/index.js.map +1 -0
  293. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalSlot/index.d.ts +6 -0
  294. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalSlot/index.js +6 -0
  295. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalSlot/index.js.map +1 -0
  296. package/dist/slots/CourseAboutIntroVideoSlots/index.d.ts +4 -0
  297. package/dist/slots/CourseAboutIntroVideoSlots/index.js +5 -0
  298. package/dist/slots/CourseAboutIntroVideoSlots/index.js.map +1 -0
  299. package/dist/slots/CourseAboutOverviewSlot/index.d.ts +6 -0
  300. package/dist/slots/CourseAboutOverviewSlot/index.js +6 -0
  301. package/dist/slots/CourseAboutOverviewSlot/index.js.map +1 -0
  302. package/dist/slots/CourseAboutSidebarCoursePriceSlot/index.d.ts +6 -0
  303. package/dist/slots/CourseAboutSidebarCoursePriceSlot/index.js +11 -0
  304. package/dist/slots/CourseAboutSidebarCoursePriceSlot/index.js.map +1 -0
  305. package/dist/slots/CourseAboutSidebarSlot/index.d.ts +6 -0
  306. package/dist/slots/CourseAboutSidebarSlot/index.js +6 -0
  307. package/dist/slots/CourseAboutSidebarSlot/index.js.map +1 -0
  308. package/dist/slots/CourseAboutSidebarSocialSlot/index.d.ts +6 -0
  309. package/dist/slots/CourseAboutSidebarSocialSlot/index.js +22 -0
  310. package/dist/slots/CourseAboutSidebarSocialSlot/index.js.map +1 -0
  311. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/CourseCatalogDataTableCourseCardSlot/index.d.ts +16 -0
  312. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/CourseCatalogDataTableCourseCardSlot/index.js +18 -0
  313. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/CourseCatalogDataTableCourseCardSlot/index.js.map +1 -0
  314. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/index.d.ts +6 -0
  315. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/index.js +11 -0
  316. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/index.js.map +1 -0
  317. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableControlBarSlot/index.d.ts +6 -0
  318. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableControlBarSlot/index.js +6 -0
  319. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableControlBarSlot/index.js.map +1 -0
  320. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableSlot/index.d.ts +23 -0
  321. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableSlot/index.js +17 -0
  322. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableSlot/index.js.map +1 -0
  323. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableTableFooterSlot/index.d.ts +2 -0
  324. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableTableFooterSlot/index.js +6 -0
  325. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableTableFooterSlot/index.js.map +1 -0
  326. package/dist/slots/CourseCatalogDataTableSlots/index.d.ts +6 -0
  327. package/dist/slots/CourseCatalogDataTableSlots/index.js +7 -0
  328. package/dist/slots/CourseCatalogDataTableSlots/index.js.map +1 -0
  329. package/dist/slots/CourseCatalogIntroSlot/index.d.ts +6 -0
  330. package/dist/slots/CourseCatalogIntroSlot/index.js +17 -0
  331. package/dist/slots/CourseCatalogIntroSlot/index.js.map +1 -0
  332. package/dist/slots/CourseCatalogSearchFieldSlot/index.d.ts +7 -0
  333. package/dist/slots/CourseCatalogSearchFieldSlot/index.js +21 -0
  334. package/dist/slots/CourseCatalogSearchFieldSlot/index.js.map +1 -0
  335. package/dist/slots/HomeBannerSlot/index.d.ts +2 -0
  336. package/dist/slots/HomeBannerSlot/index.js +6 -0
  337. package/dist/slots/HomeBannerSlot/index.js.map +1 -0
  338. package/dist/slots/HomeCourseCardSlot/index.d.ts +16 -0
  339. package/dist/slots/HomeCourseCardSlot/index.js +18 -0
  340. package/dist/slots/HomeCourseCardSlot/index.js.map +1 -0
  341. package/dist/slots/HomeCoursesListSlot/index.d.ts +2 -0
  342. package/dist/slots/HomeCoursesListSlot/index.js +6 -0
  343. package/dist/slots/HomeCoursesListSlot/index.js.map +1 -0
  344. package/dist/slots/HomeOverlayHtmlSlot/index.d.ts +2 -0
  345. package/dist/slots/HomeOverlayHtmlSlot/index.js +6 -0
  346. package/dist/slots/HomeOverlayHtmlSlot/index.js.map +1 -0
  347. package/dist/slots/HomePromoVideoSlots/HomePromoVideoButtonSlot/index.d.ts +4 -0
  348. package/dist/slots/HomePromoVideoSlots/HomePromoVideoButtonSlot/index.js +8 -0
  349. package/dist/slots/HomePromoVideoSlots/HomePromoVideoButtonSlot/index.js.map +1 -0
  350. package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalContentSlot/index.d.ts +6 -0
  351. package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalContentSlot/index.js +9 -0
  352. package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalContentSlot/index.js.map +1 -0
  353. package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalSlot/index.d.ts +6 -0
  354. package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalSlot/index.js +6 -0
  355. package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalSlot/index.js.map +1 -0
  356. package/dist/slots/HomePromoVideoSlots/index.d.ts +4 -0
  357. package/dist/slots/HomePromoVideoSlots/index.js +5 -0
  358. package/dist/slots/HomePromoVideoSlots/index.js.map +1 -0
  359. package/dist/slots/LoaderSlot/index.d.ts +3 -0
  360. package/dist/slots/LoaderSlot/index.js +4 -0
  361. package/dist/slots/LoaderSlot/index.js.map +1 -0
  362. package/dist/slots.d.ts +3 -0
  363. package/dist/slots.js +7 -0
  364. package/dist/slots.js.map +1 -0
  365. package/dist/style.scss +4 -0
  366. package/dist/utils.d.ts +6 -0
  367. package/dist/utils.js +9 -0
  368. package/dist/utils.js.map +1 -0
  369. package/dist/widgets/CatalogHeader/CoursesLinkMenuItem.d.ts +3 -0
  370. package/dist/widgets/CatalogHeader/CoursesLinkMenuItem.js +9 -0
  371. package/dist/widgets/CatalogHeader/CoursesLinkMenuItem.js.map +1 -0
  372. package/dist/widgets/CatalogHeader/DiscoverLinkMenuItem.d.ts +3 -0
  373. package/dist/widgets/CatalogHeader/DiscoverLinkMenuItem.js +9 -0
  374. package/dist/widgets/CatalogHeader/DiscoverLinkMenuItem.js.map +1 -0
  375. package/dist/widgets/CatalogHeader/ExploreCoursesLinkMenuItem.d.ts +3 -0
  376. package/dist/widgets/CatalogHeader/ExploreCoursesLinkMenuItem.js +9 -0
  377. package/dist/widgets/CatalogHeader/ExploreCoursesLinkMenuItem.js.map +1 -0
  378. package/dist/widgets/CatalogHeader/ProgramsLinkMenuItem.d.ts +3 -0
  379. package/dist/widgets/CatalogHeader/ProgramsLinkMenuItem.js +9 -0
  380. package/dist/widgets/CatalogHeader/ProgramsLinkMenuItem.js.map +1 -0
  381. package/dist/widgets/CatalogHeader/app.d.ts +3 -0
  382. package/dist/widgets/CatalogHeader/app.js +55 -0
  383. package/dist/widgets/CatalogHeader/app.js.map +1 -0
  384. package/dist/widgets/CatalogHeader/index.d.ts +1 -0
  385. package/dist/widgets/CatalogHeader/index.js +2 -0
  386. package/dist/widgets/CatalogHeader/index.js.map +1 -0
  387. package/dist/widgets/CatalogHeader/messages.d.ts +32 -0
  388. package/dist/widgets/CatalogHeader/messages.js +25 -0
  389. package/dist/widgets/CatalogHeader/messages.js.map +1 -0
  390. package/package.json +86 -0
@@ -0,0 +1,45 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ statusMessageEnrolled: {
4
+ id: 'category.course-about.course-intro.status-message.enrolled',
5
+ defaultMessage: 'You are enrolled in this course',
6
+ description: 'The text for the status message when the user is enrolled in the course.',
7
+ },
8
+ viewCourseBtn: {
9
+ id: 'category.course-about.course-intro.view-course-btn',
10
+ defaultMessage: 'View course',
11
+ description: 'The text for the button to view the course.',
12
+ },
13
+ statusMessageFull: {
14
+ id: 'category.course-about.course-intro.status-message.full',
15
+ defaultMessage: 'Course is full',
16
+ description: 'The text for the status message when the course is full.',
17
+ },
18
+ statusMessageEnrollmentInvitationOnly: {
19
+ id: 'category.course-about.course-intro.status-message.enrollment-invitation-only',
20
+ defaultMessage: 'Enrollment in this course is by invitation only',
21
+ description: 'The text for the status message when the enrollment is by invitation only.',
22
+ },
23
+ statusMessageEnrollmentClosed: {
24
+ id: 'category.course-about.course-intro.status-message.enrollment-closed',
25
+ defaultMessage: 'Enrollment is closed',
26
+ description: 'The text for the status message when the enrollment is closed.',
27
+ },
28
+ enrollNowBtn: {
29
+ id: 'category.course-about.course-intro.enroll-now-btn',
30
+ defaultMessage: 'Enroll now',
31
+ description: 'The text for the button to enroll in the course.',
32
+ },
33
+ enrollNowBtnPending: {
34
+ id: 'category.course-about.course-intro.enroll-now-btn-pending',
35
+ defaultMessage: 'Enrolling...',
36
+ description: 'The text for the button to enroll in the course when the enrollment is pending.',
37
+ },
38
+ statusMessageEnrollmentError: {
39
+ id: 'category.course-about.course-intro.status-message.enrollment-error',
40
+ defaultMessage: 'An error occurred. Please try again later.',
41
+ description: 'The text for the status message when an error occurs during enrollment.',
42
+ },
43
+ });
44
+ export default messages;
45
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/course-about/course-intro/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,qBAAqB,EAAE;QACrB,EAAE,EAAE,4DAA4D;QAChE,cAAc,EAAE,iCAAiC;QACjD,WAAW,EAAE,0EAA0E;KACxF;IACD,aAAa,EAAE;QACb,EAAE,EAAE,oDAAoD;QACxD,cAAc,EAAE,aAAa;QAC7B,WAAW,EAAE,6CAA6C;KAC3D;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,wDAAwD;QAC5D,cAAc,EAAE,gBAAgB;QAChC,WAAW,EAAE,0DAA0D;KACxE;IACD,qCAAqC,EAAE;QACrC,EAAE,EAAE,8EAA8E;QAClF,cAAc,EAAE,iDAAiD;QACjE,WAAW,EAAE,4EAA4E;KAC1F;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,qEAAqE;QACzE,cAAc,EAAE,sBAAsB;QACtC,WAAW,EAAE,gEAAgE;KAC9E;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,mDAAmD;QACvD,cAAc,EAAE,YAAY;QAC5B,WAAW,EAAE,kDAAkD;KAChE;IACD,mBAAmB,EAAE;QACnB,EAAE,EAAE,2DAA2D;QAC/D,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,iFAAiF;KAC/F;IACD,4BAA4B,EAAE;QAC5B,EAAE,EAAE,oEAAoE;QACxE,cAAc,EAAE,4CAA4C;QAC5D,WAAW,EAAE,yEAAyE;KACvF;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n statusMessageEnrolled: {\n id: 'category.course-about.course-intro.status-message.enrolled',\n defaultMessage: 'You are enrolled in this course',\n description: 'The text for the status message when the user is enrolled in the course.',\n },\n viewCourseBtn: {\n id: 'category.course-about.course-intro.view-course-btn',\n defaultMessage: 'View course',\n description: 'The text for the button to view the course.',\n },\n statusMessageFull: {\n id: 'category.course-about.course-intro.status-message.full',\n defaultMessage: 'Course is full',\n description: 'The text for the status message when the course is full.',\n },\n statusMessageEnrollmentInvitationOnly: {\n id: 'category.course-about.course-intro.status-message.enrollment-invitation-only',\n defaultMessage: 'Enrollment in this course is by invitation only',\n description: 'The text for the status message when the enrollment is by invitation only.',\n },\n statusMessageEnrollmentClosed: {\n id: 'category.course-about.course-intro.status-message.enrollment-closed',\n defaultMessage: 'Enrollment is closed',\n description: 'The text for the status message when the enrollment is closed.',\n },\n enrollNowBtn: {\n id: 'category.course-about.course-intro.enroll-now-btn',\n defaultMessage: 'Enroll now',\n description: 'The text for the button to enroll in the course.',\n },\n enrollNowBtnPending: {\n id: 'category.course-about.course-intro.enroll-now-btn-pending',\n defaultMessage: 'Enrolling...',\n description: 'The text for the button to enroll in the course when the enrollment is pending.',\n },\n statusMessageEnrollmentError: {\n id: 'category.course-about.course-intro.status-message.enrollment-error',\n defaultMessage: 'An error occurred. Please try again later.',\n description: 'The text for the status message when an error occurs during enrollment.',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Returns the absolute URL to the learning home page for a given course.
3
+ */
4
+ export declare const getLearningHomePageUrl: (courseId: string) => string;
@@ -0,0 +1,7 @@
1
+ import { getAppConfig } from '@openedx/frontend-base';
2
+ import { appId } from '../../constants';
3
+ /**
4
+ * Returns the absolute URL to the learning home page for a given course.
5
+ */
6
+ export const getLearningHomePageUrl = (courseId) => `${getAppConfig(appId).LEARNING_BASE_URL}/course/${courseId}/home`;
7
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/course-about/course-intro/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,iBAA2B,WAAW,QAAQ,OAAO,CAAC","sourcesContent":["import { getAppConfig } from '@openedx/frontend-base';\n\nimport { appId } from '@src/constants';\n\n/**\n * Returns the absolute URL to the learning home page for a given course.\n */\nexport const getLearningHomePageUrl = (courseId: string) => `${getAppConfig(appId).LEARNING_BASE_URL as string}/course/${courseId}/home`;\n"]}
@@ -0,0 +1,2 @@
1
+ import type { CourseOverviewProps } from './types';
2
+ export declare const CourseOverview: ({ overviewData, courseId }: CourseOverviewProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Container, useMediaQuery, breakpoints, Card, ActionRow, } from '@openedx/paragon';
3
+ import { getAuthenticatedUser, getSiteConfig, useIntl, } from '@openedx/frontend-base';
4
+ import messages from '../messages';
5
+ import { processOverviewContent } from './utils';
6
+ export const CourseOverview = ({ overviewData, courseId }) => {
7
+ const intl = useIntl();
8
+ const authenticatedUser = getAuthenticatedUser();
9
+ const isGlobalStaff = (authenticatedUser === null || authenticatedUser === void 0 ? void 0 : authenticatedUser.administrator) || false;
10
+ const isExtraSmall = useMediaQuery({ maxWidth: breakpoints.extraSmall.maxWidth });
11
+ const processedOverviewData = processOverviewContent(overviewData, getSiteConfig().lmsBaseUrl);
12
+ const hasOverviewContent = processedOverviewData.trim().length > 0;
13
+ if (!hasOverviewContent) {
14
+ if (!isGlobalStaff) {
15
+ return null;
16
+ }
17
+ return (_jsx(ActionRow, { children: _jsx(Button, { as: "a", size: "sm", block: isExtraSmall, variant: "outline-primary", href: `${getSiteConfig().cmsBaseUrl}/settings/details/${courseId}`, children: intl.formatMessage(messages.viewAboutPageInStudio) }) }));
18
+ }
19
+ return (_jsx(Container, { className: "px-0", children: _jsxs(Card, { children: [isGlobalStaff && (_jsx(Card.Header, { actions: (_jsx(ActionRow, { children: _jsx(Button, { as: "a", size: "sm", block: isExtraSmall, variant: "outline-primary", href: `${getSiteConfig().cmsBaseUrl}/settings/details/${courseId}`, children: intl.formatMessage(messages.viewAboutPageInStudio) }) })) })), _jsx(Card.Section, { children: _jsx("div", { className: "course-about-overview", dangerouslySetInnerHTML: { __html: processedOverviewData } }) })] }) }));
20
+ };
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/course-about/course-overview/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,GAC/D,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EAAE,aAAa,EAAE,OAAO,GAC7C,MAAM,wBAAwB,CAAC;AAEhC,OAAO,QAAQ,MAAM,aAAa,CAAC;AAEnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAuB,EAAE,EAAE;IAChF,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;IACjD,MAAM,aAAa,GAAG,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,aAAa,KAAI,KAAK,CAAC;IAChE,MAAM,YAAY,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;IAElF,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,UAAU,CAAC,CAAC;IAC/F,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAEnE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,KAAC,SAAS,cACR,KAAC,MAAM,IACL,EAAE,EAAC,GAAG,EACN,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,YAAY,EACnB,OAAO,EAAC,iBAAiB,EACzB,IAAI,EAAE,GAAG,aAAa,EAAE,CAAC,UAAU,qBAAqB,QAAQ,EAAE,YAEjE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAC5C,GACC,CACb,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,SAAS,IAAC,SAAS,EAAC,MAAM,YACzB,MAAC,IAAI,eACF,aAAa,IAAI,CAChB,KAAC,IAAI,CAAC,MAAM,IACV,OAAO,EAAE,CACP,KAAC,SAAS,cACR,KAAC,MAAM,IACL,EAAE,EAAC,GAAG,EACN,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,YAAY,EACnB,OAAO,EAAC,iBAAiB,EACzB,IAAI,EAAE,GAAG,aAAa,EAAE,CAAC,UAAU,qBAAqB,QAAQ,EAAE,YAEjE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAC5C,GACC,CACb,GACD,CACH,EACD,KAAC,IAAI,CAAC,OAAO,cACX,cAAK,SAAS,EAAC,uBAAuB,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAI,GACxF,IACV,GACG,CACb,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {\n Button, Container, useMediaQuery, breakpoints, Card, ActionRow,\n} from '@openedx/paragon';\nimport {\n getAuthenticatedUser, getSiteConfig, useIntl,\n} from '@openedx/frontend-base';\n\nimport messages from '../messages';\nimport type { CourseOverviewProps } from './types';\nimport { processOverviewContent } from './utils';\n\nexport const CourseOverview = ({ overviewData, courseId }: CourseOverviewProps) => {\n const intl = useIntl();\n const authenticatedUser = getAuthenticatedUser();\n const isGlobalStaff = authenticatedUser?.administrator || false;\n const isExtraSmall = useMediaQuery({ maxWidth: breakpoints.extraSmall.maxWidth });\n\n const processedOverviewData = processOverviewContent(overviewData, getSiteConfig().lmsBaseUrl);\n const hasOverviewContent = processedOverviewData.trim().length > 0;\n\n if (!hasOverviewContent) {\n if (!isGlobalStaff) {\n return null;\n }\n\n return (\n <ActionRow>\n <Button\n as=\"a\"\n size=\"sm\"\n block={isExtraSmall}\n variant=\"outline-primary\"\n href={`${getSiteConfig().cmsBaseUrl}/settings/details/${courseId}`}\n >\n {intl.formatMessage(messages.viewAboutPageInStudio)}\n </Button>\n </ActionRow>\n );\n }\n\n return (\n <Container className=\"px-0\">\n <Card>\n {isGlobalStaff && (\n <Card.Header\n actions={(\n <ActionRow>\n <Button\n as=\"a\"\n size=\"sm\"\n block={isExtraSmall}\n variant=\"outline-primary\"\n href={`${getSiteConfig().cmsBaseUrl}/settings/details/${courseId}`}\n >\n {intl.formatMessage(messages.viewAboutPageInStudio)}\n </Button>\n </ActionRow>\n )}\n />\n )}\n <Card.Section>\n <div className=\"course-about-overview\" dangerouslySetInnerHTML={{ __html: processedOverviewData }} />\n </Card.Section>\n </Card>\n </Container>\n );\n};\n"]}
@@ -0,0 +1,4 @@
1
+ export interface CourseOverviewProps {
2
+ overviewData: string;
3
+ courseId: string;
4
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/course-about/course-overview/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface CourseOverviewProps {\n overviewData: string,\n courseId: string,\n}\n"]}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Processes overview content to replace image paths
3
+ * @param overview - The overview HTML content
4
+ * @returns Processed overview content with updated image paths
5
+ */
6
+ export declare const processOverviewContent: (overview: string, lmsBaseUrl: string) => string;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Processes overview content to replace image paths
3
+ * @param overview - The overview HTML content
4
+ * @returns Processed overview content with updated image paths
5
+ */
6
+ export const processOverviewContent = (overview, lmsBaseUrl) => {
7
+ if (!overview) {
8
+ return overview;
9
+ }
10
+ return overview.replace(/src="\/(static\/images\/|asset)/g, (_, path) => `src="${lmsBaseUrl}/${path}`);
11
+ };
12
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/course-about/course-overview/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAgB,EAAE,UAAkB,EAAU,EAAE;IACrF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,CACrB,kCAAkC,EAClC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,UAAU,IAAI,IAAI,EAAE,CAC1C,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * Processes overview content to replace image paths\n * @param overview - The overview HTML content\n * @returns Processed overview content with updated image paths\n */\nexport const processOverviewContent = (overview: string, lmsBaseUrl: string): string => {\n if (!overview) {\n return overview;\n }\n\n return overview.replace(\n /src=\"\\/(static\\/images\\/|asset)/g,\n (_, path) => `src=\"${lmsBaseUrl}/${path}`,\n );\n};\n"]}
@@ -0,0 +1,5 @@
1
+ import type { CourseAboutData } from '../types';
2
+ declare const CourseSidebar: ({ courseAboutData }: {
3
+ courseAboutData: CourseAboutData;
4
+ }) => import("react/jsx-runtime").JSX.Element;
5
+ export default CourseSidebar;
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Card } from '@openedx/paragon';
3
+ import SidebarSocial from './sidebar-social/SidebarSocial';
4
+ import SidebarDetails from './sidebar-details/SidebarDetails';
5
+ const CourseSidebar = ({ courseAboutData }) => (_jsx(Card, { children: _jsxs(Card.Section, { className: "p-0", children: [_jsx(SidebarSocial, { courseAboutData: courseAboutData }), _jsx(SidebarDetails, { courseAboutData: courseAboutData })] }) }));
6
+ export default CourseSidebar;
7
+ //# sourceMappingURL=CourseSidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CourseSidebar.js","sourceRoot":"","sources":["../../../src/course-about/course-sidebar/CourseSidebar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,aAAa,MAAM,gCAAgC,CAAC;AAC3D,OAAO,cAAc,MAAM,kCAAkC,CAAC;AAG9D,MAAM,aAAa,GAAG,CAAC,EAAE,eAAe,EAAwC,EAAE,EAAE,CAAC,CACnF,KAAC,IAAI,cACH,MAAC,IAAI,CAAC,OAAO,IAAC,SAAS,EAAC,KAAK,aAC3B,KAAC,aAAa,IAAC,eAAe,EAAE,eAAe,GAAI,EACnD,KAAC,cAAc,IAAC,eAAe,EAAE,eAAe,GAAI,IACvC,GACV,CACR,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import { Card } from '@openedx/paragon';\n\nimport SidebarSocial from './sidebar-social/SidebarSocial';\nimport SidebarDetails from './sidebar-details/SidebarDetails';\nimport type { CourseAboutData } from '../types';\n\nconst CourseSidebar = ({ courseAboutData }: { courseAboutData: CourseAboutData }) => (\n <Card>\n <Card.Section className=\"p-0\">\n <SidebarSocial courseAboutData={courseAboutData} />\n <SidebarDetails courseAboutData={courseAboutData} />\n </Card.Section>\n </Card>\n);\n\nexport default CourseSidebar;\n"]}
@@ -0,0 +1,5 @@
1
+ import type { CourseAboutData } from '../../types';
2
+ declare const SidebarDetails: ({ courseAboutData }: {
3
+ courseAboutData: CourseAboutData;
4
+ }) => import("react/jsx-runtime").JSX.Element;
5
+ export default SidebarDetails;
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Stack, Container, Card } from '@openedx/paragon';
3
+ import { ListView as ListViewIcon } from '@openedx/paragon/icons';
4
+ import { getUrlByRouteRole, useIntl } from '@openedx/frontend-base';
5
+ import { Link } from 'react-router-dom';
6
+ import CourseAboutSidebarCoursePriceSlot from '../../../slots/CourseAboutSidebarCoursePriceSlot';
7
+ import { courseAboutRole } from '../../../constants';
8
+ import SidebarDetailsItem from './SidebarDetailsItem';
9
+ import { getSidebarDetails } from './utils';
10
+ import messages from './messages';
11
+ const SidebarDetails = ({ courseAboutData }) => {
12
+ const intl = useIntl();
13
+ const renderPrerequisites = () => {
14
+ var _a, _b;
15
+ if (!((_a = courseAboutData.preRequisiteCourses) === null || _a === void 0 ? void 0 : _a.length)) {
16
+ return null;
17
+ }
18
+ const prerequisite = courseAboutData.preRequisiteCourses[0];
19
+ const prerequisiteUrl = (_b = getUrlByRouteRole(courseAboutRole)) === null || _b === void 0 ? void 0 : _b.replace(':courseId', prerequisite.key);
20
+ if (!prerequisiteUrl) {
21
+ return null;
22
+ }
23
+ return (_jsxs(_Fragment, { children: [_jsx(SidebarDetailsItem, { icon: ListViewIcon, label: intl.formatMessage(messages.prerequisites), value: _jsx(Link, { to: prerequisiteUrl, children: prerequisite.display }) }, "prerequisites"), _jsx(Container, { className: "p-3", children: intl.formatMessage(messages.prerequisitesCompletion, {
24
+ prerequisite: _jsx(Link, { to: prerequisiteUrl, children: prerequisite.display }),
25
+ }) }), _jsx(Card.Divider, {})] }));
26
+ };
27
+ const renderAboutSidebarHtml = () => {
28
+ if (!courseAboutData.aboutSidebarHtml) {
29
+ return null;
30
+ }
31
+ return (_jsx(Container, { className: "p-3", children: _jsx("div", { dangerouslySetInnerHTML: { __html: courseAboutData.aboutSidebarHtml } }) }));
32
+ };
33
+ return (_jsxs(Stack, { children: [getSidebarDetails(intl, courseAboutData)
34
+ .filter(detail => detail.show)
35
+ .map(detail => (_jsx(SidebarDetailsItem, { icon: detail.icon, label: detail.label, value: detail.value }, detail.key))), courseAboutData.coursePrice && (_jsx(CourseAboutSidebarCoursePriceSlot, { coursePrice: courseAboutData.coursePrice })), renderPrerequisites(), renderAboutSidebarHtml()] }));
36
+ };
37
+ export default SidebarDetails;
38
+ //# sourceMappingURL=SidebarDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidebarDetails.js","sourceRoot":"","sources":["../../../../src/course-about/course-sidebar/sidebar-details/SidebarDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,iCAAiC,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,cAAc,GAAG,CAAC,EAAE,eAAe,EAAwC,EAAE,EAAE;IACnF,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,MAAM,mBAAmB,GAAG,GAAG,EAAE;;QAC/B,IAAI,CAAC,CAAA,MAAA,eAAe,CAAC,mBAAmB,0CAAE,MAAM,CAAA,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,MAAA,iBAAiB,CAAC,eAAe,CAAC,0CAAE,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;QAEnG,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,8BACE,KAAC,kBAAkB,IAEjB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EACjD,KAAK,EAAE,KAAC,IAAI,IAAC,EAAE,EAAE,eAAe,YAAG,YAAY,CAAC,OAAO,GAAQ,IAH3D,eAAe,CAInB,EACF,KAAC,SAAS,IAAC,SAAS,EAAC,KAAK,YACvB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,uBAAuB,EAAE;wBACpD,YAAY,EAAE,KAAC,IAAI,IAAC,EAAE,EAAE,eAAe,YAAG,YAAY,CAAC,OAAO,GAAQ;qBACvE,CAAC,GACQ,EACZ,KAAC,IAAI,CAAC,OAAO,KAAG,IACf,CACJ,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,KAAC,SAAS,IAAC,SAAS,EAAC,KAAK,YAExB,cAAK,uBAAuB,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,gBAAgB,EAAE,GAAI,GACpE,CACb,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,KAAK,eACH,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC;iBACtC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;iBAC7B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CACb,KAAC,kBAAkB,IAEjB,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,KAAK,EAAE,MAAM,CAAC,KAAK,IAHd,MAAM,CAAC,GAAG,CAIf,CACH,CAAC,EACH,eAAe,CAAC,WAAW,IAAI,CAC9B,KAAC,iCAAiC,IAAC,WAAW,EAAE,eAAe,CAAC,WAAW,GAAI,CAChF,EACA,mBAAmB,EAAE,EACrB,sBAAsB,EAAE,IACnB,CACT,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC","sourcesContent":["import { Stack, Container, Card } from '@openedx/paragon';\nimport { ListView as ListViewIcon } from '@openedx/paragon/icons';\nimport { getUrlByRouteRole, useIntl } from '@openedx/frontend-base';\nimport { Link } from 'react-router-dom';\n\nimport CourseAboutSidebarCoursePriceSlot from '@src/slots/CourseAboutSidebarCoursePriceSlot';\nimport { courseAboutRole } from '@src/constants';\nimport type { CourseAboutData } from '../../types';\nimport SidebarDetailsItem from './SidebarDetailsItem';\nimport { getSidebarDetails } from './utils';\nimport messages from './messages';\n\nconst SidebarDetails = ({ courseAboutData }: { courseAboutData: CourseAboutData }) => {\n const intl = useIntl();\n\n const renderPrerequisites = () => {\n if (!courseAboutData.preRequisiteCourses?.length) {\n return null;\n }\n\n const prerequisite = courseAboutData.preRequisiteCourses[0];\n const prerequisiteUrl = getUrlByRouteRole(courseAboutRole)?.replace(':courseId', prerequisite.key);\n\n if (!prerequisiteUrl) {\n return null;\n }\n\n return (\n <>\n <SidebarDetailsItem\n key=\"prerequisites\"\n icon={ListViewIcon}\n label={intl.formatMessage(messages.prerequisites)}\n value={<Link to={prerequisiteUrl}>{prerequisite.display}</Link>}\n />\n <Container className=\"p-3\">\n {intl.formatMessage(messages.prerequisitesCompletion, {\n prerequisite: <Link to={prerequisiteUrl}>{prerequisite.display}</Link>,\n })}\n </Container>\n <Card.Divider />\n </>\n );\n };\n\n const renderAboutSidebarHtml = () => {\n if (!courseAboutData.aboutSidebarHtml) {\n return null;\n }\n\n return (\n <Container className=\"p-3\">\n { }\n <div dangerouslySetInnerHTML={{ __html: courseAboutData.aboutSidebarHtml }} />\n </Container>\n );\n };\n\n return (\n <Stack>\n {getSidebarDetails(intl, courseAboutData)\n .filter(detail => detail.show)\n .map(detail => (\n <SidebarDetailsItem\n key={detail.key}\n icon={detail.icon}\n label={detail.label}\n value={detail.value}\n />\n ))}\n {courseAboutData.coursePrice && (\n <CourseAboutSidebarCoursePriceSlot coursePrice={courseAboutData.coursePrice} />\n )}\n {renderPrerequisites()}\n {renderAboutSidebarHtml()}\n </Stack>\n );\n};\n\nexport default SidebarDetails;\n"]}
@@ -0,0 +1,3 @@
1
+ import type { SidebarDetailsItemProps } from './types';
2
+ declare const SidebarDetailsItem: ({ icon, label, value }: SidebarDetailsItemProps) => import("react/jsx-runtime").JSX.Element;
3
+ export default SidebarDetailsItem;
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Icon, Stack, Card } from '@openedx/paragon';
3
+ const SidebarDetailsItem = ({ icon, label, value }) => (_jsxs(_Fragment, { children: [_jsxs(Stack, { className: "justify-content-between flex-wrap p-3", gap: 2, direction: "horizontal", children: [_jsxs(Stack, { direction: "horizontal", gap: 2, children: [_jsx(Icon, { src: icon }), _jsx("span", { "data-testid": "sidebar-details-item-label", children: label })] }), _jsx("span", { className: "font-weight-bolder", "data-testid": "sidebar-details-item-value", children: value })] }), _jsx(Card.Divider, {})] }));
4
+ export default SidebarDetailsItem;
5
+ //# sourceMappingURL=SidebarDetailsItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidebarDetailsItem.js","sourceRoot":"","sources":["../../../../src/course-about/course-sidebar/sidebar-details/SidebarDetailsItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAIrD,MAAM,kBAAkB,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAA2B,EAAE,EAAE,CAAC,CAC9E,8BACE,MAAC,KAAK,IAAC,SAAS,EAAC,uCAAuC,EAAC,GAAG,EAAE,CAAC,EAAE,SAAS,EAAC,YAAY,aACrF,MAAC,KAAK,IAAC,SAAS,EAAC,YAAY,EAAC,GAAG,EAAE,CAAC,aAClC,KAAC,IAAI,IAAC,GAAG,EAAE,IAAI,GAAI,EACnB,8BAAkB,4BAA4B,YAAE,KAAK,GAAQ,IACvD,EACR,eAAM,SAAS,EAAC,oBAAoB,iBAAa,4BAA4B,YAAE,KAAK,GAAQ,IACtF,EACR,KAAC,IAAI,CAAC,OAAO,KAAG,IACf,CACJ,CAAC;AAEF,eAAe,kBAAkB,CAAC","sourcesContent":["import { Icon, Stack, Card } from '@openedx/paragon';\n\nimport type { SidebarDetailsItemProps } from './types';\n\nconst SidebarDetailsItem = ({ icon, label, value }: SidebarDetailsItemProps) => (\n <>\n <Stack className=\"justify-content-between flex-wrap p-3\" gap={2} direction=\"horizontal\">\n <Stack direction=\"horizontal\" gap={2}>\n <Icon src={icon} />\n <span data-testid=\"sidebar-details-item-label\">{label}</span>\n </Stack>\n <span className=\"font-weight-bolder\" data-testid=\"sidebar-details-item-value\">{value}</span>\n </Stack>\n <Card.Divider />\n </>\n);\n\nexport default SidebarDetailsItem;\n"]}
@@ -0,0 +1,7 @@
1
+ export declare const SIDEBAR_DETAIL_KEYS: {
2
+ readonly COURSE_NUMBER: "course-number";
3
+ readonly START_DATE: "start-date";
4
+ readonly END_DATE: "end-date";
5
+ readonly EFFORT: "effort";
6
+ readonly REQUIREMENTS: "requirements";
7
+ };
@@ -0,0 +1,8 @@
1
+ export const SIDEBAR_DETAIL_KEYS = {
2
+ COURSE_NUMBER: 'course-number',
3
+ START_DATE: 'start-date',
4
+ END_DATE: 'end-date',
5
+ EFFORT: 'effort',
6
+ REQUIREMENTS: 'requirements',
7
+ };
8
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/course-about/course-sidebar/sidebar-details/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,aAAa,EAAE,eAAe;IAC9B,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,cAAc;CACpB,CAAC","sourcesContent":["export const SIDEBAR_DETAIL_KEYS = {\n COURSE_NUMBER: 'course-number',\n START_DATE: 'start-date',\n END_DATE: 'end-date',\n EFFORT: 'effort',\n REQUIREMENTS: 'requirements',\n} as const;\n"]}
@@ -0,0 +1,43 @@
1
+ declare const messages: {
2
+ courseNumber: {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ classesStart: {
8
+ id: string;
9
+ defaultMessage: string;
10
+ description: string;
11
+ };
12
+ classesEnd: {
13
+ id: string;
14
+ defaultMessage: string;
15
+ description: string;
16
+ };
17
+ estimatedEffort: {
18
+ id: string;
19
+ defaultMessage: string;
20
+ description: string;
21
+ };
22
+ price: {
23
+ id: string;
24
+ defaultMessage: string;
25
+ description: string;
26
+ };
27
+ requirements: {
28
+ id: string;
29
+ defaultMessage: string;
30
+ description: string;
31
+ };
32
+ prerequisites: {
33
+ id: string;
34
+ defaultMessage: string;
35
+ description: string;
36
+ };
37
+ prerequisitesCompletion: {
38
+ id: string;
39
+ defaultMessage: string;
40
+ description: string;
41
+ };
42
+ };
43
+ export default messages;
@@ -0,0 +1,45 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ courseNumber: {
4
+ id: 'catalog.course-about.sidebar-details.course-number',
5
+ defaultMessage: 'Course number',
6
+ description: 'Course number label.',
7
+ },
8
+ classesStart: {
9
+ id: 'catalog.course-about.sidebar-details.classes-start',
10
+ defaultMessage: 'Classes start',
11
+ description: 'Classes start label.',
12
+ },
13
+ classesEnd: {
14
+ id: 'catalog.course-about.sidebar-details.classes-end',
15
+ defaultMessage: 'Classes end',
16
+ description: 'Classes end label.',
17
+ },
18
+ estimatedEffort: {
19
+ id: 'catalog.course-about.sidebar-details.estimated-effort',
20
+ defaultMessage: 'Estimated effort',
21
+ description: 'Estimated effort label.',
22
+ },
23
+ price: {
24
+ id: 'catalog.course-about.sidebar-details.price',
25
+ defaultMessage: 'Price',
26
+ description: 'Price label.',
27
+ },
28
+ requirements: {
29
+ id: 'catalog.course-about.sidebar-details.requirements',
30
+ defaultMessage: 'Requirements',
31
+ description: 'Requirements label.',
32
+ },
33
+ prerequisites: {
34
+ id: 'catalog.course-about.sidebar-details.prerequisites',
35
+ defaultMessage: 'Prerequisites',
36
+ description: 'Prerequisites label.',
37
+ },
38
+ prerequisitesCompletion: {
39
+ id: 'catalog.course-about.sidebar-details.prerequisites-completion',
40
+ defaultMessage: 'You must successfully complete {prerequisite} before you begin this course.',
41
+ description: 'Text explaining that a prerequisite course must be completed.',
42
+ },
43
+ });
44
+ export default messages;
45
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/course-about/course-sidebar/sidebar-details/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,YAAY,EAAE;QACZ,EAAE,EAAE,oDAAoD;QACxD,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,sBAAsB;KACpC;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,oDAAoD;QACxD,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,sBAAsB;KACpC;IACD,UAAU,EAAE;QACV,EAAE,EAAE,kDAAkD;QACtD,cAAc,EAAE,aAAa;QAC7B,WAAW,EAAE,oBAAoB;KAClC;IACD,eAAe,EAAE;QACf,EAAE,EAAE,uDAAuD;QAC3D,cAAc,EAAE,kBAAkB;QAClC,WAAW,EAAE,yBAAyB;KACvC;IACD,KAAK,EAAE;QACL,EAAE,EAAE,4CAA4C;QAChD,cAAc,EAAE,OAAO;QACvB,WAAW,EAAE,cAAc;KAC5B;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,mDAAmD;QACvD,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,qBAAqB;KACnC;IACD,aAAa,EAAE;QACb,EAAE,EAAE,oDAAoD;QACxD,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,sBAAsB;KACpC;IACD,uBAAuB,EAAE;QACvB,EAAE,EAAE,+DAA+D;QACnE,cAAc,EAAE,6EAA6E;QAC7F,WAAW,EAAE,+DAA+D;KAC7E;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n courseNumber: {\n id: 'catalog.course-about.sidebar-details.course-number',\n defaultMessage: 'Course number',\n description: 'Course number label.',\n },\n classesStart: {\n id: 'catalog.course-about.sidebar-details.classes-start',\n defaultMessage: 'Classes start',\n description: 'Classes start label.',\n },\n classesEnd: {\n id: 'catalog.course-about.sidebar-details.classes-end',\n defaultMessage: 'Classes end',\n description: 'Classes end label.',\n },\n estimatedEffort: {\n id: 'catalog.course-about.sidebar-details.estimated-effort',\n defaultMessage: 'Estimated effort',\n description: 'Estimated effort label.',\n },\n price: {\n id: 'catalog.course-about.sidebar-details.price',\n defaultMessage: 'Price',\n description: 'Price label.',\n },\n requirements: {\n id: 'catalog.course-about.sidebar-details.requirements',\n defaultMessage: 'Requirements',\n description: 'Requirements label.',\n },\n prerequisites: {\n id: 'catalog.course-about.sidebar-details.prerequisites',\n defaultMessage: 'Prerequisites',\n description: 'Prerequisites label.',\n },\n prerequisitesCompletion: {\n id: 'catalog.course-about.sidebar-details.prerequisites-completion',\n defaultMessage: 'You must successfully complete {prerequisite} before you begin this course.',\n description: 'Text explaining that a prerequisite course must be completed.',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,8 @@
1
+ import type { ReactNode, ComponentType } from 'react';
2
+ export interface SidebarDetailsItemProps {
3
+ icon: ComponentType<{
4
+ className?: string;
5
+ }>;
6
+ label: string;
7
+ value?: string | ReactNode;
8
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/course-about/course-sidebar/sidebar-details/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ReactNode, ComponentType } from 'react';\n\nexport interface SidebarDetailsItemProps {\n icon: ComponentType<{ className?: string }>,\n label: string,\n value?: string | ReactNode,\n}\n"]}
@@ -0,0 +1,37 @@
1
+ import { type IntlShape } from '../../../utils';
2
+ import type { CourseAboutData } from '../../types';
3
+ /**
4
+ * Generates an array of sidebar detail objects for course information display.
5
+ * Each detail object contains metadata about a specific course attribute.
6
+ */
7
+ export declare const getSidebarDetails: (intl: IntlShape, courseAboutData: CourseAboutData) => ({
8
+ key: "course-number";
9
+ icon: any;
10
+ label: string;
11
+ value: string;
12
+ show: boolean;
13
+ } | {
14
+ key: "start-date";
15
+ icon: any;
16
+ label: string;
17
+ value: string;
18
+ show: boolean;
19
+ } | {
20
+ key: "end-date";
21
+ icon: any;
22
+ label: string;
23
+ value: string;
24
+ show: boolean;
25
+ } | {
26
+ key: "effort";
27
+ icon: any;
28
+ label: string;
29
+ value: string | null;
30
+ show: boolean;
31
+ } | {
32
+ key: "requirements";
33
+ icon: any;
34
+ label: string;
35
+ value: string;
36
+ show: boolean;
37
+ })[];
@@ -0,0 +1,49 @@
1
+ import { AccessTimeFilled as AccessTimeFilledIcon, Event as EventIcon, Info as InfoIcon, } from '@openedx/paragon/icons';
2
+ import { formatDate } from '../../../utils';
3
+ import { SIDEBAR_DETAIL_KEYS } from './constants';
4
+ import messages from './messages';
5
+ /**
6
+ * Generates an array of sidebar detail objects for course information display.
7
+ * Each detail object contains metadata about a specific course attribute.
8
+ */
9
+ export const getSidebarDetails = (intl, courseAboutData) => {
10
+ var _a, _b;
11
+ return [
12
+ {
13
+ key: SIDEBAR_DETAIL_KEYS.COURSE_NUMBER,
14
+ icon: InfoIcon,
15
+ label: intl.formatMessage(messages.courseNumber),
16
+ value: courseAboutData.displayNumberWithDefault,
17
+ show: true,
18
+ },
19
+ {
20
+ key: SIDEBAR_DETAIL_KEYS.START_DATE,
21
+ icon: EventIcon,
22
+ label: intl.formatMessage(messages.classesStart),
23
+ value: formatDate(((_a = (courseAboutData.advertisedStart || courseAboutData.start)) !== null && _a !== void 0 ? _a : ''), intl),
24
+ show: !courseAboutData.startDateIsStillDefault,
25
+ },
26
+ {
27
+ key: SIDEBAR_DETAIL_KEYS.END_DATE,
28
+ icon: EventIcon,
29
+ label: intl.formatMessage(messages.classesEnd),
30
+ value: formatDate(((_b = courseAboutData.end) !== null && _b !== void 0 ? _b : ''), intl),
31
+ show: !!courseAboutData.end,
32
+ },
33
+ {
34
+ key: SIDEBAR_DETAIL_KEYS.EFFORT,
35
+ icon: AccessTimeFilledIcon,
36
+ label: intl.formatMessage(messages.estimatedEffort),
37
+ value: courseAboutData.effort,
38
+ show: !!courseAboutData.effort,
39
+ },
40
+ {
41
+ key: SIDEBAR_DETAIL_KEYS.REQUIREMENTS,
42
+ icon: InfoIcon,
43
+ label: intl.formatMessage(messages.requirements),
44
+ value: courseAboutData.requirements,
45
+ show: !!(courseAboutData === null || courseAboutData === void 0 ? void 0 : courseAboutData.requirements),
46
+ },
47
+ ];
48
+ };
49
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/course-about/course-sidebar/sidebar-details/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,IAAI,oBAAoB,EACxC,KAAK,IAAI,SAAS,EAClB,IAAI,IAAI,QAAQ,GACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC;;;EAGE;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAAe,EACf,eAAgC,EAChC,EAAE;;IAAC,OAAA;QACH;YACE,GAAG,EAAE,mBAAmB,CAAC,aAAa;YACtC,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC;YAChD,KAAK,EAAE,eAAe,CAAC,wBAAwB;YAC/C,IAAI,EAAE,IAAI;SACX;QACD;YACE,GAAG,EAAE,mBAAmB,CAAC,UAAU;YACnC,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC;YAChD,KAAK,EAAE,UAAU,CAAC,CAAC,MAAA,CAAC,eAAe,CAAC,eAAe,IAAI,eAAe,CAAC,KAAK,CAAC,mCAAI,EAAE,CAAC,EAAE,IAAI,CAAC;YAC3F,IAAI,EAAE,CAAC,eAAe,CAAC,uBAAuB;SAC/C;QACD;YACE,GAAG,EAAE,mBAAmB,CAAC,QAAQ;YACjC,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC9C,KAAK,EAAE,UAAU,CAAC,CAAC,MAAA,eAAe,CAAC,GAAG,mCAAI,EAAE,CAAC,EAAE,IAAI,CAAC;YACpD,IAAI,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG;SAC5B;QACD;YACE,GAAG,EAAE,mBAAmB,CAAC,MAAM;YAC/B,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC;YACnD,KAAK,EAAE,eAAe,CAAC,MAAM;YAC7B,IAAI,EAAE,CAAC,CAAC,eAAe,CAAC,MAAM;SAC/B;QACD;YACE,GAAG,EAAE,mBAAmB,CAAC,YAAY;YACrC,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC;YAChD,KAAK,EAAE,eAAe,CAAC,YAAY;YACnC,IAAI,EAAE,CAAC,CAAC,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,YAAY,CAAA;SACtC;KACF,CAAA;CAAA,CAAC","sourcesContent":["import {\n AccessTimeFilled as AccessTimeFilledIcon,\n Event as EventIcon,\n Info as InfoIcon,\n} from '@openedx/paragon/icons';\n\nimport { formatDate, type IntlShape } from '@src/utils';\nimport { SIDEBAR_DETAIL_KEYS } from './constants';\nimport type { CourseAboutData } from '../../types';\nimport messages from './messages';\n\n/**\n * Generates an array of sidebar detail objects for course information display.\n * Each detail object contains metadata about a specific course attribute.\n*/\nexport const getSidebarDetails = (\n intl: IntlShape,\n courseAboutData: CourseAboutData,\n) => [\n {\n key: SIDEBAR_DETAIL_KEYS.COURSE_NUMBER,\n icon: InfoIcon,\n label: intl.formatMessage(messages.courseNumber),\n value: courseAboutData.displayNumberWithDefault,\n show: true,\n },\n {\n key: SIDEBAR_DETAIL_KEYS.START_DATE,\n icon: EventIcon,\n label: intl.formatMessage(messages.classesStart),\n value: formatDate(((courseAboutData.advertisedStart || courseAboutData.start) ?? ''), intl),\n show: !courseAboutData.startDateIsStillDefault,\n },\n {\n key: SIDEBAR_DETAIL_KEYS.END_DATE,\n icon: EventIcon,\n label: intl.formatMessage(messages.classesEnd),\n value: formatDate((courseAboutData.end ?? ''), intl),\n show: !!courseAboutData.end,\n },\n {\n key: SIDEBAR_DETAIL_KEYS.EFFORT,\n icon: AccessTimeFilledIcon,\n label: intl.formatMessage(messages.estimatedEffort),\n value: courseAboutData.effort,\n show: !!courseAboutData.effort,\n },\n {\n key: SIDEBAR_DETAIL_KEYS.REQUIREMENTS,\n icon: InfoIcon,\n label: intl.formatMessage(messages.requirements),\n value: courseAboutData.requirements,\n show: !!courseAboutData?.requirements,\n },\n];\n"]}
@@ -0,0 +1,5 @@
1
+ import type { CourseAboutData } from '../../../course-about/types';
2
+ declare const SidebarSocial: ({ courseAboutData }: {
3
+ courseAboutData: CourseAboutData;
4
+ }) => import("react/jsx-runtime").JSX.Element;
5
+ export default SidebarSocial;
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { Tooltip, OverlayTrigger, Card, } from '@openedx/paragon';
4
+ import { useIntl } from '@openedx/frontend-base';
5
+ import CourseAboutSidebarSocialSlot from '../../../slots/CourseAboutSidebarSocialSlot';
6
+ import { getSocialLinks } from './utils';
7
+ import messages from './messages';
8
+ const SidebarSocial = ({ courseAboutData }) => {
9
+ const intl = useIntl();
10
+ const socialLinks = useMemo(() => getSocialLinks(intl).map((link) => (Object.assign(Object.assign({}, link), { destination: link.destination(courseAboutData) }))), [courseAboutData, intl]);
11
+ return (_jsx(OverlayTrigger, { placement: "top", overlay: (_jsx(Tooltip, { id: "tooltip-top", children: intl.formatMessage(messages.socialSharingTooltip) })), children: _jsxs("header", { children: [_jsx(CourseAboutSidebarSocialSlot, { socialLinks: socialLinks }), _jsx(Card.Divider, {})] }) }));
12
+ };
13
+ export default SidebarSocial;
14
+ //# sourceMappingURL=SidebarSocial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidebarSocial.js","sourceRoot":"","sources":["../../../../src/course-about/course-sidebar/sidebar-social/SidebarSocial.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EACL,OAAO,EAAE,cAAc,EAAE,IAAI,GAC9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGjD,OAAO,4BAA4B,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,aAAa,GAAG,CAAC,EAAE,eAAe,EAAwC,EAAE,EAAE;IAClF,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iCACpC,IAAI,KACP,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAC9C,CAAC,EACH,CAAC,eAAe,EAAE,IAAI,CAAC,CACxB,CAAC;IAEF,OAAO,CACL,KAAC,cAAc,IACb,SAAS,EAAC,KAAK,EACf,OAAO,EAAE,CACP,KAAC,OAAO,IAAC,EAAE,EAAC,aAAa,YACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAC1C,CACX,YAED,6BACE,KAAC,4BAA4B,IAAC,WAAW,EAAE,WAAW,GAAI,EAC1D,KAAC,IAAI,CAAC,OAAO,KAAG,IACT,GACM,CAClB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import { useMemo } from 'react';\nimport {\n Tooltip, OverlayTrigger, Card,\n} from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport type { CourseAboutData } from '@src/course-about/types';\nimport CourseAboutSidebarSocialSlot from '@src/slots/CourseAboutSidebarSocialSlot';\nimport { getSocialLinks } from './utils';\nimport messages from './messages';\n\nconst SidebarSocial = ({ courseAboutData }: { courseAboutData: CourseAboutData }) => {\n const intl = useIntl();\n\n const socialLinks = useMemo(\n () => getSocialLinks(intl).map((link) => ({\n ...link,\n destination: link.destination(courseAboutData),\n })),\n [courseAboutData, intl],\n );\n\n return (\n <OverlayTrigger\n placement=\"top\"\n overlay={(\n <Tooltip id=\"tooltip-top\">\n {intl.formatMessage(messages.socialSharingTooltip)}\n </Tooltip>\n )}\n >\n <header>\n <CourseAboutSidebarSocialSlot socialLinks={socialLinks} />\n <Card.Divider />\n </header>\n </OverlayTrigger>\n );\n};\n\nexport default SidebarSocial;\n"]}
@@ -0,0 +1,5 @@
1
+ import type { SocialLink } from './types';
2
+ declare const SocialLinks: ({ socialLinks }: {
3
+ socialLinks: SocialLink[];
4
+ }) => import("react/jsx-runtime").JSX.Element;
5
+ export default SocialLinks;
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Icon, Hyperlink } from '@openedx/paragon';
3
+ const SocialLinks = ({ socialLinks }) => (_jsx(_Fragment, { children: socialLinks.map((link) => (_jsx(Hyperlink, { destination: link.destination, children: _jsx(Icon, { src: link.icon, screenReaderText: link.screenReaderText, size: "lg" }) }, link.id))) }));
4
+ export default SocialLinks;
5
+ //# sourceMappingURL=SocialLinks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SocialLinks.js","sourceRoot":"","sources":["../../../../src/course-about/course-sidebar/sidebar-social/SocialLinks.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAInD,MAAM,WAAW,GAAG,CAAC,EAAE,WAAW,EAAiC,EAAE,EAAE,CAAC,CACtE,4BACG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACzB,KAAC,SAAS,IAAe,WAAW,EAAE,IAAI,CAAC,WAAW,YACpD,KAAC,IAAI,IACH,GAAG,EAAE,IAAI,CAAC,IAAI,EACd,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EACvC,IAAI,EAAC,IAAI,GACT,IALY,IAAI,CAAC,EAAE,CAMX,CACb,CAAC,GACD,CACJ,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import { Icon, Hyperlink } from '@openedx/paragon';\n\nimport type { SocialLink } from './types';\n\nconst SocialLinks = ({ socialLinks }: { socialLinks: SocialLink[] }) => (\n <>\n {socialLinks.map((link) => (\n <Hyperlink key={link.id} destination={link.destination}>\n <Icon\n src={link.icon}\n screenReaderText={link.screenReaderText}\n size=\"lg\"\n />\n </Hyperlink>\n ))}\n </>\n);\n\nexport default SocialLinks;\n"]}
@@ -0,0 +1,43 @@
1
+ declare const messages: {
2
+ socialSharingOptionsAriaLabel: {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ socialSharingTooltip: {
8
+ id: string;
9
+ defaultMessage: string;
10
+ description: string;
11
+ };
12
+ socialSharingTwitter: {
13
+ id: string;
14
+ defaultMessage: string;
15
+ description: string;
16
+ };
17
+ socialSharingFacebook: {
18
+ id: string;
19
+ defaultMessage: string;
20
+ description: string;
21
+ };
22
+ socialSharingEmail: {
23
+ id: string;
24
+ defaultMessage: string;
25
+ description: string;
26
+ };
27
+ socialSharingEmailSubject: {
28
+ id: string;
29
+ defaultMessage: string;
30
+ description: string;
31
+ };
32
+ socialSharingEmailBody: {
33
+ id: string;
34
+ defaultMessage: string;
35
+ description: string;
36
+ };
37
+ socialSharingTwitterText: {
38
+ id: string;
39
+ defaultMessage: string;
40
+ description: string;
41
+ };
42
+ };
43
+ export default messages;