@ndla/ui 51.0.0 → 53.0.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 (558) hide show
  1. package/README.md +2 -2
  2. package/es/Article/Article.js +113 -120
  3. package/es/Article/ArticleHeaderWrapper.js +14 -20
  4. package/es/Article/ArticleParagraph.js +25 -0
  5. package/es/Article/index.js +1 -0
  6. package/es/AudioPlayer/AudioPlayer.js +13 -13
  7. package/es/AudioPlayer/Controls.js +22 -38
  8. package/es/Breadcrumb/Breadcrumb.js +2 -33
  9. package/es/Breadcrumb/BreadcrumbItem.js +16 -29
  10. package/es/Breadcrumb/index.js +0 -1
  11. package/es/CodeBlock/CodeBlock.js +115 -0
  12. package/es/CodeBlock/codeLanguageOptions.js +84 -0
  13. package/es/CodeBlock/index.js +10 -0
  14. package/es/CreatedBy/CreatedBy.js +4 -4
  15. package/es/Embed/BrightcoveEmbed.js +3 -3
  16. package/es/Embed/CodeEmbed.js +2 -2
  17. package/es/Embed/ConceptEmbed.js +37 -33
  18. package/es/Embed/ExternalEmbed.js +2 -2
  19. package/es/Embed/IframeEmbed.js +1 -1
  20. package/es/Embed/ImageEmbed.js +17 -14
  21. package/es/Embed/RelatedContentEmbed.js +3 -3
  22. package/es/Embed/UuDisclaimerEmbed.js +4 -3
  23. package/es/Embed/conceptComponents.js +10 -10
  24. package/es/Figure/Figure.js +32 -19
  25. package/es/FrontpageArticle/FrontpageArticle.js +3 -3
  26. package/es/Gloss/Gloss.js +12 -10
  27. package/es/Hero/Hero.js +1 -1
  28. package/es/Image/Image.js +3 -3
  29. package/es/LanguageSelector/LanguageSelector.js +5 -5
  30. package/es/Layout/LayoutItem.js +2 -1
  31. package/es/Layout/OneColumn.js +22 -28
  32. package/es/Layout/PageContainer.js +21 -17
  33. package/es/LicenseByline/LicenseLink.js +5 -6
  34. package/es/Messages/MessageBox.js +9 -7
  35. package/es/MyNdla/Resource/index.js +1 -2
  36. package/es/MyNdla/index.js +1 -2
  37. package/es/Notion/Notion.js +4 -4
  38. package/es/Resource/BlockResource.js +13 -15
  39. package/es/Resource/ListResource.js +13 -15
  40. package/es/Search/ContentTypeResult.js +4 -4
  41. package/es/Search/SearchResult.js +11 -11
  42. package/es/Search/SearchResultSleeve.js +16 -16
  43. package/es/TreeStructure/TreeStructure.js +6 -6
  44. package/es/all.css +1 -1
  45. package/es/index.js +5 -20
  46. package/es/locale/messages-en.js +15 -2
  47. package/es/locale/messages-nb.js +15 -2
  48. package/es/locale/messages-nn.js +16 -3
  49. package/es/locale/messages-se.js +14 -1
  50. package/es/locale/messages-sma.js +15 -2
  51. package/es/types.js +0 -9
  52. package/lib/Article/Article.d.ts +8 -11
  53. package/lib/Article/Article.js +111 -118
  54. package/lib/Article/ArticleHeaderWrapper.js +14 -20
  55. package/lib/Article/ArticleParagraph.d.ts +13 -0
  56. package/lib/Article/ArticleParagraph.js +32 -0
  57. package/lib/Article/index.d.ts +2 -0
  58. package/lib/Article/index.js +7 -0
  59. package/lib/AudioPlayer/AudioPlayer.js +13 -13
  60. package/lib/AudioPlayer/Controls.js +21 -37
  61. package/lib/Breadcrumb/Breadcrumb.d.ts +1 -2
  62. package/lib/Breadcrumb/Breadcrumb.js +2 -33
  63. package/lib/Breadcrumb/BreadcrumbItem.js +16 -29
  64. package/lib/Breadcrumb/index.d.ts +0 -1
  65. package/lib/Breadcrumb/index.js +0 -7
  66. package/lib/CodeBlock/CodeBlock.d.ts +18 -0
  67. package/lib/CodeBlock/CodeBlock.js +121 -0
  68. package/lib/{Navigation/index.d.ts → CodeBlock/codeLanguageOptions.d.ts} +5 -2
  69. package/lib/CodeBlock/codeLanguageOptions.js +90 -0
  70. package/lib/CodeBlock/index.d.ts +9 -0
  71. package/lib/CodeBlock/index.js +20 -0
  72. package/lib/CreatedBy/CreatedBy.js +4 -4
  73. package/lib/Embed/BrightcoveEmbed.js +3 -3
  74. package/lib/Embed/CodeEmbed.js +2 -2
  75. package/lib/Embed/ConceptEmbed.d.ts +1 -1
  76. package/lib/Embed/ConceptEmbed.js +36 -33
  77. package/lib/Embed/ExternalEmbed.js +2 -2
  78. package/lib/Embed/IframeEmbed.js +1 -1
  79. package/lib/Embed/ImageEmbed.js +17 -14
  80. package/lib/Embed/RelatedContentEmbed.js +3 -3
  81. package/lib/Embed/UuDisclaimerEmbed.js +4 -3
  82. package/lib/Embed/conceptComponents.js +10 -10
  83. package/lib/Figure/Figure.d.ts +2 -5
  84. package/lib/Figure/Figure.js +32 -23
  85. package/lib/FrontpageArticle/FrontpageArticle.js +3 -3
  86. package/lib/Gloss/Gloss.js +12 -10
  87. package/lib/Hero/Hero.js +1 -1
  88. package/lib/Image/Image.js +2 -2
  89. package/lib/LanguageSelector/LanguageSelector.js +5 -5
  90. package/lib/Layout/LayoutItem.js +2 -1
  91. package/lib/Layout/OneColumn.d.ts +3 -8
  92. package/lib/Layout/OneColumn.js +22 -30
  93. package/lib/Layout/PageContainer.d.ts +3 -7
  94. package/lib/Layout/PageContainer.js +21 -19
  95. package/lib/LicenseByline/LicenseLink.js +5 -6
  96. package/lib/Messages/MessageBox.d.ts +2 -1
  97. package/lib/Messages/MessageBox.js +9 -7
  98. package/lib/MyNdla/Resource/index.d.ts +1 -2
  99. package/lib/MyNdla/Resource/index.js +0 -7
  100. package/lib/MyNdla/index.d.ts +1 -2
  101. package/lib/MyNdla/index.js +0 -7
  102. package/lib/Notion/Notion.js +4 -4
  103. package/lib/Resource/BlockResource.js +13 -15
  104. package/lib/Resource/ListResource.js +13 -15
  105. package/lib/Search/ContentTypeResult.js +4 -4
  106. package/lib/Search/SearchResult.js +10 -10
  107. package/lib/Search/SearchResultSleeve.js +16 -16
  108. package/lib/TreeStructure/TreeStructure.js +6 -6
  109. package/lib/all.css +1 -1
  110. package/lib/index.d.ts +5 -20
  111. package/lib/index.js +17 -254
  112. package/lib/locale/messages-en.d.ts +13 -0
  113. package/lib/locale/messages-en.js +15 -2
  114. package/lib/locale/messages-nb.d.ts +13 -0
  115. package/lib/locale/messages-nb.js +15 -2
  116. package/lib/locale/messages-nn.d.ts +13 -0
  117. package/lib/locale/messages-nn.js +16 -3
  118. package/lib/locale/messages-se.d.ts +13 -0
  119. package/lib/locale/messages-se.js +14 -1
  120. package/lib/locale/messages-sma.d.ts +13 -0
  121. package/lib/locale/messages-sma.js +15 -2
  122. package/lib/types.d.ts +0 -51
  123. package/lib/types.js +1 -10
  124. package/package.json +16 -22
  125. package/src/Article/Article.tsx +179 -119
  126. package/src/Article/ArticleHeaderWrapper.tsx +17 -21
  127. package/src/Article/ArticleParagraph.tsx +22 -0
  128. package/src/Article/index.ts +4 -0
  129. package/src/AudioPlayer/AudioPlayer.tsx +2 -2
  130. package/src/AudioPlayer/Controls.tsx +5 -5
  131. package/src/Breadcrumb/Breadcrumb.stories.tsx +0 -4
  132. package/src/Breadcrumb/Breadcrumb.tsx +1 -38
  133. package/src/Breadcrumb/BreadcrumbItem.tsx +5 -19
  134. package/src/Breadcrumb/index.ts +0 -2
  135. package/src/CodeBlock/CodeBlock.stories.tsx +113 -0
  136. package/src/CodeBlock/CodeBlock.tsx +228 -0
  137. package/src/CodeBlock/codeLanguageOptions.ts +115 -0
  138. package/src/CodeBlock/index.ts +10 -0
  139. package/src/CreatedBy/CreatedBy.tsx +2 -2
  140. package/src/Embed/AudioEmbed.stories.tsx +6 -4
  141. package/src/Embed/BrightcoveEmbed.stories.tsx +6 -4
  142. package/src/Embed/BrightcoveEmbed.tsx +2 -2
  143. package/src/Embed/CodeEmbed.tsx +2 -2
  144. package/src/Embed/ConceptEmbed.stories.tsx +6 -4
  145. package/src/Embed/ConceptEmbed.tsx +103 -96
  146. package/src/Embed/ExternalEmbed.stories.tsx +6 -4
  147. package/src/Embed/ExternalEmbed.tsx +2 -2
  148. package/src/Embed/H5pEmbed.stories.tsx +6 -4
  149. package/src/Embed/IframeEmbed.stories.tsx +6 -4
  150. package/src/Embed/IframeEmbed.tsx +1 -1
  151. package/src/Embed/ImageEmbed.stories.tsx +6 -4
  152. package/src/Embed/ImageEmbed.tsx +19 -11
  153. package/src/Embed/RelatedContentEmbed.stories.tsx +6 -4
  154. package/src/Embed/RelatedContentEmbed.tsx +3 -3
  155. package/src/Embed/UuDisclaimerEmbed.stories.tsx +23 -4
  156. package/src/Embed/UuDisclaimerEmbed.tsx +1 -1
  157. package/src/Embed/conceptComponents.tsx +1 -0
  158. package/src/Figure/Figure.tsx +57 -18
  159. package/src/Footer/Footer.stories.tsx +1 -1
  160. package/src/FrontpageArticle/FrontpageArticle.tsx +3 -3
  161. package/src/Gloss/Gloss.tsx +4 -2
  162. package/src/Hero/Hero.tsx +1 -1
  163. package/src/Image/Image.tsx +2 -2
  164. package/src/LanguageSelector/LanguageSelector.tsx +1 -1
  165. package/src/Layout/LayoutItem.tsx +2 -1
  166. package/src/Layout/OneColumn.tsx +25 -35
  167. package/src/Layout/PageContainer.tsx +19 -23
  168. package/src/LicenseByline/LicenseLink.tsx +1 -2
  169. package/src/Messages/MessageBox.tsx +3 -2
  170. package/src/MyNdla/Resource/index.ts +1 -2
  171. package/src/MyNdla/index.ts +1 -2
  172. package/src/Notion/Notion.tsx +2 -2
  173. package/src/Resource/BlockResource.tsx +4 -8
  174. package/src/Resource/ListResource.tsx +4 -6
  175. package/src/Search/ContentTypeResult.tsx +4 -4
  176. package/src/Search/SearchResult.tsx +2 -2
  177. package/src/Search/SearchResultSleeve.tsx +7 -9
  178. package/src/Table/Table.stories.tsx +8 -8
  179. package/src/TreeStructure/TreeStructure.stories.tsx +85 -28
  180. package/src/TreeStructure/TreeStructure.tsx +1 -1
  181. package/src/all.scss +2 -3
  182. package/src/index.ts +7 -48
  183. package/src/locale/messages-en.ts +17 -1
  184. package/src/locale/messages-nb.ts +17 -1
  185. package/src/locale/messages-nn.ts +18 -2
  186. package/src/locale/messages-se.ts +16 -0
  187. package/src/locale/messages-sma.ts +17 -1
  188. package/src/types.ts +0 -62
  189. package/es/Article/ArticleAccessMessage.js +0 -43
  190. package/es/Article/ArticleNotions.js +0 -90
  191. package/es/Aside/Aside.js +0 -75
  192. package/es/Aside/index.js +0 -10
  193. package/es/BannerCard/BannerCard.js +0 -84
  194. package/es/BannerCard/index.js +0 -10
  195. package/es/Breadcrumb/HeaderBreadcrumb.js +0 -57
  196. package/es/CompetenceGoalTab/CompetenceGoalItem.js +0 -42
  197. package/es/CompetenceGoalTab/CompetenceGoalTab.js +0 -75
  198. package/es/CompetenceGoalTab/CompetenceItem.js +0 -108
  199. package/es/CompetenceGoalTab/CoreElementItem.js +0 -44
  200. package/es/CompetenceGoalTab/SearchButton.js +0 -43
  201. package/es/CompetenceGoalTab/index.js +0 -10
  202. package/es/CompetenceGoalTab/styles.js +0 -57
  203. package/es/Filter/FilterButtons.js +0 -185
  204. package/es/Filter/FilterCarousel.js +0 -166
  205. package/es/Filter/ToggleItem.js +0 -68
  206. package/es/Filter/index.js +0 -10
  207. package/es/Frontpage/FrontpageAllSubjects.js +0 -254
  208. package/es/LearningPaths/LearningPathContent.js +0 -25
  209. package/es/LearningPaths/LearningPathInformation.js +0 -74
  210. package/es/LearningPaths/LearningPathLastStepNavigation.js +0 -65
  211. package/es/LearningPaths/LearningPathMenu.js +0 -103
  212. package/es/LearningPaths/LearningPathMenuAside.js +0 -62
  213. package/es/LearningPaths/LearningPathMenuContent.js +0 -109
  214. package/es/LearningPaths/LearningPathMenuIntro.js +0 -72
  215. package/es/LearningPaths/LearningPathMenuModalWrapper.js +0 -63
  216. package/es/LearningPaths/LearningPathMobileHeader.js +0 -35
  217. package/es/LearningPaths/LearningPathMobileStepInfo.js +0 -34
  218. package/es/LearningPaths/LearningPathSticky.js +0 -74
  219. package/es/LearningPaths/LearningPathWrapper.js +0 -27
  220. package/es/LearningPaths/index.js +0 -18
  221. package/es/Masthead/Masthead.js +0 -62
  222. package/es/Masthead/SkipToMainContent.js +0 -30
  223. package/es/Masthead/index.js +0 -13
  224. package/es/Masthead/utils.js +0 -38
  225. package/es/MyNdla/Resource/FolderInput.js +0 -94
  226. package/es/NDLAFilm/AllMoviesAlphabetically.js +0 -127
  227. package/es/NDLAFilm/FilmContentCard.js +0 -93
  228. package/es/NDLAFilm/FilmContentCardTags.js +0 -44
  229. package/es/NDLAFilm/FilmMovieList.js +0 -52
  230. package/es/NDLAFilm/FilmMovieSearch.js +0 -106
  231. package/es/NDLAFilm/FilmSlideshow.js +0 -138
  232. package/es/NDLAFilm/MovieGrid.js +0 -54
  233. package/es/NDLAFilm/VisualElement.js +0 -48
  234. package/es/NDLAFilm/filmStyles.js +0 -31
  235. package/es/NDLAFilm/index.js +0 -14
  236. package/es/NDLAFilm/isLetter.js +0 -13
  237. package/es/NDLAFilm/types.js +0 -1
  238. package/es/Navigation/NavigationBox.js +0 -187
  239. package/es/Navigation/index.js +0 -10
  240. package/es/NoContentBox/NoContentBox.js +0 -31
  241. package/es/NoContentBox/index.js +0 -10
  242. package/es/Programme/Programme.js +0 -104
  243. package/es/Programme/ProgrammeSubjects.js +0 -60
  244. package/es/Programme/index.js +0 -12
  245. package/es/ResourceGroup/ResourceGroup.js +0 -46
  246. package/es/ResourceGroup/ResourceItem.js +0 -196
  247. package/es/ResourceGroup/ResourceList.js +0 -57
  248. package/es/ResourceGroup/index.js +0 -10
  249. package/es/ResourcesWrapper/ResourcesTopicTitle.js +0 -160
  250. package/es/ResourcesWrapper/ResourcesWrapper.js +0 -27
  251. package/es/ResourcesWrapper/index.js +0 -11
  252. package/es/SearchTypeResult/ActiveFilterContent.js +0 -53
  253. package/es/SearchTypeResult/ActiveFilters.js +0 -124
  254. package/es/SearchTypeResult/PopupFilter.js +0 -133
  255. package/es/SearchTypeResult/ResultNavigation.js +0 -75
  256. package/es/SearchTypeResult/SearchFieldHeader.js +0 -103
  257. package/es/SearchTypeResult/SearchFilterContent.js +0 -59
  258. package/es/SearchTypeResult/SearchHeader.js +0 -160
  259. package/es/SearchTypeResult/SearchItem.js +0 -97
  260. package/es/SearchTypeResult/SearchItemList.js +0 -142
  261. package/es/SearchTypeResult/SearchItems.js +0 -60
  262. package/es/SearchTypeResult/SearchSubjectItem.js +0 -62
  263. package/es/SearchTypeResult/SearchSubjectResult.js +0 -34
  264. package/es/SearchTypeResult/SearchTypeHeader.js +0 -118
  265. package/es/SearchTypeResult/SearchTypeResult.js +0 -55
  266. package/es/SearchTypeResult/SearchViewType.js +0 -90
  267. package/es/SearchTypeResult/components/ItemContexts.js +0 -122
  268. package/es/SearchTypeResult/components/ItemResourceHeader.js +0 -96
  269. package/es/SearchTypeResult/components/ItemTopicHeader.js +0 -66
  270. package/es/SearchTypeResult/components/SubjectFilters.js +0 -130
  271. package/es/SearchTypeResult/index.js +0 -14
  272. package/es/Subject/SubjectBanner.js +0 -30
  273. package/es/Subject/index.js +0 -9
  274. package/es/ToolboxPage/ToolboxInfo.js +0 -43
  275. package/es/ToolboxPage/index.js +0 -10
  276. package/es/Topic/Loader.js +0 -107
  277. package/es/Topic/Topic.js +0 -221
  278. package/es/Topic/index.js +0 -10
  279. package/es/locale/LocaleProvider.js +0 -38
  280. package/lib/Article/ArticleAccessMessage.d.ts +0 -12
  281. package/lib/Article/ArticleAccessMessage.js +0 -50
  282. package/lib/Article/ArticleNotions.d.ts +0 -14
  283. package/lib/Article/ArticleNotions.js +0 -96
  284. package/lib/Aside/Aside.d.ts +0 -15
  285. package/lib/Aside/Aside.js +0 -80
  286. package/lib/Aside/index.d.ts +0 -9
  287. package/lib/Aside/index.js +0 -16
  288. package/lib/BannerCard/BannerCard.d.ts +0 -29
  289. package/lib/BannerCard/BannerCard.js +0 -92
  290. package/lib/BannerCard/index.d.ts +0 -9
  291. package/lib/BannerCard/index.js +0 -13
  292. package/lib/Breadcrumb/HeaderBreadcrumb.d.ts +0 -14
  293. package/lib/Breadcrumb/HeaderBreadcrumb.js +0 -64
  294. package/lib/CompetenceGoalTab/CompetenceGoalItem.d.ts +0 -10
  295. package/lib/CompetenceGoalTab/CompetenceGoalItem.js +0 -49
  296. package/lib/CompetenceGoalTab/CompetenceGoalTab.d.ts +0 -14
  297. package/lib/CompetenceGoalTab/CompetenceGoalTab.js +0 -82
  298. package/lib/CompetenceGoalTab/CompetenceItem.d.ts +0 -30
  299. package/lib/CompetenceGoalTab/CompetenceItem.js +0 -113
  300. package/lib/CompetenceGoalTab/CoreElementItem.d.ts +0 -10
  301. package/lib/CompetenceGoalTab/CoreElementItem.js +0 -51
  302. package/lib/CompetenceGoalTab/SearchButton.d.ts +0 -14
  303. package/lib/CompetenceGoalTab/SearchButton.js +0 -50
  304. package/lib/CompetenceGoalTab/index.d.ts +0 -9
  305. package/lib/CompetenceGoalTab/index.js +0 -16
  306. package/lib/CompetenceGoalTab/styles.d.ts +0 -28
  307. package/lib/CompetenceGoalTab/styles.js +0 -62
  308. package/lib/Filter/FilterButtons.d.ts +0 -16
  309. package/lib/Filter/FilterButtons.js +0 -192
  310. package/lib/Filter/FilterCarousel.d.ts +0 -13
  311. package/lib/Filter/FilterCarousel.js +0 -171
  312. package/lib/Filter/ToggleItem.d.ts +0 -21
  313. package/lib/Filter/ToggleItem.js +0 -75
  314. package/lib/Filter/index.d.ts +0 -9
  315. package/lib/Filter/index.js +0 -20
  316. package/lib/Frontpage/FrontpageAllSubjects.d.ts +0 -27
  317. package/lib/Frontpage/FrontpageAllSubjects.js +0 -259
  318. package/lib/LearningPaths/LearningPathContent.d.ts +0 -13
  319. package/lib/LearningPaths/LearningPathContent.js +0 -33
  320. package/lib/LearningPaths/LearningPathInformation.d.ts +0 -18
  321. package/lib/LearningPaths/LearningPathInformation.js +0 -80
  322. package/lib/LearningPaths/LearningPathLastStepNavigation.d.ts +0 -22
  323. package/lib/LearningPaths/LearningPathLastStepNavigation.js +0 -72
  324. package/lib/LearningPaths/LearningPathMenu.d.ts +0 -38
  325. package/lib/LearningPaths/LearningPathMenu.js +0 -110
  326. package/lib/LearningPaths/LearningPathMenuAside.d.ts +0 -24
  327. package/lib/LearningPaths/LearningPathMenuAside.js +0 -69
  328. package/lib/LearningPaths/LearningPathMenuContent.d.ts +0 -22
  329. package/lib/LearningPaths/LearningPathMenuContent.js +0 -116
  330. package/lib/LearningPaths/LearningPathMenuIntro.d.ts +0 -17
  331. package/lib/LearningPaths/LearningPathMenuIntro.js +0 -77
  332. package/lib/LearningPaths/LearningPathMenuModalWrapper.d.ts +0 -14
  333. package/lib/LearningPaths/LearningPathMenuModalWrapper.js +0 -70
  334. package/lib/LearningPaths/LearningPathMobileHeader.d.ts +0 -9
  335. package/lib/LearningPaths/LearningPathMobileHeader.js +0 -42
  336. package/lib/LearningPaths/LearningPathMobileStepInfo.d.ts +0 -13
  337. package/lib/LearningPaths/LearningPathMobileStepInfo.js +0 -41
  338. package/lib/LearningPaths/LearningPathSticky.d.ts +0 -22
  339. package/lib/LearningPaths/LearningPathSticky.js +0 -84
  340. package/lib/LearningPaths/LearningPathWrapper.d.ts +0 -14
  341. package/lib/LearningPaths/LearningPathWrapper.js +0 -35
  342. package/lib/LearningPaths/index.d.ts +0 -17
  343. package/lib/LearningPaths/index.js +0 -74
  344. package/lib/Masthead/Masthead.d.ts +0 -23
  345. package/lib/Masthead/Masthead.js +0 -68
  346. package/lib/Masthead/SkipToMainContent.d.ts +0 -12
  347. package/lib/Masthead/SkipToMainContent.js +0 -37
  348. package/lib/Masthead/index.d.ts +0 -12
  349. package/lib/Masthead/index.js +0 -36
  350. package/lib/Masthead/utils.d.ts +0 -11
  351. package/lib/Masthead/utils.js +0 -46
  352. package/lib/MyNdla/Resource/FolderInput.d.ts +0 -19
  353. package/lib/MyNdla/Resource/FolderInput.js +0 -101
  354. package/lib/NDLAFilm/AllMoviesAlphabetically.d.ts +0 -13
  355. package/lib/NDLAFilm/AllMoviesAlphabetically.js +0 -134
  356. package/lib/NDLAFilm/FilmContentCard.d.ts +0 -19
  357. package/lib/NDLAFilm/FilmContentCard.js +0 -98
  358. package/lib/NDLAFilm/FilmContentCardTags.d.ts +0 -15
  359. package/lib/NDLAFilm/FilmContentCardTags.js +0 -51
  360. package/lib/NDLAFilm/FilmMovieList.d.ts +0 -17
  361. package/lib/NDLAFilm/FilmMovieList.js +0 -59
  362. package/lib/NDLAFilm/FilmMovieSearch.d.ts +0 -21
  363. package/lib/NDLAFilm/FilmMovieSearch.js +0 -113
  364. package/lib/NDLAFilm/FilmSlideshow.d.ts +0 -13
  365. package/lib/NDLAFilm/FilmSlideshow.js +0 -143
  366. package/lib/NDLAFilm/MovieGrid.d.ts +0 -17
  367. package/lib/NDLAFilm/MovieGrid.js +0 -61
  368. package/lib/NDLAFilm/VisualElement.d.ts +0 -16
  369. package/lib/NDLAFilm/VisualElement.js +0 -53
  370. package/lib/NDLAFilm/filmStyles.d.ts +0 -17
  371. package/lib/NDLAFilm/filmStyles.js +0 -39
  372. package/lib/NDLAFilm/index.d.ts +0 -13
  373. package/lib/NDLAFilm/index.js +0 -41
  374. package/lib/NDLAFilm/isLetter.d.ts +0 -8
  375. package/lib/NDLAFilm/isLetter.js +0 -20
  376. package/lib/NDLAFilm/types.d.ts +0 -22
  377. package/lib/NDLAFilm/types.js +0 -5
  378. package/lib/Navigation/NavigationBox.d.ts +0 -30
  379. package/lib/Navigation/NavigationBox.js +0 -193
  380. package/lib/Navigation/index.js +0 -13
  381. package/lib/NoContentBox/NoContentBox.d.ts +0 -14
  382. package/lib/NoContentBox/NoContentBox.js +0 -38
  383. package/lib/NoContentBox/index.d.ts +0 -9
  384. package/lib/NoContentBox/index.js +0 -16
  385. package/lib/Programme/Programme.d.ts +0 -16
  386. package/lib/Programme/Programme.js +0 -112
  387. package/lib/Programme/ProgrammeSubjects.d.ts +0 -26
  388. package/lib/Programme/ProgrammeSubjects.js +0 -67
  389. package/lib/Programme/index.d.ts +0 -11
  390. package/lib/Programme/index.js +0 -23
  391. package/lib/ResourceGroup/ResourceGroup.d.ts +0 -18
  392. package/lib/ResourceGroup/ResourceGroup.js +0 -53
  393. package/lib/ResourceGroup/ResourceItem.d.ts +0 -22
  394. package/lib/ResourceGroup/ResourceItem.js +0 -203
  395. package/lib/ResourceGroup/ResourceList.d.ts +0 -19
  396. package/lib/ResourceGroup/ResourceList.js +0 -64
  397. package/lib/ResourceGroup/index.d.ts +0 -9
  398. package/lib/ResourceGroup/index.js +0 -16
  399. package/lib/ResourcesWrapper/ResourcesTopicTitle.d.ts +0 -20
  400. package/lib/ResourcesWrapper/ResourcesTopicTitle.js +0 -165
  401. package/lib/ResourcesWrapper/ResourcesWrapper.d.ts +0 -16
  402. package/lib/ResourcesWrapper/ResourcesWrapper.js +0 -34
  403. package/lib/ResourcesWrapper/index.d.ts +0 -10
  404. package/lib/ResourcesWrapper/index.js +0 -23
  405. package/lib/SearchTypeResult/ActiveFilterContent.d.ts +0 -23
  406. package/lib/SearchTypeResult/ActiveFilterContent.js +0 -58
  407. package/lib/SearchTypeResult/ActiveFilters.d.ts +0 -18
  408. package/lib/SearchTypeResult/ActiveFilters.js +0 -131
  409. package/lib/SearchTypeResult/PopupFilter.d.ts +0 -26
  410. package/lib/SearchTypeResult/PopupFilter.js +0 -138
  411. package/lib/SearchTypeResult/ResultNavigation.d.ts +0 -18
  412. package/lib/SearchTypeResult/ResultNavigation.js +0 -82
  413. package/lib/SearchTypeResult/SearchFieldHeader.d.ts +0 -17
  414. package/lib/SearchTypeResult/SearchFieldHeader.js +0 -109
  415. package/lib/SearchTypeResult/SearchFilterContent.d.ts +0 -16
  416. package/lib/SearchTypeResult/SearchFilterContent.js +0 -64
  417. package/lib/SearchTypeResult/SearchHeader.d.ts +0 -26
  418. package/lib/SearchTypeResult/SearchHeader.js +0 -166
  419. package/lib/SearchTypeResult/SearchItem.d.ts +0 -30
  420. package/lib/SearchTypeResult/SearchItem.js +0 -104
  421. package/lib/SearchTypeResult/SearchItemList.d.ts +0 -10
  422. package/lib/SearchTypeResult/SearchItemList.js +0 -147
  423. package/lib/SearchTypeResult/SearchItems.d.ts +0 -17
  424. package/lib/SearchTypeResult/SearchItems.js +0 -65
  425. package/lib/SearchTypeResult/SearchSubjectItem.d.ts +0 -20
  426. package/lib/SearchTypeResult/SearchSubjectItem.js +0 -67
  427. package/lib/SearchTypeResult/SearchSubjectResult.d.ts +0 -13
  428. package/lib/SearchTypeResult/SearchSubjectResult.js +0 -41
  429. package/lib/SearchTypeResult/SearchTypeHeader.d.ts +0 -22
  430. package/lib/SearchTypeResult/SearchTypeHeader.js +0 -123
  431. package/lib/SearchTypeResult/SearchTypeResult.d.ts +0 -26
  432. package/lib/SearchTypeResult/SearchTypeResult.js +0 -62
  433. package/lib/SearchTypeResult/SearchViewType.d.ts +0 -13
  434. package/lib/SearchTypeResult/SearchViewType.js +0 -95
  435. package/lib/SearchTypeResult/components/ItemContexts.d.ts +0 -19
  436. package/lib/SearchTypeResult/components/ItemContexts.js +0 -127
  437. package/lib/SearchTypeResult/components/ItemResourceHeader.d.ts +0 -16
  438. package/lib/SearchTypeResult/components/ItemResourceHeader.js +0 -101
  439. package/lib/SearchTypeResult/components/ItemTopicHeader.d.ts +0 -17
  440. package/lib/SearchTypeResult/components/ItemTopicHeader.js +0 -71
  441. package/lib/SearchTypeResult/components/SubjectFilters.d.ts +0 -32
  442. package/lib/SearchTypeResult/components/SubjectFilters.js +0 -135
  443. package/lib/SearchTypeResult/index.d.ts +0 -14
  444. package/lib/SearchTypeResult/index.js +0 -41
  445. package/lib/Subject/SubjectBanner.d.ts +0 -14
  446. package/lib/Subject/SubjectBanner.js +0 -37
  447. package/lib/Subject/index.d.ts +0 -8
  448. package/lib/Subject/index.js +0 -13
  449. package/lib/ToolboxPage/ToolboxInfo.d.ts +0 -18
  450. package/lib/ToolboxPage/ToolboxInfo.js +0 -49
  451. package/lib/ToolboxPage/index.d.ts +0 -9
  452. package/lib/ToolboxPage/index.js +0 -13
  453. package/lib/Topic/Loader.d.ts +0 -9
  454. package/lib/Topic/Loader.js +0 -114
  455. package/lib/Topic/Topic.d.ts +0 -34
  456. package/lib/Topic/Topic.js +0 -228
  457. package/lib/Topic/index.d.ts +0 -10
  458. package/lib/Topic/index.js +0 -16
  459. package/lib/locale/LocaleProvider.d.ts +0 -15
  460. package/lib/locale/LocaleProvider.js +0 -44
  461. package/src/Article/ArticleAccessMessage.tsx +0 -44
  462. package/src/Article/ArticleNotions.tsx +0 -139
  463. package/src/Article/component.article.scss +0 -156
  464. package/src/Aside/Aside.tsx +0 -113
  465. package/src/Aside/index.ts +0 -11
  466. package/src/BannerCard/BannerCard.tsx +0 -99
  467. package/src/BannerCard/index.ts +0 -11
  468. package/src/Breadcrumb/HeaderBreadcrumb.tsx +0 -56
  469. package/src/CompetenceGoalTab/CompetenceGoalItem.tsx +0 -39
  470. package/src/CompetenceGoalTab/CompetenceGoalTab.tsx +0 -85
  471. package/src/CompetenceGoalTab/CompetenceItem.tsx +0 -130
  472. package/src/CompetenceGoalTab/CoreElementItem.tsx +0 -39
  473. package/src/CompetenceGoalTab/SearchButton.tsx +0 -50
  474. package/src/CompetenceGoalTab/index.ts +0 -10
  475. package/src/CompetenceGoalTab/styles.ts +0 -37
  476. package/src/Figure/component.figure.scss +0 -60
  477. package/src/Filter/FilterButtons.tsx +0 -199
  478. package/src/Filter/FilterCarousel.tsx +0 -172
  479. package/src/Filter/ToggleItem.tsx +0 -180
  480. package/src/Filter/index.ts +0 -10
  481. package/src/Frontpage/FrontpageAllSubjects.tsx +0 -231
  482. package/src/LearningPaths/LearningPathContent.tsx +0 -33
  483. package/src/LearningPaths/LearningPathInformation.tsx +0 -82
  484. package/src/LearningPaths/LearningPathLastStepNavigation.tsx +0 -89
  485. package/src/LearningPaths/LearningPathMenu.stories.tsx +0 -65
  486. package/src/LearningPaths/LearningPathMenu.tsx +0 -166
  487. package/src/LearningPaths/LearningPathMenuAside.tsx +0 -100
  488. package/src/LearningPaths/LearningPathMenuContent.tsx +0 -277
  489. package/src/LearningPaths/LearningPathMenuIntro.tsx +0 -126
  490. package/src/LearningPaths/LearningPathMenuModalWrapper.tsx +0 -71
  491. package/src/LearningPaths/LearningPathMobileHeader.tsx +0 -37
  492. package/src/LearningPaths/LearningPathMobileStepInfo.tsx +0 -38
  493. package/src/LearningPaths/LearningPathSticky.tsx +0 -122
  494. package/src/LearningPaths/LearningPathWrapper.tsx +0 -36
  495. package/src/LearningPaths/index.ts +0 -19
  496. package/src/Masthead/Masthead.tsx +0 -100
  497. package/src/Masthead/SkipToMainContent.tsx +0 -54
  498. package/src/Masthead/index.ts +0 -16
  499. package/src/Masthead/utils.ts +0 -45
  500. package/src/MyNdla/Resource/FolderInput.stories.tsx +0 -27
  501. package/src/MyNdla/Resource/FolderInput.tsx +0 -89
  502. package/src/NDLAFilm/AllMoviesAlphabetically.tsx +0 -160
  503. package/src/NDLAFilm/FilmContentCard.tsx +0 -138
  504. package/src/NDLAFilm/FilmContentCardTags.tsx +0 -57
  505. package/src/NDLAFilm/FilmMovieList.tsx +0 -54
  506. package/src/NDLAFilm/FilmMovieSearch.tsx +0 -135
  507. package/src/NDLAFilm/FilmSlideshow.tsx +0 -177
  508. package/src/NDLAFilm/MovieGrid.tsx +0 -86
  509. package/src/NDLAFilm/VisualElement.tsx +0 -38
  510. package/src/NDLAFilm/__tests__/isLetter-test.ts +0 -20
  511. package/src/NDLAFilm/filmStyles.ts +0 -49
  512. package/src/NDLAFilm/index.ts +0 -15
  513. package/src/NDLAFilm/isLetter.ts +0 -13
  514. package/src/NDLAFilm/types.ts +0 -24
  515. package/src/Navigation/NavigationBox.tsx +0 -252
  516. package/src/Navigation/index.ts +0 -11
  517. package/src/NoContentBox/NoContentBox.tsx +0 -32
  518. package/src/NoContentBox/index.ts +0 -11
  519. package/src/Programme/Programme.tsx +0 -101
  520. package/src/Programme/ProgrammeSubjects.tsx +0 -83
  521. package/src/Programme/index.ts +0 -13
  522. package/src/ResourceGroup/ResourceGroup.tsx +0 -65
  523. package/src/ResourceGroup/ResourceItem.stories.tsx +0 -101
  524. package/src/ResourceGroup/ResourceItem.tsx +0 -318
  525. package/src/ResourceGroup/ResourceList.tsx +0 -80
  526. package/src/ResourceGroup/index.ts +0 -11
  527. package/src/ResourcesWrapper/ResourcesTopicTitle.tsx +0 -223
  528. package/src/ResourcesWrapper/ResourcesWrapper.tsx +0 -32
  529. package/src/ResourcesWrapper/index.ts +0 -13
  530. package/src/SearchTypeResult/ActiveFilterContent.tsx +0 -55
  531. package/src/SearchTypeResult/ActiveFilters.tsx +0 -163
  532. package/src/SearchTypeResult/PopupFilter.tsx +0 -149
  533. package/src/SearchTypeResult/ResultNavigation.tsx +0 -105
  534. package/src/SearchTypeResult/SearchFieldHeader.tsx +0 -129
  535. package/src/SearchTypeResult/SearchFilterContent.tsx +0 -61
  536. package/src/SearchTypeResult/SearchHeader.tsx +0 -180
  537. package/src/SearchTypeResult/SearchItem.tsx +0 -144
  538. package/src/SearchTypeResult/SearchItemList.tsx +0 -161
  539. package/src/SearchTypeResult/SearchItems.tsx +0 -72
  540. package/src/SearchTypeResult/SearchSubjectItem.tsx +0 -74
  541. package/src/SearchTypeResult/SearchSubjectResult.tsx +0 -58
  542. package/src/SearchTypeResult/SearchTypeHeader.tsx +0 -148
  543. package/src/SearchTypeResult/SearchTypeResult.tsx +0 -89
  544. package/src/SearchTypeResult/SearchViewType.tsx +0 -111
  545. package/src/SearchTypeResult/components/ItemContexts.tsx +0 -131
  546. package/src/SearchTypeResult/components/ItemResourceHeader.tsx +0 -130
  547. package/src/SearchTypeResult/components/ItemTopicHeader.tsx +0 -88
  548. package/src/SearchTypeResult/components/SubjectFilters.tsx +0 -149
  549. package/src/SearchTypeResult/index.ts +0 -17
  550. package/src/Subject/SubjectBanner.tsx +0 -39
  551. package/src/Subject/index.ts +0 -9
  552. package/src/ToolboxPage/ToolboxInfo.tsx +0 -42
  553. package/src/ToolboxPage/index.ts +0 -11
  554. package/src/Topic/Loader.tsx +0 -29
  555. package/src/Topic/Topic.tsx +0 -348
  556. package/src/Topic/index.ts +0 -13
  557. package/src/locale/LocaleProvider.tsx +0 -31
  558. package/src/main.scss +0 -6
@@ -6,37 +6,139 @@
6
6
  *
7
7
  */
8
8
 
9
- import { ReactNode, useEffect, useRef, useState, forwardRef } from "react";
10
- import BEMHelper from "react-bem-helper";
9
+ import { ReactNode, forwardRef, ComponentPropsWithRef, useMemo, CSSProperties } from "react";
10
+ import { SerializedStyles, css } from "@emotion/react";
11
11
  import styled from "@emotion/styled";
12
12
 
13
- import { spacing, mq, breakpoints } from "@ndla/core";
14
- import { useIntersectionObserver } from "@ndla/hooks";
13
+ import { spacing, mq, breakpoints, fonts, colors, spacingUnit } from "@ndla/core";
15
14
  import { Heading, Text } from "@ndla/typography";
16
- import { resizeObserver } from "@ndla/util";
17
- import ArticleAccessMessage from "./ArticleAccessMessage";
18
15
  import ArticleByline from "./ArticleByline";
19
16
  import ArticleHeaderWrapper from "./ArticleHeaderWrapper";
20
- import ArticleNotions from "./ArticleNotions";
21
17
  import LayoutItem from "../Layout";
22
18
  import MessageBox from "../Messages/MessageBox";
23
19
  import { Article as ArticleType } from "../types";
24
20
 
25
- const classes = new BEMHelper({
26
- name: "article",
27
- prefix: "c-",
28
- });
21
+ export type ArticleModifier =
22
+ | "clean"
23
+ | "in-topic"
24
+ | "subject-material"
25
+ | "assessment-resources"
26
+ | "tasks-and-activities"
27
+ | "concept"
28
+ | "source-material";
29
29
 
30
- type ArticleWrapperProps = {
31
- modifier?: string;
32
- children: ReactNode;
30
+ interface ArticleWrapperProps extends ComponentPropsWithRef<"article"> {
31
+ modifier?: ArticleModifier;
32
+ }
33
+
34
+ const StyledArticle = styled.article`
35
+ font-family: ${fonts.serif};
36
+ background: ${colors.white};
37
+ margin-top: ${spacing.large};
38
+ margin-right: auto;
39
+ margin-bottom: ${spacing.normal};
40
+ margin-left: auto;
41
+ overflow-wrap: break-word;
42
+ ${fonts.sizes("18px", "29px")};
43
+ position: relative;
44
+
45
+ mjx-stretchy-v > mjx-ext > mjx-c {
46
+ transform: scaleY(100) translateY(0.075em);
47
+ }
48
+
49
+ > section > p {
50
+ &:not([class]) {
51
+ margin-bottom: 29px;
52
+ }
53
+ }
54
+
55
+ ${mq.range({ from: breakpoints.tablet })} {
56
+ ${fonts.sizes("18px", "29px")}; //This is probably not needed, but it's here to be sure.
57
+
58
+ > section > p {
59
+ &:not([class]) {
60
+ margin-bottom: 35px;
61
+ }
62
+ }
63
+ padding: 0 ${spacing.normal} ${spacing.normal};
64
+ margin-bottom: ${spacing.large};
65
+ margin-top: -${spacingUnit * 6}px;
66
+ padding-top: ${spacing.xlarge};
67
+ }
68
+ ${mq.range({ from: breakpoints.desktop })} {
69
+ padding-bottom: ${spacing.large};
70
+ margin-bottom: ${spacing.large};
71
+ }
72
+
73
+ &::after {
74
+ content: "";
75
+ display: table;
76
+ clear: both;
77
+ }
78
+
79
+ p {
80
+ margin-top: 0;
81
+ }
82
+ `;
83
+
84
+ // Make sure to wrap modifiers in & {} to avoid specificity issues
85
+ const articleModifiers: Partial<Record<ArticleModifier, SerializedStyles>> = {
86
+ clean: css`
87
+ & {
88
+ margin-top: ${spacing.normal} !important;
89
+ padding: ${spacing.small} !important;
90
+ ${mq.range({ from: breakpoints.tablet })} {
91
+ padding: 0 !important;
92
+ }
93
+ border: none;
94
+ }
95
+ `,
96
+ "in-topic": css`
97
+ & {
98
+ margin-top: 0 !important;
99
+ padding: 0 !important;
100
+ padding-left: ${spacing.medium} !important;
101
+ }
102
+ `,
33
103
  };
34
104
 
35
- export const ArticleWrapper = forwardRef<HTMLElement, ArticleWrapperProps>(({ children, modifier }, ref) => (
36
- <article {...classes(undefined, modifier)} ref={ref}>
37
- {children}
38
- </article>
39
- ));
105
+ const borderCss = css`
106
+ ${mq.range({ from: breakpoints.tablet })} {
107
+ border: 2px solid var(--color);
108
+ }
109
+ `;
110
+
111
+ export const ArticleWrapper = forwardRef<HTMLElement, ArticleWrapperProps>(({ children, modifier, ...rest }, ref) => {
112
+ const borderColor = useMemo(() => {
113
+ let color = undefined;
114
+ if (modifier === "subject-material") {
115
+ color = colors.subjectMaterial.light;
116
+ } else if (modifier === "assessment-resources") {
117
+ color = colors.assessmentResource.background;
118
+ } else if (modifier === "tasks-and-activities") {
119
+ color = colors.tasksAndActivities.background;
120
+ } else if (modifier === "concept") {
121
+ color = colors.concept.light;
122
+ } else if (modifier === "source-material") {
123
+ color = colors.sourceMaterial.light;
124
+ }
125
+ if (color) {
126
+ return { "--color": color } as CSSProperties;
127
+ }
128
+ return undefined;
129
+ }, [modifier]);
130
+
131
+ return (
132
+ <StyledArticle
133
+ css={[borderColor ? borderCss : undefined, modifier ? articleModifiers[modifier] : undefined]}
134
+ style={borderColor}
135
+ {...rest}
136
+ ref={ref}
137
+ >
138
+ {children}
139
+ </StyledArticle>
140
+ );
141
+ });
40
142
 
41
143
  type ArticleTitleProps = {
42
144
  icon?: ReactNode;
@@ -46,28 +148,40 @@ type ArticleTitleProps = {
46
148
  lang?: string;
47
149
  };
48
150
 
49
- export const ArticleTitle = ({ children, icon, label, id, lang }: ArticleTitleProps) => {
50
- const modifiers = [];
51
- if (icon) {
52
- modifiers.push("icon");
53
- }
54
-
55
- let labelView = null;
151
+ const TitleLabelText = styled(Text)`
152
+ color: #757575;
153
+ text-transform: uppercase;
154
+ font-family: ${fonts.sans};
155
+ `;
56
156
 
57
- if (label) {
58
- labelView = <p>{label}</p>;
157
+ const ArticleTitleWrapper = styled.div`
158
+ display: flex;
159
+ gap: ${spacing.normal};
160
+ align-items: flex-start;
161
+ h1 {
162
+ overflow-wrap: anywhere;
59
163
  }
164
+ padding-bottom: ${spacing.medium};
165
+ [data-badge] {
166
+ flex-shrink: 0;
167
+ }
168
+ `;
60
169
 
61
- return (
62
- <div {...classes("title", modifiers)}>
63
- {icon}
64
- {labelView}
65
- <Heading element="h1" headingStyle="h1-resource" id={id} tabIndex={-1} lang={lang}>
170
+ export const ArticleTitle = ({ children, icon, label, id, lang }: ArticleTitleProps) => (
171
+ <ArticleTitleWrapper>
172
+ {icon}
173
+ <hgroup>
174
+ {!!label && (
175
+ <TitleLabelText textStyle="meta-text-medium" margin="none">
176
+ {label}
177
+ </TitleLabelText>
178
+ )}
179
+ <Heading element="h1" margin="none" headingStyle="h1-resource" id={id} tabIndex={-1} lang={lang}>
66
180
  {children}
67
181
  </Heading>
68
- </div>
69
- );
70
- };
182
+ </hgroup>
183
+ </ArticleTitleWrapper>
184
+ );
71
185
 
72
186
  type ArticleIntroductionProps = {
73
187
  children: ReactNode;
@@ -107,30 +221,15 @@ type Props = {
107
221
  article: ArticleType;
108
222
  icon?: ReactNode;
109
223
  licenseBox?: ReactNode;
110
- modifier?: string;
224
+ modifier?: ArticleModifier;
111
225
  children?: ReactNode;
112
226
  messages: Messages;
113
- contentTransformed?: boolean;
114
227
  messageBoxLinks?: [];
115
228
  competenceGoals?: ReactNode;
116
229
  id: string;
117
- notions?: ReactNode;
118
- accessMessage?: string;
119
230
  lang?: string;
120
231
  };
121
232
 
122
- const getArticleContent = (content: any, contentTransformed?: boolean) => {
123
- if (contentTransformed) {
124
- return content;
125
- }
126
- switch (typeof content) {
127
- case "function":
128
- return content();
129
- default:
130
- return content;
131
- }
132
- };
133
-
134
233
  export const Article = ({
135
234
  article,
136
235
  icon,
@@ -141,82 +240,43 @@ export const Article = ({
141
240
  children,
142
241
  competenceGoals,
143
242
  id,
144
- notions,
145
- accessMessage,
146
243
  heartButton,
147
- contentTransformed,
148
244
  lang,
149
245
  }: Props) => {
150
- const articleRef = useRef<HTMLDivElement>(null);
151
- const wrapperRef = useRef<HTMLDivElement>(null);
152
- const { entry } = useIntersectionObserver({
153
- rootMargin: "400px",
154
- target: articleRef.current,
155
- threshold: 0.1,
156
- });
157
- const [articlePositionRight, setArticlePositionRight] = useState(0);
158
-
159
- const showExplainNotions = entry && entry.isIntersecting;
160
-
161
- useEffect(() => {
162
- if (wrapperRef && wrapperRef.current) {
163
- const handler = () => {
164
- if (wrapperRef && wrapperRef.current) {
165
- const offset =
166
- wrapperRef.current.getBoundingClientRect().left + wrapperRef.current.getBoundingClientRect().width;
167
- setArticlePositionRight(offset);
168
- }
169
- };
170
- handler();
171
-
172
- return resizeObserver(document.body, handler);
173
- }
174
- }, [wrapperRef]);
175
-
176
246
  const { title, introduction, published, content, footNotes, copyright } = article;
177
247
 
178
248
  const authors =
179
249
  copyright?.creators.length || copyright?.rightsholders.length ? copyright.creators : copyright?.processors;
180
250
 
181
251
  return (
182
- <div ref={wrapperRef}>
183
- <ArticleWrapper modifier={modifier} ref={articleRef}>
184
- <LayoutItem layout="center">
185
- {accessMessage && <ArticleAccessMessage message={accessMessage} />}
186
-
187
- {messages.messageBox && (
188
- <MSGboxWrapper>
189
- <MessageBox links={messageBoxLinks}>{messages.messageBox}</MessageBox>
190
- </MSGboxWrapper>
191
- )}
192
- <ArticleHeaderWrapper competenceGoals={competenceGoals}>
193
- {heartButton ? <ArticleFavoritesButtonWrapper>{heartButton}</ArticleFavoritesButtonWrapper> : null}
194
- <ArticleTitle id={id} icon={icon} label={messages.label} lang={lang}>
195
- {title}
196
- </ArticleTitle>
197
- <ArticleIntroduction lang={lang}>{introduction}</ArticleIntroduction>
198
- </ArticleHeaderWrapper>
199
- </LayoutItem>
200
- <LayoutItem layout="center">
201
- {notions && showExplainNotions && (
202
- <ArticleNotions buttonOffsetRight={articlePositionRight}>{notions}</ArticleNotions>
203
- )}
204
- {getArticleContent(content, contentTransformed)}
205
- </LayoutItem>
206
-
207
- <LayoutItem layout="center">
208
- <ArticleByline
209
- footnotes={footNotes}
210
- authors={authors}
211
- suppliers={copyright?.rightsholders}
212
- published={published}
213
- license={copyright?.license?.license ?? ""}
214
- licenseBox={licenseBox}
215
- />
216
- </LayoutItem>
217
- <LayoutItem layout="extend">{children}</LayoutItem>
218
- </ArticleWrapper>
219
- </div>
252
+ <ArticleWrapper modifier={modifier} data-ndla-article="">
253
+ <LayoutItem layout="center">
254
+ {messages.messageBox && (
255
+ <MSGboxWrapper>
256
+ <MessageBox links={messageBoxLinks}>{messages.messageBox}</MessageBox>
257
+ </MSGboxWrapper>
258
+ )}
259
+ <ArticleHeaderWrapper competenceGoals={competenceGoals}>
260
+ {heartButton ? <ArticleFavoritesButtonWrapper>{heartButton}</ArticleFavoritesButtonWrapper> : null}
261
+ <ArticleTitle id={id} icon={icon} label={messages.label} lang={lang}>
262
+ {title}
263
+ </ArticleTitle>
264
+ <ArticleIntroduction lang={lang}>{introduction}</ArticleIntroduction>
265
+ </ArticleHeaderWrapper>
266
+ </LayoutItem>
267
+ <LayoutItem layout="center">{content}</LayoutItem>
268
+ <LayoutItem layout="center">
269
+ <ArticleByline
270
+ footnotes={footNotes}
271
+ authors={authors}
272
+ suppliers={copyright?.rightsholders}
273
+ published={published}
274
+ license={copyright?.license?.license ?? ""}
275
+ licenseBox={licenseBox}
276
+ />
277
+ </LayoutItem>
278
+ <LayoutItem layout="extend">{children}</LayoutItem>
279
+ </ArticleWrapper>
220
280
  );
221
281
  };
222
282
 
@@ -6,36 +6,32 @@
6
6
  *
7
7
  */
8
8
 
9
- import { ReactNode, useEffect } from "react";
10
- import BEMHelper from "react-bem-helper";
11
- import { isMobile } from "react-device-detect";
12
-
13
- const classes = new BEMHelper({
14
- name: "article",
15
- prefix: "c-",
16
- });
9
+ import { ReactNode } from "react";
10
+ import styled from "@emotion/styled";
11
+ import { breakpoints, mq, spacing } from "@ndla/core";
17
12
 
18
13
  type Props = {
19
14
  competenceGoals?: ReactNode;
20
15
  children: ReactNode;
21
16
  };
22
17
 
23
- const ArticleHeaderWrapper = ({ children, competenceGoals }: Props) => {
24
- useEffect(() => {
25
- if (isMobile) {
26
- const heroContentList: NodeListOf<HTMLElement> = document.querySelectorAll(".c-article__header");
27
- if (heroContentList.length === 1) {
28
- heroContentList[0].scrollIntoView(true);
29
- window.scrollBy(0, heroContentList[0].offsetTop - 120); // Adjust for header
30
- }
31
- }
32
- }, []);
18
+ const StyledHeaderWrapper = styled.div`
19
+ margin-bottom: ${spacing.normal};
20
+ ${mq.range({ from: breakpoints.tablet })} {
21
+ margin-bottom: ${spacing.large};
22
+ }
23
+ `;
33
24
 
25
+ const CompetenceWrapper = styled.div`
26
+ margin-top: ${spacing.normal};
27
+ `;
28
+
29
+ const ArticleHeaderWrapper = ({ children, competenceGoals }: Props) => {
34
30
  return (
35
- <div {...classes("header")}>
31
+ <StyledHeaderWrapper>
36
32
  {children}
37
- <div {...classes("competence")}>{competenceGoals}</div>
38
- </div>
33
+ <CompetenceWrapper>{competenceGoals}</CompetenceWrapper>
34
+ </StyledHeaderWrapper>
39
35
  );
40
36
  };
41
37
 
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Copyright (c) 2024-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import { ComponentPropsWithoutRef, ReactNode } from "react";
10
+ import styled from "@emotion/styled";
11
+
12
+ interface Props extends ComponentPropsWithoutRef<"p"> {
13
+ children?: ReactNode;
14
+ }
15
+
16
+ const StyledParagraph = styled.p`
17
+ &[data-align="center"] {
18
+ text-align: center;
19
+ }
20
+ `;
21
+
22
+ export const ArticleParagraph = (props: Props) => <StyledParagraph {...props} />;
@@ -12,4 +12,8 @@ import ArticleFootNotes from "./ArticleFootNotes";
12
12
  import ArticleHeaderWrapper from "./ArticleHeaderWrapper";
13
13
 
14
14
  export { ArticleByline, ArticleFootNotes, ArticleHeaderWrapper, ArticleTitle, ArticleIntroduction, ArticleWrapper };
15
+ export { ArticleParagraph } from "./ArticleParagraph";
16
+
17
+ export type { ArticleModifier } from "./Article";
18
+
15
19
  export default Article;
@@ -120,7 +120,7 @@ const TextVersionHeading = styled(Heading)`
120
120
  const LinkButton = styled(ButtonV2)`
121
121
  box-shadow: none;
122
122
  padding-left: 0;
123
- padding-right: 4px;
123
+ padding-right: ${spacing.xxsmall};
124
124
  min-height: ${spacing.medium};
125
125
  flex: 0 0 auto;
126
126
  &:hover,
@@ -200,7 +200,7 @@ const AudioPlayer = ({ src, title, subtitle, speech, description, img, textVersi
200
200
  <TextWrapper data-has-image={!!img}>
201
201
  <TitleWrapper>
202
202
  <div>
203
- {subtitle && subtitle.url ? <SafeLink to={subtitle.url}>{subtitle.title}</SafeLink> : subtitle?.title}
203
+ {subtitle?.url ? <SafeLink to={subtitle.url}>{subtitle.title}</SafeLink> : subtitle?.title}
204
204
  <Title element="h3" headingStyle="h4" margin="none" data-has-desc={!!description}>
205
205
  {title}
206
206
  </Title>
@@ -12,7 +12,7 @@ import styled from "@emotion/styled";
12
12
  import { Root as PopoverRoot, PopoverContent, PopoverTrigger, PopoverPortal } from "@radix-ui/react-popover";
13
13
  import { Root as SliderRoot, Track, Range, SliderThumb } from "@radix-ui/react-slider";
14
14
  import { ButtonV2, IconButtonV2 } from "@ndla/button";
15
- import { breakpoints, colors, fonts, mq, spacing, stackOrder } from "@ndla/core";
15
+ import { breakpoints, colors, fonts, misc, mq, spacing, stackOrder } from "@ndla/core";
16
16
  import { DropdownMenu, DropdownContent, DropdownItem, DropdownTrigger } from "@ndla/dropdown-menu";
17
17
  import { Back15, Forward15 } from "@ndla/icons/action";
18
18
  import { Play, Pause, VolumeUp } from "@ndla/icons/common";
@@ -82,11 +82,11 @@ const SpeedValueButton = styled(ButtonV2)`
82
82
 
83
83
  const SpeedSelectedMark = styled.span`
84
84
  align-self: flex-start;
85
- border-radius: 50%;
85
+ border-radius: ${misc.borderRadiusLarge};
86
86
  background: #d1372e;
87
87
  width: 6px;
88
88
  height: 6px;
89
- margin: 6px 0 0 2px;
89
+ margin: ${spacing.xsmall} 0 0 2px;
90
90
  `;
91
91
 
92
92
  const Time = styled.div`
@@ -132,7 +132,7 @@ const StyledThumb = styled(SliderThumb)`
132
132
  width: 20px;
133
133
  height: 20px;
134
134
  background: #5cbc80;
135
- border-radius: 50%;
135
+ border-radius: ${misc.borderRadiusLarge};
136
136
  outline: none;
137
137
  `;
138
138
 
@@ -188,7 +188,7 @@ const VolumeSliderHandle = styled(SliderThumb)`
188
188
  width: 20px;
189
189
  height: 20px;
190
190
  background: ${colors.brand.primary};
191
- border-radius: 50%;
191
+ border-radius: ${misc.borderRadiusLarge};
192
192
  `;
193
193
 
194
194
  const formatTime = (seconds: number) => {
@@ -50,10 +50,6 @@ export const CollapseLast: StoryObj<typeof Breadcrumb> = {
50
50
  args: { collapseLast: true },
51
51
  };
52
52
 
53
- export const AutoCollapse: StoryObj<typeof Breadcrumb> = {
54
- args: { autoCollapse: true },
55
- };
56
-
57
53
  export const CustomSeparator: StoryObj<typeof Breadcrumb> = {
58
54
  args: {
59
55
  renderSeparator: (item, totalCount) => (
@@ -9,12 +9,10 @@
9
9
  import { ReactNode, useRef } from "react";
10
10
  import { useTranslation } from "react-i18next";
11
11
  import styled from "@emotion/styled";
12
- import { useComponentSize, useIsomorphicLayoutEffect } from "@ndla/hooks";
13
12
  import BreadcrumbItem, { IndexedBreadcrumbItem, SimpleBreadcrumbItem } from "./BreadcrumbItem";
14
13
 
15
14
  interface Props {
16
15
  items: SimpleBreadcrumbItem[];
17
- autoCollapse?: boolean;
18
16
  collapseFirst?: boolean;
19
17
  collapseLast?: boolean;
20
18
  renderItem?: (item: IndexedBreadcrumbItem, totalCount: number) => ReactNode;
@@ -31,50 +29,18 @@ const StyledList = styled.ol`
31
29
  list-style: none;
32
30
  `;
33
31
 
34
- const Breadcrumb = ({
35
- items,
36
- autoCollapse,
37
- renderItem,
38
- renderSeparator,
39
- collapseFirst,
40
- collapseLast = true,
41
- }: Props) => {
32
+ const Breadcrumb = ({ items, renderItem, renderSeparator, collapseFirst, collapseLast = true }: Props) => {
42
33
  const { t } = useTranslation();
43
34
  const olRef = useRef<any>();
44
35
  const containerRef = useRef<HTMLDivElement>(null);
45
36
  // No idiomatic way of dealing with sets of refs yet
46
37
  // See: https://github.com/facebook/react/issues/14072#issuecomment-446777406
47
- const breadcrumbItemRefs = useRef(new Map()).current;
48
- const size = useComponentSize(containerRef);
49
-
50
- useIsomorphicLayoutEffect(() => {
51
- if (!autoCollapse) {
52
- return;
53
- }
54
- // Create an array of all breadcrumb item refs
55
- const items = Array.from(breadcrumbItemRefs).map(([key, value]) => value);
56
-
57
- // Clear max width on all items
58
- items.forEach((el) => {
59
- el.setMaxWidth("none");
60
- });
61
-
62
- // Set maxWidth on breadcrumb text items iteratively until
63
- // the ordered list fits on a single line. It's on a single line
64
- // if the height of the list is less then 70.
65
- items.forEach((el) => {
66
- if (olRef.current.offsetHeight > 60) {
67
- el.setMaxWidth("40px");
68
- }
69
- });
70
- }, [size, items]);
71
38
 
72
39
  return (
73
40
  <BreadcrumbNav ref={containerRef} aria-label={t("breadcrumb.breadcrumb")}>
74
41
  <StyledList ref={olRef}>
75
42
  {items.map((item, index) => (
76
43
  <BreadcrumbItem
77
- autoCollapse={autoCollapse}
78
44
  renderItem={renderItem}
79
45
  renderSeparator={renderSeparator}
80
46
  ref={(element) => {
@@ -86,9 +52,6 @@ const Breadcrumb = ({
86
52
  if (element) {
87
53
  element.setMaxWidth("none");
88
54
  }
89
- breadcrumbItemRefs.delete(item.to);
90
- } else {
91
- breadcrumbItemRefs.set(item.to, element);
92
55
  }
93
56
  }}
94
57
  key={typeof item.to === "string" ? item.to : item.to.pathname}
@@ -7,7 +7,6 @@
7
7
  */
8
8
 
9
9
  import { useRef, useImperativeHandle, ReactNode, forwardRef } from "react";
10
- import { css } from "@emotion/react";
11
10
  import styled from "@emotion/styled";
12
11
  import { mq, spacing, breakpoints } from "@ndla/core";
13
12
  import { ChevronRight } from "@ndla/icons/common";
@@ -38,27 +37,14 @@ const StyledListItem = styled.li<AutoCollapseProps>`
38
37
  :before {
39
38
  display: none;
40
39
  }
41
-
42
- ${({ autoCollapse }) =>
43
- !autoCollapse &&
44
- css`
45
- ${mq.range({ until: breakpoints.tablet })} {
46
- display: block;
47
- }
48
- `}
40
+ ${mq.range({ until: breakpoints.tablet })} {
41
+ display: block;
42
+ }
49
43
  `;
50
44
 
51
- const CollapseContainer = styled.div<AutoCollapseProps>`
45
+ const CollapseContainer = styled.div`
52
46
  display: inline-block;
53
47
  color: inherit;
54
- ${({ autoCollapse }) =>
55
- autoCollapse &&
56
- css`
57
- text-overflow: ellipsis;
58
- white-space: nowrap;
59
- overflow: hidden;
60
- display: inline-block;
61
- `}
62
48
  `;
63
49
 
64
50
  const StyledChevron = styled(ChevronRight)`
@@ -92,7 +78,7 @@ const BreadcrumbItem = forwardRef<any, Props>(
92
78
  const isLast = index === totalCount - 1;
93
79
  return (
94
80
  <StyledListItem ref={liRef} autoCollapse={autoCollapse} aria-current={isLast ? "page" : undefined}>
95
- <CollapseContainer autoCollapse={autoCollapse}>
81
+ <CollapseContainer>
96
82
  {renderItem ? (
97
83
  renderItem(item, totalCount)
98
84
  ) : isLast ? (
@@ -10,8 +10,6 @@ import Breadcrumb from "./Breadcrumb";
10
10
 
11
11
  export type { SimpleBreadcrumbItem, IndexedBreadcrumbItem } from "./BreadcrumbItem";
12
12
 
13
- export { default as HeaderBreadcrumb } from "./HeaderBreadcrumb";
14
-
15
13
  export { default as HomeBreadcrumb } from "./HomeBreadcrumb";
16
14
 
17
15
  export default Breadcrumb;