@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,2 @@
1
+ declare const CoursesList: () => import("react/jsx-runtime").JSX.Element | null;
2
+ export default CoursesList;
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ErrorPage, getAppConfig, getUrlByRouteRole, useIntl, } from '@openedx/frontend-base';
3
+ import { Alert, Button, CardGrid, Container, } from '@openedx/paragon';
4
+ import { useNavigate } from 'react-router';
5
+ import { useCourseListSearch } from '../../../data/course-list-search/hooks';
6
+ import { AlertNotification } from '../../../generic';
7
+ import { DEFAULT_PAGE_INDEX } from '../../../data/course-list-search/constants';
8
+ import HomeCourseCardSlot from '../../../slots/HomeCourseCardSlot';
9
+ import { LoaderSlot } from '../../../slots/LoaderSlot';
10
+ import { appId, coursesRole } from '../../../constants';
11
+ import { DEFAULT_COURSES_COUNT } from '../../../home/constants';
12
+ import messages from './messages';
13
+ const CARD_GRID_LAYOUT = {
14
+ xs: 12, md: 6, lg: 4, xl: 3,
15
+ };
16
+ const CoursesList = () => {
17
+ var _a, _b;
18
+ const intl = useIntl();
19
+ const navigate = useNavigate();
20
+ const maxCourses = getAppConfig(appId).HOMEPAGE_COURSE_MAX || DEFAULT_COURSES_COUNT;
21
+ const { data: courseData, isLoading: isCoursesLoading, isError: isCoursesError, } = useCourseListSearch({
22
+ pageSize: maxCourses,
23
+ pageIndex: DEFAULT_PAGE_INDEX,
24
+ enableCourseSortingByStartDate: getAppConfig(appId).ENABLE_COURSE_SORTING_BY_START_DATE === true,
25
+ });
26
+ const handleNavigateToCoursesPage = () => {
27
+ const coursesUrl = getUrlByRouteRole(coursesRole);
28
+ if (coursesUrl) {
29
+ navigate(coursesUrl);
30
+ }
31
+ };
32
+ if (isCoursesLoading) {
33
+ return (_jsx(Container, { className: "py-6", size: "xl", "data-testid": "courses-list-loading", children: _jsx(LoaderSlot, { children: _jsx(CardGrid, { columnSizes: CARD_GRID_LAYOUT, children: Array.from({ length: maxCourses }, (_, index) => (_jsx(HomeCourseCardSlot, { isLoading: true }, `courses-list-loading-skeleton-card-${index}`))) }) }) }));
34
+ }
35
+ if (isCoursesError) {
36
+ return (_jsx(Container, { className: "py-6", size: "xl", children: _jsx(Alert, { className: "my-0", variant: "danger", children: _jsx(ErrorPage
37
+ // @ts-expect-error frontend-base ErrorPage declares message?: null but renders the prop as text. Remove when typing is fixed upstream.
38
+ , {
39
+ // @ts-expect-error frontend-base ErrorPage declares message?: null but renders the prop as text. Remove when typing is fixed upstream.
40
+ message: intl.formatMessage(messages.errorMessage, {
41
+ supportEmail: getAppConfig(appId).INFO_EMAIL,
42
+ }) }) }) }));
43
+ }
44
+ if (getAppConfig(appId).NON_BROWSABLE_COURSES) {
45
+ return null;
46
+ }
47
+ return (_jsx(Container, { className: "py-6", size: "xl", "data-testid": "courses-list", children: !((_a = courseData === null || courseData === void 0 ? void 0 : courseData.results) === null || _a === void 0 ? void 0 : _a.length) ? (_jsx(AlertNotification, { className: "my-0", variant: "info", title: intl.formatMessage(messages.noCoursesAvailable), message: intl.formatMessage(messages.noCoursesAvailableMessage) })) : (_jsxs(Container, { className: "text-center", children: [_jsx(CardGrid, { columnSizes: CARD_GRID_LAYOUT, children: (_b = courseData === null || courseData === void 0 ? void 0 : courseData.results) === null || _b === void 0 ? void 0 : _b.map(course => (_jsx(HomeCourseCardSlot, { original: course }, course.id))) }), (courseData === null || courseData === void 0 ? void 0 : courseData.total) > maxCourses && (_jsx(Button, { className: "mt-3", variant: "brand", onClick: handleNavigateToCoursesPage, children: intl.formatMessage(messages.viewAllCoursesButton) }))] })) }));
48
+ };
49
+ export default CoursesList;
50
+ //# sourceMappingURL=CoursesList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoursesList.js","sourceRoot":"","sources":["../../../../src/home/components/courses-list/CoursesList.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,OAAO,GACpD,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,GACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,kBAAkB,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,gBAAgB,GAAG;IACvB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,GAAG,GAAG,EAAE;;IACvB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,UAAU,GAAI,YAAY,CAAC,KAAK,CAAC,CAAC,mBAA0C,IAAI,qBAAqB,CAAC;IAE5G,MAAM,EACJ,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,cAAc,GACxB,GAAG,mBAAmB,CAAC;QACtB,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,kBAAkB;QAC7B,8BAA8B,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,mCAAmC,KAAK,IAAI;KACjG,CAAC,CAAC;IAEH,MAAM,2BAA2B,GAAG,GAAG,EAAE;QACvC,MAAM,UAAU,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CACL,KAAC,SAAS,IAAC,SAAS,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,iBAAa,sBAAsB,YACtE,KAAC,UAAU,cACT,KAAC,QAAQ,IAAC,WAAW,EAAE,gBAAgB,YACpC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAChD,KAAC,kBAAkB,IAAqD,SAAS,UAAxD,sCAAsC,KAAK,EAAE,CAAc,CACrF,CAAC,GACO,GACA,GACH,CACb,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CACL,KAAC,SAAS,IAAC,SAAS,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,YACnC,KAAC,KAAK,IAAC,SAAS,EAAC,MAAM,EAAC,OAAO,EAAC,QAAQ,YACtC,KAAC,SAAS;gBACR,uIAAuI;;oBAAvI,uIAAuI;oBACvI,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,EAAE;wBACjD,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,UAAoB;qBACvD,CAAC,GACF,GACI,GACE,CACb,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,SAAS,IACR,SAAS,EAAC,MAAM,EAChB,IAAI,EAAC,IAAI,iBACG,cAAc,YAEzB,CAAC,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,0CAAE,MAAM,CAAA,CAAC,CAAC,CAAC,CAC9B,KAAC,iBAAiB,IAChB,SAAS,EAAC,MAAM,EAChB,OAAO,EAAC,MAAM,EACd,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EACtD,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,yBAAyB,CAAC,GAC/D,CACH,CAAC,CAAC,CAAC,CACF,MAAC,SAAS,IAAC,SAAS,EAAC,aAAa,aAChC,KAAC,QAAQ,IAAC,WAAW,EAAE,gBAAgB,YACpC,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,0CAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAClC,KAAC,kBAAkB,IAAiB,QAAQ,EAAE,MAAM,IAA3B,MAAM,CAAC,EAAE,CAAsB,CACzD,CAAC,GACO,EACV,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,IAAG,UAAU,IAAI,CACjC,KAAC,MAAM,IACL,SAAS,EAAC,MAAM,EAChB,OAAO,EAAC,OAAO,EACf,OAAO,EAAE,2BAA2B,YAEnC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAC3C,CACV,IACS,CACb,GACS,CACb,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import {\n ErrorPage, getAppConfig, getUrlByRouteRole, useIntl,\n} from '@openedx/frontend-base';\nimport {\n Alert, Button, CardGrid, Container,\n} from '@openedx/paragon';\nimport { useNavigate } from 'react-router';\n\nimport { useCourseListSearch } from '@src/data/course-list-search/hooks';\nimport { AlertNotification } from '@src/generic';\nimport { DEFAULT_PAGE_INDEX } from '@src/data/course-list-search/constants';\nimport HomeCourseCardSlot from '@src/slots/HomeCourseCardSlot';\nimport { LoaderSlot } from '@src/slots/LoaderSlot';\nimport { appId, coursesRole } from '@src/constants';\nimport { DEFAULT_COURSES_COUNT } from '@src/home/constants';\n\nimport messages from './messages';\n\nconst CARD_GRID_LAYOUT = {\n xs: 12, md: 6, lg: 4, xl: 3,\n};\n\nconst CoursesList = () => {\n const intl = useIntl();\n const navigate = useNavigate();\n\n const maxCourses = (getAppConfig(appId).HOMEPAGE_COURSE_MAX as number | undefined) || DEFAULT_COURSES_COUNT;\n\n const {\n data: courseData,\n isLoading: isCoursesLoading,\n isError: isCoursesError,\n } = useCourseListSearch({\n pageSize: maxCourses,\n pageIndex: DEFAULT_PAGE_INDEX,\n enableCourseSortingByStartDate: getAppConfig(appId).ENABLE_COURSE_SORTING_BY_START_DATE === true,\n });\n\n const handleNavigateToCoursesPage = () => {\n const coursesUrl = getUrlByRouteRole(coursesRole);\n if (coursesUrl) {\n navigate(coursesUrl);\n }\n };\n\n if (isCoursesLoading) {\n return (\n <Container className=\"py-6\" size=\"xl\" data-testid=\"courses-list-loading\">\n <LoaderSlot>\n <CardGrid columnSizes={CARD_GRID_LAYOUT}>\n {Array.from({ length: maxCourses }, (_, index) => (\n <HomeCourseCardSlot key={`courses-list-loading-skeleton-card-${index}`} isLoading />\n ))}\n </CardGrid>\n </LoaderSlot>\n </Container>\n );\n }\n\n if (isCoursesError) {\n return (\n <Container className=\"py-6\" size=\"xl\">\n <Alert className=\"my-0\" variant=\"danger\">\n <ErrorPage\n // @ts-expect-error frontend-base ErrorPage declares message?: null but renders the prop as text. Remove when typing is fixed upstream.\n message={intl.formatMessage(messages.errorMessage, {\n supportEmail: getAppConfig(appId).INFO_EMAIL as string,\n })}\n />\n </Alert>\n </Container>\n );\n }\n\n if (getAppConfig(appId).NON_BROWSABLE_COURSES) {\n return null;\n }\n\n return (\n <Container\n className=\"py-6\"\n size=\"xl\"\n data-testid=\"courses-list\"\n >\n {!courseData?.results?.length ? (\n <AlertNotification\n className=\"my-0\"\n variant=\"info\"\n title={intl.formatMessage(messages.noCoursesAvailable)}\n message={intl.formatMessage(messages.noCoursesAvailableMessage)}\n />\n ) : (\n <Container className=\"text-center\">\n <CardGrid columnSizes={CARD_GRID_LAYOUT}>\n {courseData?.results?.map(course => (\n <HomeCourseCardSlot key={course.id} original={course} />\n ))}\n </CardGrid>\n {courseData?.total > maxCourses && (\n <Button\n className=\"mt-3\"\n variant=\"brand\"\n onClick={handleNavigateToCoursesPage}\n >\n {intl.formatMessage(messages.viewAllCoursesButton)}\n </Button>\n )}\n </Container>\n )}\n </Container>\n );\n};\n\nexport default CoursesList;\n"]}
@@ -0,0 +1,23 @@
1
+ declare const messages: {
2
+ errorMessage: {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ noCoursesAvailable: {
8
+ id: string;
9
+ defaultMessage: string;
10
+ description: string;
11
+ };
12
+ noCoursesAvailableMessage: {
13
+ id: string;
14
+ defaultMessage: string;
15
+ description: string;
16
+ };
17
+ viewAllCoursesButton: {
18
+ id: string;
19
+ defaultMessage: string;
20
+ description: string;
21
+ };
22
+ };
23
+ export default messages;
@@ -0,0 +1,25 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ errorMessage: {
4
+ id: 'category.catalog.error-page-message',
5
+ defaultMessage: 'If you experience repeated failures, please email support at {supportEmail}',
6
+ description: 'Error page message.',
7
+ },
8
+ noCoursesAvailable: {
9
+ id: 'category.catalog.alert.no-courses-available',
10
+ defaultMessage: 'No courses available',
11
+ description: 'No courses available alert title.',
12
+ },
13
+ noCoursesAvailableMessage: {
14
+ id: 'category.catalog.alert.no-courses-available-message',
15
+ defaultMessage: 'There are currently no courses available in the catalog. Please check back later for new offerings.',
16
+ description: 'No courses available alert message.',
17
+ },
18
+ viewAllCoursesButton: {
19
+ id: 'category.catalog.home-page.view-courses-button',
20
+ defaultMessage: 'View all courses',
21
+ description: 'Label for the button that redirect to courses page.',
22
+ },
23
+ });
24
+ export default messages;
25
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/home/components/courses-list/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,YAAY,EAAE;QACZ,EAAE,EAAE,qCAAqC;QACzC,cAAc,EAAE,6EAA6E;QAC7F,WAAW,EAAE,qBAAqB;KACnC;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,6CAA6C;QACjD,cAAc,EAAE,sBAAsB;QACtC,WAAW,EAAE,mCAAmC;KACjD;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,qDAAqD;QACzD,cAAc,EAAE,qGAAqG;QACrH,WAAW,EAAE,qCAAqC;KACnD;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,gDAAgD;QACpD,cAAc,EAAE,kBAAkB;QAClC,WAAW,EAAE,qDAAqD;KACnE;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n errorMessage: {\n id: 'category.catalog.error-page-message',\n defaultMessage: 'If you experience repeated failures, please email support at {supportEmail}',\n description: 'Error page message.',\n },\n noCoursesAvailable: {\n id: 'category.catalog.alert.no-courses-available',\n defaultMessage: 'No courses available',\n description: 'No courses available alert title.',\n },\n noCoursesAvailableMessage: {\n id: 'category.catalog.alert.no-courses-available-message',\n defaultMessage: 'There are currently no courses available in the catalog. Please check back later for new offerings.',\n description: 'No courses available alert message.',\n },\n viewAllCoursesButton: {\n id: 'category.catalog.home-page.view-courses-button',\n defaultMessage: 'View all courses',\n description: 'Label for the button that redirect to courses page.',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,2 @@
1
+ declare const HomeBanner: () => import("react/jsx-runtime").JSX.Element;
2
+ export default HomeBanner;
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { useNavigate } from 'react-router';
4
+ import { getAppConfig, getUrlByRouteRole, useIntl } from '@openedx/frontend-base';
5
+ import { Form, useToggle, SearchField, Container, } from '@openedx/paragon';
6
+ import { appId, coursesRole } from '../../../constants';
7
+ import HomeOverlayHtmlSlot from '../../../slots/HomeOverlayHtmlSlot';
8
+ import { HomePromoVideoButtonSlot, HomePromoVideoModalSlot } from '../../../slots/HomePromoVideoSlots';
9
+ import messages from './messages';
10
+ const HomeBanner = () => {
11
+ const intl = useIntl();
12
+ const navigate = useNavigate();
13
+ const [searchValue, setSearchValue] = useState('');
14
+ const [isOpen, open, close] = useToggle(false);
15
+ const handleSearch = () => {
16
+ const coursesUrl = getUrlByRouteRole(coursesRole);
17
+ if (coursesUrl) {
18
+ navigate(`${coursesUrl}?search_query=${searchValue}`);
19
+ }
20
+ };
21
+ const searchField = getAppConfig(appId).ENABLE_COURSE_DISCOVERY === true && (_jsx(Form.Group, { className: "mt-4.5", children: _jsx(SearchField, { placeholder: intl.formatMessage(messages.searchPlaceholder), value: searchValue, submitButtonLocation: "external", onChange: (value) => setSearchValue(value), onSubmit: handleSearch }) }));
22
+ return (_jsxs("section", { className: "home-banner d-flex justify-content-center align-items-center position-relative overflow-hidden", "data-testid": "home-banner", children: [_jsxs("div", { className: "animation-wrapper d-flex justify-content-center align-items-center flex-column p-4 my-5", children: [_jsx(HomeOverlayHtmlSlot, {}), _jsx(HomePromoVideoButtonSlot, { onClick: open }), _jsx(Container, { size: "sm", children: searchField })] }), _jsx(HomePromoVideoModalSlot, { isOpen: isOpen, close: close, videoId: getAppConfig(appId).HOMEPAGE_PROMO_VIDEO_YOUTUBE_ID || '' })] }));
23
+ };
24
+ export default HomeBanner;
25
+ //# sourceMappingURL=HomeBanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HomeBanner.js","sourceRoot":"","sources":["../../../../src/home/components/home-banner/HomeBanner.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EACL,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,GACxC,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,mBAAmB,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEnG,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,UAAU,GAAG,GAAG,EAAE;IACtB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAE/C,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,MAAM,UAAU,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,GAAG,UAAU,iBAAiB,WAAW,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,uBAAuB,KAAK,IAAI,IAAI,CAC1E,KAAC,IAAI,CAAC,KAAK,IAAC,SAAS,EAAC,QAAQ,YAC5B,KAAC,WAAW,IACV,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAC3D,KAAK,EAAE,WAAW,EAClB,oBAAoB,EAAC,UAAU,EAC/B,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAClD,QAAQ,EAAE,YAAY,GACtB,GACS,CACd,CAAC;IAEF,OAAO,CACL,mBACE,SAAS,EAAC,gGAAgG,iBAC9F,aAAa,aAEzB,eAAK,SAAS,EAAC,yFAAyF,aACtG,KAAC,mBAAmB,KAAG,EACvB,KAAC,wBAAwB,IAAC,OAAO,EAAE,IAAI,GAAI,EAC3C,KAAC,SAAS,IAAC,IAAI,EAAC,IAAI,YACjB,WAAW,GACF,IACR,EACN,KAAC,uBAAuB,IACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,OAAO,EAAG,YAAY,CAAC,KAAK,CAAC,CAAC,+BAAsD,IAAI,EAAE,GAC1F,IACM,CACX,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC","sourcesContent":["import { useState } from 'react';\nimport { useNavigate } from 'react-router';\nimport { getAppConfig, getUrlByRouteRole, useIntl } from '@openedx/frontend-base';\nimport {\n Form, useToggle, SearchField, Container,\n} from '@openedx/paragon';\n\nimport { appId, coursesRole } from '@src/constants';\nimport HomeOverlayHtmlSlot from '@src/slots/HomeOverlayHtmlSlot';\nimport { HomePromoVideoButtonSlot, HomePromoVideoModalSlot } from '@src/slots/HomePromoVideoSlots';\n\nimport messages from './messages';\n\nconst HomeBanner = () => {\n const intl = useIntl();\n const navigate = useNavigate();\n const [searchValue, setSearchValue] = useState('');\n const [isOpen, open, close] = useToggle(false);\n\n const handleSearch = () => {\n const coursesUrl = getUrlByRouteRole(coursesRole);\n if (coursesUrl) {\n navigate(`${coursesUrl}?search_query=${searchValue}`);\n }\n };\n\n const searchField = getAppConfig(appId).ENABLE_COURSE_DISCOVERY === true && (\n <Form.Group className=\"mt-4.5\">\n <SearchField\n placeholder={intl.formatMessage(messages.searchPlaceholder)}\n value={searchValue}\n submitButtonLocation=\"external\"\n onChange={(value: string) => setSearchValue(value)}\n onSubmit={handleSearch}\n />\n </Form.Group>\n );\n\n return (\n <section\n className=\"home-banner d-flex justify-content-center align-items-center position-relative overflow-hidden\"\n data-testid=\"home-banner\"\n >\n <div className=\"animation-wrapper d-flex justify-content-center align-items-center flex-column p-4 my-5\">\n <HomeOverlayHtmlSlot />\n <HomePromoVideoButtonSlot onClick={open} />\n <Container size=\"sm\">\n {searchField}\n </Container>\n </div>\n <HomePromoVideoModalSlot\n isOpen={isOpen}\n close={close}\n videoId={(getAppConfig(appId).HOMEPAGE_PROMO_VIDEO_YOUTUBE_ID as string | undefined) || ''}\n />\n </section>\n );\n};\n\nexport default HomeBanner;\n"]}
@@ -0,0 +1,2 @@
1
+ declare const HomePageOverlay: () => import("react/jsx-runtime").JSX.Element;
2
+ export default HomePageOverlay;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getSiteConfig, useIntl } from '@openedx/frontend-base';
3
+ import messages from './messages';
4
+ const HomePageOverlay = () => {
5
+ const intl = useIntl();
6
+ const { siteName } = getSiteConfig();
7
+ return (_jsxs(_Fragment, { children: [_jsx("h1", { className: "display-1 text-white text-center", children: intl.formatMessage(messages.title, { siteName }) }), _jsx("p", { className: "lead text-white text-center mb-3", children: intl.formatMessage(messages.subtitle) })] }));
8
+ };
9
+ export default HomePageOverlay;
10
+ //# sourceMappingURL=HomePageOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HomePageOverlay.js","sourceRoot":"","sources":["../../../../src/home/components/home-banner/HomePageOverlay.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,eAAe,GAAG,GAAG,EAAE;IAC3B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAC;IAErC,OAAO,CACL,8BACE,aAAI,SAAS,EAAC,kCAAkC,YAC7C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,GAC9C,EACL,YAAG,SAAS,EAAC,kCAAkC,YAC5C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,GACpC,IACH,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC","sourcesContent":["import { getSiteConfig, useIntl } from '@openedx/frontend-base';\n\nimport messages from './messages';\n\nconst HomePageOverlay = () => {\n const intl = useIntl();\n const { siteName } = getSiteConfig();\n\n return (\n <>\n <h1 className=\"display-1 text-white text-center\">\n {intl.formatMessage(messages.title, { siteName })}\n </h1>\n <p className=\"lead text-white text-center mb-3\">\n {intl.formatMessage(messages.subtitle)}\n </p>\n </>\n );\n};\n\nexport default HomePageOverlay;\n"]}
@@ -0,0 +1,3 @@
1
+ import type { HomePromoVideoBtnProps } from './types';
2
+ declare const HomePromoVideoBtn: ({ onClick }: HomePromoVideoBtnProps) => import("react/jsx-runtime").JSX.Element;
3
+ export default HomePromoVideoBtn;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Button } from '@openedx/paragon';
3
+ import { useIntl } from '@openedx/frontend-base';
4
+ import messages from './messages';
5
+ const HomePromoVideoBtn = ({ onClick }) => {
6
+ const intl = useIntl();
7
+ return (_jsx(Button, { variant: "brand", className: "mb-3", onClick: onClick, children: intl.formatMessage(messages.videoButton) }));
8
+ };
9
+ export default HomePromoVideoBtn;
10
+ //# sourceMappingURL=HomePromoVideoBtn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HomePromoVideoBtn.js","sourceRoot":"","sources":["../../../../src/home/components/home-banner/HomePromoVideoBtn.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGjD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,iBAAiB,GAAG,CAAC,EAAE,OAAO,EAA0B,EAAE,EAAE;IAChE,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,OAAO,CACL,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,SAAS,EAAC,MAAM,EAAC,OAAO,EAAE,OAAO,YACtD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,GAClC,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import { Button } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport type { HomePromoVideoBtnProps } from './types';\nimport messages from './messages';\n\nconst HomePromoVideoBtn = ({ onClick }: HomePromoVideoBtnProps) => {\n const intl = useIntl();\n\n return (\n <Button variant=\"brand\" className=\"mb-3\" onClick={onClick}>\n {intl.formatMessage(messages.videoButton)}\n </Button>\n );\n};\n\nexport default HomePromoVideoBtn;\n"]}
@@ -0,0 +1,20 @@
1
+ .home-banner {
2
+ &::before {
3
+ display: block;
4
+ content: "";
5
+ position: absolute;
6
+ inset: 0;
7
+ z-index: -1;
8
+ // To generate a CSS variable with an image, use an absolute link (e.g. https://myfavoritecdn.url/home-bg.jpg)
9
+ // Paragon issue: https://github.com/openedx/paragon/issues/3707
10
+ background-image: var(--catalog-home-page-banner-background-image, none);
11
+ background-repeat: no-repeat;
12
+ background-position: center;
13
+ background-size: cover;
14
+ background-color: var(--catalog-home-page-banner-background-color, var(--pgn-color-gray-500));
15
+ }
16
+
17
+ .animation-wrapper {
18
+ animation: home-banner-info-animation 1.15s ease-in-out both 1s;
19
+ }
20
+ }
@@ -0,0 +1,28 @@
1
+ declare const messages: {
2
+ title: {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ subtitle: {
8
+ id: string;
9
+ defaultMessage: string;
10
+ description: string;
11
+ };
12
+ searchPlaceholder: {
13
+ id: string;
14
+ defaultMessage: string;
15
+ description: string;
16
+ };
17
+ videoButton: {
18
+ id: string;
19
+ defaultMessage: string;
20
+ description: string;
21
+ };
22
+ videoButtonAlt: {
23
+ id: string;
24
+ defaultMessage: string;
25
+ description: string;
26
+ };
27
+ };
28
+ export default messages;
@@ -0,0 +1,30 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ title: {
4
+ id: 'catalog.home-page.title',
5
+ defaultMessage: 'Welcome to {siteName}',
6
+ description: 'Main heading text displayed at the banner of the home page.',
7
+ },
8
+ subtitle: {
9
+ id: 'catalog.home-page.subtitle',
10
+ defaultMessage: 'It works! Powered by the Open edX® Platform',
11
+ description: 'Secondary text displayed below the main heading on the home page.',
12
+ },
13
+ searchPlaceholder: {
14
+ id: 'catalog.home-page.search-placeholder',
15
+ defaultMessage: 'Search for a course',
16
+ description: 'Placeholder text inside the course search input field.',
17
+ },
18
+ videoButton: {
19
+ id: 'catalog.home-page.video-button',
20
+ defaultMessage: 'View promo video',
21
+ description: 'Label for the button that opens the promotional video modal.',
22
+ },
23
+ videoButtonAlt: {
24
+ id: 'catalog.home-page.video-button-alt',
25
+ defaultMessage: 'search button',
26
+ description: 'Alternative text for the promo video button (for screen readers).',
27
+ },
28
+ });
29
+ export default messages;
30
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/home/components/home-banner/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,KAAK,EAAE;QACL,EAAE,EAAE,yBAAyB;QAC7B,cAAc,EAAE,uBAAuB;QACvC,WAAW,EAAE,6DAA6D;KAC3E;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,4BAA4B;QAChC,cAAc,EAAE,6CAA6C;QAC7D,WAAW,EAAE,mEAAmE;KACjF;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,sCAAsC;QAC1C,cAAc,EAAE,qBAAqB;QACrC,WAAW,EAAE,wDAAwD;KACtE;IACD,WAAW,EAAE;QACX,EAAE,EAAE,gCAAgC;QACpC,cAAc,EAAE,kBAAkB;QAClC,WAAW,EAAE,8DAA8D;KAC5E;IACD,cAAc,EAAE;QACd,EAAE,EAAE,oCAAoC;QACxC,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,mEAAmE;KACjF;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n title: {\n id: 'catalog.home-page.title',\n defaultMessage: 'Welcome to {siteName}',\n description: 'Main heading text displayed at the banner of the home page.',\n },\n subtitle: {\n id: 'catalog.home-page.subtitle',\n defaultMessage: 'It works! Powered by the Open edX® Platform',\n description: 'Secondary text displayed below the main heading on the home page.',\n },\n searchPlaceholder: {\n id: 'catalog.home-page.search-placeholder',\n defaultMessage: 'Search for a course',\n description: 'Placeholder text inside the course search input field.',\n },\n videoButton: {\n id: 'catalog.home-page.video-button',\n defaultMessage: 'View promo video',\n description: 'Label for the button that opens the promotional video modal.',\n },\n videoButtonAlt: {\n id: 'catalog.home-page.video-button-alt',\n defaultMessage: 'search button',\n description: 'Alternative text for the promo video button (for screen readers).',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,3 @@
1
+ export interface HomePromoVideoBtnProps {
2
+ onClick: () => void;
3
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/home/components/home-banner/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface HomePromoVideoBtnProps {\n onClick: () => void,\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export { default as HomeBanner } from './home-banner/HomeBanner';
2
+ export { default as CoursesList } from './courses-list/CoursesList';
@@ -0,0 +1,3 @@
1
+ export { default as HomeBanner } from './home-banner/HomeBanner';
2
+ export { default as CoursesList } from './courses-list/CoursesList';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/home/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC","sourcesContent":["export { default as HomeBanner } from './home-banner/HomeBanner';\nexport { default as CoursesList } from './courses-list/CoursesList';\n"]}
@@ -0,0 +1 @@
1
+ export declare const DEFAULT_COURSES_COUNT = 9;
@@ -0,0 +1,2 @@
1
+ export const DEFAULT_COURSES_COUNT = 9;
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/home/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC","sourcesContent":["export const DEFAULT_COURSES_COUNT = 9;\n"]}
@@ -0,0 +1,8 @@
1
+ declare const messages: {
2
+ pageTitle: {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ };
8
+ export default messages;
@@ -0,0 +1,10 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ pageTitle: {
4
+ id: 'home.page.title',
5
+ defaultMessage: 'Catalog | {siteName}',
6
+ description: 'Document title for the catalog home page.',
7
+ },
8
+ });
9
+ export default messages;
10
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/home/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,SAAS,EAAE;QACT,EAAE,EAAE,iBAAiB;QACrB,cAAc,EAAE,sBAAsB;QACtC,WAAW,EAAE,2CAA2C;KACzD;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n pageTitle: {\n id: 'home.page.title',\n defaultMessage: 'Catalog | {siteName}',\n description: 'Document title for the catalog home page.',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1 @@
1
+ export { default } from './messages';
@@ -0,0 +1,2 @@
1
+ export { default } from './messages';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC","sourcesContent":["export { default } from './messages';\n"]}
@@ -0,0 +1,23 @@
1
+ export { default as catalogApp } from './app';
2
+ export { default as catalogRoutes } from './routes';
3
+ export type { HomePromoVideoButtonSlotProps } from './slots/HomePromoVideoSlots/HomePromoVideoButtonSlot';
4
+ export type { HomePromoVideoModalSlotProps } from './slots/HomePromoVideoSlots/HomePromoVideoModalSlot';
5
+ export type { HomePromoVideoModalContentSlotProps } from './slots/HomePromoVideoSlots/HomePromoVideoModalContentSlot';
6
+ export type { HomeCourseCardSlotProps } from './slots/HomeCourseCardSlot';
7
+ export type { CourseAboutIntroSlotProps } from './slots/CourseAboutIntroSlot';
8
+ export type { CourseAboutCourseMediaSlotProps } from './slots/CourseAboutCourseMediaSlot';
9
+ export type { CourseAboutOverviewSlotProps } from './slots/CourseAboutOverviewSlot';
10
+ export type { CourseAboutSidebarSlotProps } from './slots/CourseAboutSidebarSlot';
11
+ export type { CourseAboutIntroVideoButtonSlotProps } from './slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoButtonSlot';
12
+ export type { CourseAboutIntroVideoModalSlotProps } from './slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalSlot';
13
+ export type { CourseAboutIntroVideoModalContentSlotProps } from './slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalContentSlot';
14
+ export type { CourseAboutSidebarSocialSlotProps } from './slots/CourseAboutSidebarSocialSlot';
15
+ export type { CourseAboutSidebarCoursePriceSlotProps } from './slots/CourseAboutSidebarCoursePriceSlot';
16
+ export type { CourseAboutCourseImageSlotProps } from './slots/CourseAboutCourseImageSlot';
17
+ export type { CourseAboutEnrollmentButtonSlotProps } from './slots/CourseAboutEnrollmentButtonSlot';
18
+ export type { CourseCatalogIntroSlotProps } from './slots/CourseCatalogIntroSlot';
19
+ export type { CourseCatalogSearchFieldSlotProps } from './slots/CourseCatalogSearchFieldSlot';
20
+ export type { CourseCatalogDataTableSlotProps } from './slots/CourseCatalogDataTableSlots/CourseCatalogDataTableSlot';
21
+ export type { CourseCatalogDataTableControlBarSlotProps } from './slots/CourseCatalogDataTableSlots/CourseCatalogDataTableControlBarSlot';
22
+ export type { CourseCatalogDataTableCardViewSlotProps } from './slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot';
23
+ export type { CourseCatalogDataTableCourseCardSlotProps } from './slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/CourseCatalogDataTableCourseCardSlot';
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { default as catalogApp } from './app';
2
+ export { default as catalogRoutes } from './routes';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,UAAU,CAAC","sourcesContent":["export { default as catalogApp } from './app';\nexport { default as catalogRoutes } from './routes';\n\nexport type { HomePromoVideoButtonSlotProps } from './slots/HomePromoVideoSlots/HomePromoVideoButtonSlot';\nexport type { HomePromoVideoModalSlotProps } from './slots/HomePromoVideoSlots/HomePromoVideoModalSlot';\nexport type { HomePromoVideoModalContentSlotProps } from './slots/HomePromoVideoSlots/HomePromoVideoModalContentSlot';\nexport type { HomeCourseCardSlotProps } from './slots/HomeCourseCardSlot';\nexport type { CourseAboutIntroSlotProps } from './slots/CourseAboutIntroSlot';\nexport type { CourseAboutCourseMediaSlotProps } from './slots/CourseAboutCourseMediaSlot';\nexport type { CourseAboutOverviewSlotProps } from './slots/CourseAboutOverviewSlot';\nexport type { CourseAboutSidebarSlotProps } from './slots/CourseAboutSidebarSlot';\nexport type { CourseAboutIntroVideoButtonSlotProps } from './slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoButtonSlot';\nexport type { CourseAboutIntroVideoModalSlotProps } from './slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalSlot';\nexport type { CourseAboutIntroVideoModalContentSlotProps } from './slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalContentSlot';\nexport type { CourseAboutSidebarSocialSlotProps } from './slots/CourseAboutSidebarSocialSlot';\nexport type { CourseAboutSidebarCoursePriceSlotProps } from './slots/CourseAboutSidebarCoursePriceSlot';\nexport type { CourseAboutCourseImageSlotProps } from './slots/CourseAboutCourseImageSlot';\nexport type { CourseAboutEnrollmentButtonSlotProps } from './slots/CourseAboutEnrollmentButtonSlot';\nexport type { CourseCatalogIntroSlotProps } from './slots/CourseCatalogIntroSlot';\nexport type { CourseCatalogSearchFieldSlotProps } from './slots/CourseCatalogSearchFieldSlot';\nexport type { CourseCatalogDataTableSlotProps } from './slots/CourseCatalogDataTableSlots/CourseCatalogDataTableSlot';\nexport type { CourseCatalogDataTableControlBarSlotProps } from './slots/CourseCatalogDataTableSlots/CourseCatalogDataTableControlBarSlot';\nexport type { CourseCatalogDataTableCardViewSlotProps } from './slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot';\nexport type { CourseCatalogDataTableCourseCardSlotProps } from './slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/CourseCatalogDataTableCourseCardSlot';\n"]}
@@ -0,0 +1,28 @@
1
+ declare const routes: {
2
+ id: string;
3
+ path: string;
4
+ handle: {
5
+ roles: string[];
6
+ };
7
+ lazy(): Promise<{
8
+ Component: () => import("react/jsx-runtime").JSX.Element;
9
+ }>;
10
+ children: ({
11
+ index: boolean;
12
+ lazy(): Promise<{
13
+ Component: () => import("react/jsx-runtime").JSX.Element;
14
+ }>;
15
+ path?: undefined;
16
+ handle?: undefined;
17
+ } | {
18
+ path: string;
19
+ handle: {
20
+ roles: string[];
21
+ };
22
+ lazy(): Promise<{
23
+ Component: () => import("react/jsx-runtime").JSX.Element;
24
+ }>;
25
+ index?: undefined;
26
+ })[];
27
+ }[];
28
+ export default routes;
package/dist/routes.js ADDED
@@ -0,0 +1,62 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { catalogRole, coursesRole, courseAboutRole } from './constants';
11
+ const routes = [
12
+ {
13
+ id: 'org.openedx.frontend.route.catalog.main',
14
+ path: '/catalog',
15
+ handle: {
16
+ roles: [catalogRole],
17
+ },
18
+ lazy() {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const module = yield import(/* webpackChunkName: "catalog-main" */ './Main');
21
+ return { Component: module.default };
22
+ });
23
+ },
24
+ children: [
25
+ {
26
+ index: true,
27
+ lazy() {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ const module = yield import(/* webpackChunkName: "catalog-home" */ './home/HomePage');
30
+ return { Component: module.default };
31
+ });
32
+ },
33
+ },
34
+ {
35
+ path: 'courses',
36
+ handle: {
37
+ roles: [coursesRole],
38
+ },
39
+ lazy() {
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ const module = yield import(/* webpackChunkName: "catalog-courses" */ './catalog/CatalogPage');
42
+ return { Component: module.default };
43
+ });
44
+ },
45
+ },
46
+ {
47
+ path: 'courses/:courseId/about',
48
+ handle: {
49
+ roles: [courseAboutRole],
50
+ },
51
+ lazy() {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ const module = yield import(/* webpackChunkName: "catalog-course-about" */ './course-about/CourseAboutPage');
54
+ return { Component: module.default };
55
+ });
56
+ },
57
+ },
58
+ ],
59
+ },
60
+ ];
61
+ export default routes;
62
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.tsx"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,MAAM,GAAG;IACb;QACE,EAAE,EAAE,yCAAyC;QAC7C,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE;YACN,KAAK,EAAE,CAAC,WAAW,CAAC;SACrB;QACK,IAAI;;gBACR,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sCAAsC,CAAC,QAAQ,CAAC,CAAC;gBAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,CAAC;SAAA;QACD,QAAQ,EAAE;YACR;gBACE,KAAK,EAAE,IAAI;gBACL,IAAI;;wBACR,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sCAAsC,CAAC,iBAAiB,CAAC,CAAC;wBACtF,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;oBACvC,CAAC;iBAAA;aACF;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE;oBACN,KAAK,EAAE,CAAC,WAAW,CAAC;iBACrB;gBACK,IAAI;;wBACR,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,yCAAyC,CAAC,uBAAuB,CAAC,CAAC;wBAC/F,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;oBACvC,CAAC;iBAAA;aACF;YACD;gBACE,IAAI,EAAE,yBAAyB;gBAC/B,MAAM,EAAE;oBACN,KAAK,EAAE,CAAC,eAAe,CAAC;iBACzB;gBACK,IAAI;;wBACR,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,8CAA8C,CAAC,gCAAgC,CAAC,CAAC;wBAC7G,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;oBACvC,CAAC;iBAAA;aACF;SACF;KACF;CACF,CAAC;AAEF,eAAe,MAAM,CAAC","sourcesContent":["import { catalogRole, coursesRole, courseAboutRole } from './constants';\n\nconst routes = [\n {\n id: 'org.openedx.frontend.route.catalog.main',\n path: '/catalog',\n handle: {\n roles: [catalogRole],\n },\n async lazy() {\n const module = await import(/* webpackChunkName: \"catalog-main\" */ './Main');\n return { Component: module.default };\n },\n children: [\n {\n index: true,\n async lazy() {\n const module = await import(/* webpackChunkName: \"catalog-home\" */ './home/HomePage');\n return { Component: module.default };\n },\n },\n {\n path: 'courses',\n handle: {\n roles: [coursesRole],\n },\n async lazy() {\n const module = await import(/* webpackChunkName: \"catalog-courses\" */ './catalog/CatalogPage');\n return { Component: module.default };\n },\n },\n {\n path: 'courses/:courseId/about',\n handle: {\n roles: [courseAboutRole],\n },\n async lazy() {\n const module = await import(/* webpackChunkName: \"catalog-course-about\" */ './course-about/CourseAboutPage');\n return { Component: module.default };\n },\n },\n ],\n },\n];\n\nexport default routes;\n"]}
@@ -0,0 +1,6 @@
1
+ export interface CourseAboutCourseImageSlotProps {
2
+ imgSrc: string;
3
+ altText: string;
4
+ }
5
+ declare const CourseAboutCourseImageSlot: ({ imgSrc, altText }: CourseAboutCourseImageSlotProps) => import("react/jsx-runtime").JSX.Element;
6
+ export default CourseAboutCourseImageSlot;
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Image } from '@openedx/paragon';
3
+ import { Slot } from '@openedx/frontend-base';
4
+ import noCourseImg from '../../assets/images/no-course-image.svg';
5
+ const CourseAboutCourseImageSlot = ({ imgSrc, altText }) => (_jsx(Slot, { id: "org.openedx.frontend.slot.catalog.courseAboutCourseImage.v1", imgSrc: imgSrc, altText: altText, children: _jsx(Image, { className: "course-media-image shadow w-100", src: imgSrc, rounded: true, alt: altText, onError: (e) => {
6
+ e.currentTarget.src = noCourseImg;
7
+ } }) }));
8
+ export default CourseAboutCourseImageSlot;
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/slots/CourseAboutCourseImageSlot/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,WAAW,MAAM,wCAAwC,CAAC;AAOjE,MAAM,0BAA0B,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAmC,EAAE,EAAE,CAAC,CAC3F,KAAC,IAAI,IACH,EAAE,EAAC,6DAA6D,EAChE,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,YAEhB,KAAC,KAAK,IACJ,SAAS,EAAC,iCAAiC,EAC3C,GAAG,EAAE,MAAM,EACX,OAAO,QACP,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,CAAC,CAAyC,EAAE,EAAE;YACrD,CAAC,CAAC,aAAa,CAAC,GAAG,GAAG,WAAW,CAAC;QACpC,CAAC,GACD,GACG,CACR,CAAC;AAEF,eAAe,0BAA0B,CAAC","sourcesContent":["import { Image } from '@openedx/paragon';\nimport { Slot } from '@openedx/frontend-base';\n\nimport noCourseImg from '@src/assets/images/no-course-image.svg';\n\nexport interface CourseAboutCourseImageSlotProps {\n imgSrc: string,\n altText: string,\n}\n\nconst CourseAboutCourseImageSlot = ({ imgSrc, altText }: CourseAboutCourseImageSlotProps) => (\n <Slot\n id=\"org.openedx.frontend.slot.catalog.courseAboutCourseImage.v1\"\n imgSrc={imgSrc}\n altText={altText}\n >\n <Image\n className=\"course-media-image shadow w-100\"\n src={imgSrc}\n rounded\n alt={altText}\n onError={(e: React.SyntheticEvent<HTMLImageElement>) => {\n e.currentTarget.src = noCourseImg;\n }}\n />\n </Slot>\n);\n\nexport default CourseAboutCourseImageSlot;\n"]}
@@ -0,0 +1,9 @@
1
+ import type { CourseMediaPartial } from '../../course-about/types';
2
+ export interface CourseAboutCourseMediaSlotProps {
3
+ courseAboutData: {
4
+ name: string;
5
+ media: CourseMediaPartial;
6
+ };
7
+ }
8
+ declare const CourseAboutCourseMediaSlot: ({ courseAboutData }: CourseAboutCourseMediaSlotProps) => import("react/jsx-runtime").JSX.Element;
9
+ export default CourseAboutCourseMediaSlot;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Slot } from '@openedx/frontend-base';
3
+ import CourseMedia from '../../course-about/course-intro/course-media/CourseMedia';
4
+ const CourseAboutCourseMediaSlot = ({ courseAboutData }) => (_jsx(Slot, { id: "org.openedx.frontend.slot.catalog.courseAboutCourseMedia.v1", courseAboutData: courseAboutData, children: _jsx(CourseMedia, { courseAboutData: courseAboutData }) }));
5
+ export default CourseAboutCourseMediaSlot;
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/slots/CourseAboutCourseMediaSlot/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,WAAW,MAAM,yDAAyD,CAAC;AAUlF,MAAM,0BAA0B,GAAG,CAAC,EAAE,eAAe,EAAmC,EAAE,EAAE,CAAC,CAC3F,KAAC,IAAI,IACH,EAAE,EAAC,6DAA6D,EAChE,eAAe,EAAE,eAAe,YAEhC,KAAC,WAAW,IAAC,eAAe,EAAE,eAAe,GAAI,GAC5C,CACR,CAAC;AAEF,eAAe,0BAA0B,CAAC","sourcesContent":["import { Slot } from '@openedx/frontend-base';\n\nimport CourseMedia from '@src/course-about/course-intro/course-media/CourseMedia';\nimport type { CourseMediaPartial } from '@src/course-about/types';\n\nexport interface CourseAboutCourseMediaSlotProps {\n courseAboutData: {\n name: string,\n media: CourseMediaPartial,\n },\n}\n\nconst CourseAboutCourseMediaSlot = ({ courseAboutData }: CourseAboutCourseMediaSlotProps) => (\n <Slot\n id=\"org.openedx.frontend.slot.catalog.courseAboutCourseMedia.v1\"\n courseAboutData={courseAboutData}\n >\n <CourseMedia courseAboutData={courseAboutData} />\n </Slot>\n);\n\nexport default CourseAboutCourseMediaSlot;\n"]}
@@ -0,0 +1,10 @@
1
+ import type { SinglePaidMode } from '../../course-about/types';
2
+ export interface CourseAboutEnrollmentButtonSlotProps {
3
+ singlePaidMode: SinglePaidMode;
4
+ ecommerceCheckout: boolean;
5
+ isEnrollmentPending: boolean;
6
+ onEnroll: () => void;
7
+ onEcommerceCheckout: () => void;
8
+ }
9
+ declare const CourseAboutEnrollmentButtonSlot: ({ singlePaidMode, ecommerceCheckout, isEnrollmentPending, onEnroll, onEcommerceCheckout, }: CourseAboutEnrollmentButtonSlotProps) => import("react/jsx-runtime").JSX.Element;
10
+ export default CourseAboutEnrollmentButtonSlot;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Slot } from '@openedx/frontend-base';
3
+ import { EnrollmentButton } from '../../course-about/course-intro/components';
4
+ const CourseAboutEnrollmentButtonSlot = ({ singlePaidMode, ecommerceCheckout, isEnrollmentPending, onEnroll, onEcommerceCheckout, }) => (_jsx(Slot, { id: "org.openedx.frontend.slot.catalog.courseAboutEnrollmentButton.v1", singlePaidMode: singlePaidMode, ecommerceCheckout: ecommerceCheckout, isEnrollmentPending: isEnrollmentPending, onEnroll: onEnroll, onEcommerceCheckout: onEcommerceCheckout, children: _jsx(EnrollmentButton, { singlePaidMode: singlePaidMode, ecommerceCheckout: ecommerceCheckout, isEnrollmentPending: isEnrollmentPending, onEnroll: onEnroll, onEcommerceCheckout: onEcommerceCheckout }) }));
5
+ export default CourseAboutEnrollmentButtonSlot;
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/slots/CourseAboutEnrollmentButtonSlot/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAW7E,MAAM,+BAA+B,GAAG,CAAC,EACvC,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,EACR,mBAAmB,GACkB,EAAE,EAAE,CAAC,CAC1C,KAAC,IAAI,IACH,EAAE,EAAC,kEAAkE,EACrE,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB,EACpC,mBAAmB,EAAE,mBAAmB,EACxC,QAAQ,EAAE,QAAQ,EAClB,mBAAmB,EAAE,mBAAmB,YAExC,KAAC,gBAAgB,IACf,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB,EACpC,mBAAmB,EAAE,mBAAmB,EACxC,QAAQ,EAAE,QAAQ,EAClB,mBAAmB,EAAE,mBAAmB,GACxC,GACG,CACR,CAAC;AAEF,eAAe,+BAA+B,CAAC","sourcesContent":["import { Slot } from '@openedx/frontend-base';\n\nimport { EnrollmentButton } from '@src/course-about/course-intro/components';\nimport type { SinglePaidMode } from '@src/course-about/types';\n\nexport interface CourseAboutEnrollmentButtonSlotProps {\n singlePaidMode: SinglePaidMode,\n ecommerceCheckout: boolean,\n isEnrollmentPending: boolean,\n onEnroll: () => void,\n onEcommerceCheckout: () => void,\n}\n\nconst CourseAboutEnrollmentButtonSlot = ({\n singlePaidMode,\n ecommerceCheckout,\n isEnrollmentPending,\n onEnroll,\n onEcommerceCheckout,\n}: CourseAboutEnrollmentButtonSlotProps) => (\n <Slot\n id=\"org.openedx.frontend.slot.catalog.courseAboutEnrollmentButton.v1\"\n singlePaidMode={singlePaidMode}\n ecommerceCheckout={ecommerceCheckout}\n isEnrollmentPending={isEnrollmentPending}\n onEnroll={onEnroll}\n onEcommerceCheckout={onEcommerceCheckout}\n >\n <EnrollmentButton\n singlePaidMode={singlePaidMode}\n ecommerceCheckout={ecommerceCheckout}\n isEnrollmentPending={isEnrollmentPending}\n onEnroll={onEnroll}\n onEcommerceCheckout={onEcommerceCheckout}\n />\n </Slot>\n);\n\nexport default CourseAboutEnrollmentButtonSlot;\n"]}
@@ -0,0 +1,6 @@
1
+ import type { CourseAboutDataPartial } from '../../course-about/types';
2
+ export interface CourseAboutIntroSlotProps {
3
+ courseAboutData: CourseAboutDataPartial;
4
+ }
5
+ declare const CourseAboutIntroSlot: ({ courseAboutData }: CourseAboutIntroSlotProps) => import("react/jsx-runtime").JSX.Element;
6
+ export default CourseAboutIntroSlot;