@ndla/ui 50.15.3 → 52.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 (572) hide show
  1. package/README.md +2 -2
  2. package/es/Article/Article.js +12 -12
  3. package/es/Article/ArticleHeaderWrapper.js +0 -11
  4. package/es/Article/ArticleNotions.js +6 -6
  5. package/es/Article/ArticleParagraph.js +25 -0
  6. package/es/Article/index.js +1 -0
  7. package/es/AudioPlayer/AudioPlayer.js +13 -13
  8. package/es/AudioPlayer/Controls.js +22 -38
  9. package/es/Breadcrumb/Breadcrumb.js +2 -33
  10. package/es/Breadcrumb/BreadcrumbItem.js +16 -29
  11. package/es/Breadcrumb/index.js +0 -1
  12. package/es/CodeBlock/CodeBlock.js +115 -0
  13. package/es/CodeBlock/codeLanguageOptions.js +84 -0
  14. package/es/CodeBlock/index.js +10 -0
  15. package/es/CreatedBy/CreatedBy.js +4 -4
  16. package/es/Embed/BrightcoveEmbed.js +3 -3
  17. package/es/Embed/CodeEmbed.js +2 -2
  18. package/es/Embed/ConceptEmbed.js +37 -33
  19. package/es/Embed/ExternalEmbed.js +2 -2
  20. package/es/Embed/IframeEmbed.js +1 -1
  21. package/es/Embed/ImageEmbed.js +18 -14
  22. package/es/Embed/RelatedContentEmbed.js +3 -3
  23. package/es/Embed/UuDisclaimerEmbed.js +4 -3
  24. package/es/Embed/conceptComponents.js +10 -10
  25. package/es/Embed/index.js +1 -1
  26. package/es/Figure/Figure.js +32 -19
  27. package/es/Footer/FooterBlock.js +17 -0
  28. package/es/Footer/index.js +1 -4
  29. package/es/FrontpageArticle/FrontpageArticle.js +3 -3
  30. package/es/Gloss/Gloss.js +12 -10
  31. package/es/Hero/Hero.js +1 -1
  32. package/es/Image/Image.js +3 -3
  33. package/es/LanguageSelector/LanguageSelector.js +5 -5
  34. package/es/Layout/LayoutItem.js +2 -1
  35. package/es/Layout/OneColumn.js +22 -28
  36. package/es/Layout/PageContainer.js +21 -17
  37. package/es/LicenseByline/LicenseLink.js +5 -6
  38. package/es/Messages/MessageBox.js +9 -7
  39. package/es/MyNdla/Resource/index.js +1 -2
  40. package/es/MyNdla/index.js +1 -2
  41. package/es/Notion/Notion.js +4 -4
  42. package/es/Resource/BlockResource.js +13 -15
  43. package/es/Resource/ListResource.js +13 -15
  44. package/es/Search/ContentTypeResult.js +4 -4
  45. package/es/Search/SearchResult.js +11 -11
  46. package/es/Search/SearchResultSleeve.js +16 -16
  47. package/es/TreeStructure/TreeStructure.js +6 -6
  48. package/es/all.css +1 -1
  49. package/es/index.js +7 -21
  50. package/es/locale/messages-en.js +14 -3
  51. package/es/locale/messages-nb.js +14 -3
  52. package/es/locale/messages-nn.js +15 -4
  53. package/es/locale/messages-se.js +13 -2
  54. package/es/locale/messages-sma.js +14 -3
  55. package/es/types.js +0 -9
  56. package/lib/Article/Article.d.ts +5 -7
  57. package/lib/Article/Article.js +12 -12
  58. package/lib/Article/ArticleHeaderWrapper.js +0 -11
  59. package/lib/Article/ArticleNotions.js +5 -5
  60. package/lib/Article/ArticleParagraph.d.ts +13 -0
  61. package/lib/Article/ArticleParagraph.js +32 -0
  62. package/lib/Article/index.d.ts +1 -0
  63. package/lib/Article/index.js +7 -0
  64. package/lib/AudioPlayer/AudioPlayer.js +13 -13
  65. package/lib/AudioPlayer/Controls.js +21 -37
  66. package/lib/Breadcrumb/Breadcrumb.d.ts +1 -2
  67. package/lib/Breadcrumb/Breadcrumb.js +2 -33
  68. package/lib/Breadcrumb/BreadcrumbItem.js +16 -29
  69. package/lib/Breadcrumb/index.d.ts +0 -1
  70. package/lib/Breadcrumb/index.js +0 -7
  71. package/lib/CodeBlock/CodeBlock.d.ts +18 -0
  72. package/lib/CodeBlock/CodeBlock.js +121 -0
  73. package/lib/{NDLAFilm/isLetter.d.ts → CodeBlock/codeLanguageOptions.d.ts} +5 -1
  74. package/lib/CodeBlock/codeLanguageOptions.js +90 -0
  75. package/lib/CodeBlock/index.d.ts +9 -0
  76. package/lib/CodeBlock/index.js +20 -0
  77. package/lib/CreatedBy/CreatedBy.js +4 -4
  78. package/lib/Embed/BrightcoveEmbed.js +3 -3
  79. package/lib/Embed/CodeEmbed.js +2 -2
  80. package/lib/Embed/ConceptEmbed.d.ts +1 -1
  81. package/lib/Embed/ConceptEmbed.js +36 -33
  82. package/lib/Embed/ExternalEmbed.js +2 -2
  83. package/lib/Embed/IframeEmbed.js +1 -1
  84. package/lib/Embed/ImageEmbed.js +18 -14
  85. package/lib/Embed/RelatedContentEmbed.js +3 -3
  86. package/lib/Embed/UuDisclaimerEmbed.js +4 -3
  87. package/lib/Embed/conceptComponents.js +10 -10
  88. package/lib/Embed/index.d.ts +1 -1
  89. package/lib/Embed/index.js +15 -3
  90. package/lib/Figure/Figure.d.ts +2 -5
  91. package/lib/Figure/Figure.js +32 -23
  92. package/lib/Footer/FooterBlock.d.ts +13 -0
  93. package/lib/Footer/FooterBlock.js +24 -0
  94. package/lib/Footer/index.d.ts +1 -4
  95. package/lib/Footer/index.js +3 -18
  96. package/lib/FrontpageArticle/FrontpageArticle.js +3 -3
  97. package/lib/Gloss/Gloss.js +12 -10
  98. package/lib/Hero/Hero.js +1 -1
  99. package/lib/Image/Image.js +2 -2
  100. package/lib/LanguageSelector/LanguageSelector.js +5 -5
  101. package/lib/Layout/LayoutItem.js +2 -1
  102. package/lib/Layout/OneColumn.d.ts +3 -8
  103. package/lib/Layout/OneColumn.js +22 -30
  104. package/lib/Layout/PageContainer.d.ts +3 -7
  105. package/lib/Layout/PageContainer.js +21 -19
  106. package/lib/LicenseByline/LicenseLink.js +5 -6
  107. package/lib/Messages/MessageBox.d.ts +2 -1
  108. package/lib/Messages/MessageBox.js +9 -7
  109. package/lib/MyNdla/Resource/index.d.ts +1 -2
  110. package/lib/MyNdla/Resource/index.js +0 -7
  111. package/lib/MyNdla/index.d.ts +1 -2
  112. package/lib/MyNdla/index.js +0 -7
  113. package/lib/Notion/Notion.js +4 -4
  114. package/lib/Resource/BlockResource.js +13 -15
  115. package/lib/Resource/ListResource.js +13 -15
  116. package/lib/Search/ContentTypeResult.js +4 -4
  117. package/lib/Search/SearchResult.js +10 -10
  118. package/lib/Search/SearchResultSleeve.js +16 -16
  119. package/lib/TreeStructure/TreeStructure.js +6 -6
  120. package/lib/all.css +1 -1
  121. package/lib/index.d.ts +6 -21
  122. package/lib/index.js +31 -249
  123. package/lib/locale/messages-en.d.ts +11 -0
  124. package/lib/locale/messages-en.js +14 -3
  125. package/lib/locale/messages-nb.d.ts +11 -0
  126. package/lib/locale/messages-nb.js +14 -3
  127. package/lib/locale/messages-nn.d.ts +11 -0
  128. package/lib/locale/messages-nn.js +15 -4
  129. package/lib/locale/messages-se.d.ts +11 -0
  130. package/lib/locale/messages-se.js +13 -2
  131. package/lib/locale/messages-sma.d.ts +11 -0
  132. package/lib/locale/messages-sma.js +14 -3
  133. package/lib/types.d.ts +0 -51
  134. package/lib/types.js +1 -10
  135. package/package.json +16 -21
  136. package/src/Article/Article.tsx +14 -18
  137. package/src/Article/ArticleHeaderWrapper.tsx +1 -12
  138. package/src/Article/ArticleNotions.tsx +3 -3
  139. package/src/Article/ArticleParagraph.tsx +22 -0
  140. package/src/Article/component.article.scss +0 -7
  141. package/src/Article/index.ts +2 -0
  142. package/src/AudioPlayer/AudioPlayer.tsx +2 -2
  143. package/src/AudioPlayer/Controls.tsx +5 -5
  144. package/src/Breadcrumb/Breadcrumb.stories.tsx +0 -4
  145. package/src/Breadcrumb/Breadcrumb.tsx +1 -38
  146. package/src/Breadcrumb/BreadcrumbItem.tsx +5 -19
  147. package/src/Breadcrumb/index.ts +0 -2
  148. package/src/CodeBlock/CodeBlock.stories.tsx +113 -0
  149. package/src/CodeBlock/CodeBlock.tsx +228 -0
  150. package/src/CodeBlock/codeLanguageOptions.ts +115 -0
  151. package/src/CodeBlock/index.ts +10 -0
  152. package/src/CreatedBy/CreatedBy.tsx +2 -2
  153. package/src/Embed/AudioEmbed.stories.tsx +6 -4
  154. package/src/Embed/BrightcoveEmbed.stories.tsx +6 -4
  155. package/src/Embed/BrightcoveEmbed.tsx +2 -2
  156. package/src/Embed/CodeEmbed.tsx +2 -2
  157. package/src/Embed/ConceptEmbed.stories.tsx +6 -4
  158. package/src/Embed/ConceptEmbed.tsx +103 -96
  159. package/src/Embed/ExternalEmbed.stories.tsx +6 -4
  160. package/src/Embed/ExternalEmbed.tsx +2 -2
  161. package/src/Embed/H5pEmbed.stories.tsx +6 -4
  162. package/src/Embed/IframeEmbed.stories.tsx +6 -4
  163. package/src/Embed/IframeEmbed.tsx +1 -1
  164. package/src/Embed/ImageEmbed.stories.tsx +6 -4
  165. package/src/Embed/ImageEmbed.tsx +20 -11
  166. package/src/Embed/RelatedContentEmbed.stories.tsx +6 -4
  167. package/src/Embed/RelatedContentEmbed.tsx +3 -3
  168. package/src/Embed/UuDisclaimerEmbed.stories.tsx +23 -4
  169. package/src/Embed/UuDisclaimerEmbed.tsx +1 -1
  170. package/src/Embed/conceptComponents.tsx +1 -0
  171. package/src/Embed/index.ts +1 -1
  172. package/src/Figure/Figure.tsx +57 -18
  173. package/src/Footer/Footer.stories.tsx +7 -105
  174. package/src/Footer/FooterBlock.tsx +30 -0
  175. package/src/Footer/index.ts +1 -5
  176. package/src/FrontpageArticle/FrontpageArticle.tsx +3 -3
  177. package/src/Gloss/Gloss.tsx +4 -2
  178. package/src/Hero/Hero.tsx +1 -1
  179. package/src/Image/Image.tsx +2 -2
  180. package/src/LanguageSelector/LanguageSelector.tsx +1 -1
  181. package/src/Layout/LayoutItem.tsx +2 -1
  182. package/src/Layout/OneColumn.tsx +25 -35
  183. package/src/Layout/PageContainer.tsx +19 -23
  184. package/src/LicenseByline/LicenseLink.tsx +1 -2
  185. package/src/Messages/MessageBox.tsx +3 -2
  186. package/src/MyNdla/Resource/index.ts +1 -2
  187. package/src/MyNdla/index.ts +1 -2
  188. package/src/Notion/Notion.tsx +2 -2
  189. package/src/Resource/BlockResource.tsx +4 -8
  190. package/src/Resource/ListResource.tsx +4 -6
  191. package/src/Search/ContentTypeResult.tsx +4 -4
  192. package/src/Search/SearchResult.tsx +2 -2
  193. package/src/Search/SearchResultSleeve.tsx +7 -9
  194. package/src/Table/Table.stories.tsx +8 -8
  195. package/src/TreeStructure/TreeStructure.stories.tsx +85 -28
  196. package/src/TreeStructure/TreeStructure.tsx +1 -1
  197. package/src/index.ts +8 -47
  198. package/src/locale/messages-en.ts +15 -1
  199. package/src/locale/messages-nb.ts +15 -1
  200. package/src/locale/messages-nn.ts +16 -2
  201. package/src/locale/messages-se.ts +14 -0
  202. package/src/locale/messages-sma.ts +15 -1
  203. package/src/main.scss +0 -2
  204. package/src/types.ts +0 -62
  205. package/es/Article/ArticleAccessMessage.js +0 -43
  206. package/es/Aside/Aside.js +0 -75
  207. package/es/Aside/index.js +0 -10
  208. package/es/BannerCard/BannerCard.js +0 -84
  209. package/es/BannerCard/index.js +0 -10
  210. package/es/Breadcrumb/HeaderBreadcrumb.js +0 -57
  211. package/es/CompetenceGoalTab/CompetenceGoalItem.js +0 -42
  212. package/es/CompetenceGoalTab/CompetenceGoalTab.js +0 -75
  213. package/es/CompetenceGoalTab/CompetenceItem.js +0 -108
  214. package/es/CompetenceGoalTab/CoreElementItem.js +0 -44
  215. package/es/CompetenceGoalTab/SearchButton.js +0 -43
  216. package/es/CompetenceGoalTab/index.js +0 -10
  217. package/es/CompetenceGoalTab/styles.js +0 -57
  218. package/es/Filter/FilterButtons.js +0 -185
  219. package/es/Filter/FilterCarousel.js +0 -166
  220. package/es/Filter/ToggleItem.js +0 -68
  221. package/es/Filter/index.js +0 -10
  222. package/es/Footer/EditorName.js +0 -20
  223. package/es/Footer/Footer.js +0 -83
  224. package/es/Footer/FooterLinks.js +0 -108
  225. package/es/Footer/FooterText.js +0 -25
  226. package/es/Frontpage/FrontpageAllSubjects.js +0 -254
  227. package/es/LearningPaths/LearningPathContent.js +0 -25
  228. package/es/LearningPaths/LearningPathInformation.js +0 -74
  229. package/es/LearningPaths/LearningPathLastStepNavigation.js +0 -65
  230. package/es/LearningPaths/LearningPathMenu.js +0 -103
  231. package/es/LearningPaths/LearningPathMenuAside.js +0 -62
  232. package/es/LearningPaths/LearningPathMenuContent.js +0 -109
  233. package/es/LearningPaths/LearningPathMenuIntro.js +0 -72
  234. package/es/LearningPaths/LearningPathMenuModalWrapper.js +0 -63
  235. package/es/LearningPaths/LearningPathMobileHeader.js +0 -35
  236. package/es/LearningPaths/LearningPathMobileStepInfo.js +0 -34
  237. package/es/LearningPaths/LearningPathSticky.js +0 -74
  238. package/es/LearningPaths/LearningPathWrapper.js +0 -27
  239. package/es/LearningPaths/index.js +0 -18
  240. package/es/MyNdla/Resource/FolderInput.js +0 -94
  241. package/es/NDLAFilm/AllMoviesAlphabetically.js +0 -127
  242. package/es/NDLAFilm/FilmContentCard.js +0 -93
  243. package/es/NDLAFilm/FilmContentCardTags.js +0 -44
  244. package/es/NDLAFilm/FilmMovieList.js +0 -52
  245. package/es/NDLAFilm/FilmMovieSearch.js +0 -106
  246. package/es/NDLAFilm/FilmSlideshow.js +0 -138
  247. package/es/NDLAFilm/MovieGrid.js +0 -54
  248. package/es/NDLAFilm/VisualElement.js +0 -48
  249. package/es/NDLAFilm/filmStyles.js +0 -31
  250. package/es/NDLAFilm/index.js +0 -14
  251. package/es/NDLAFilm/isLetter.js +0 -13
  252. package/es/NDLAFilm/types.js +0 -1
  253. package/es/Navigation/NavigationBox.js +0 -187
  254. package/es/Navigation/index.js +0 -10
  255. package/es/NoContentBox/NoContentBox.js +0 -31
  256. package/es/NoContentBox/index.js +0 -10
  257. package/es/Programme/Programme.js +0 -104
  258. package/es/Programme/ProgrammeSubjects.js +0 -60
  259. package/es/Programme/index.js +0 -12
  260. package/es/ResourceGroup/ResourceGroup.js +0 -46
  261. package/es/ResourceGroup/ResourceItem.js +0 -196
  262. package/es/ResourceGroup/ResourceList.js +0 -57
  263. package/es/ResourceGroup/index.js +0 -10
  264. package/es/ResourcesWrapper/ResourcesTopicTitle.js +0 -160
  265. package/es/ResourcesWrapper/ResourcesWrapper.js +0 -27
  266. package/es/ResourcesWrapper/index.js +0 -11
  267. package/es/SearchTypeResult/ActiveFilterContent.js +0 -53
  268. package/es/SearchTypeResult/ActiveFilters.js +0 -124
  269. package/es/SearchTypeResult/PopupFilter.js +0 -133
  270. package/es/SearchTypeResult/ResultNavigation.js +0 -75
  271. package/es/SearchTypeResult/SearchFieldHeader.js +0 -103
  272. package/es/SearchTypeResult/SearchFilterContent.js +0 -59
  273. package/es/SearchTypeResult/SearchHeader.js +0 -160
  274. package/es/SearchTypeResult/SearchItem.js +0 -97
  275. package/es/SearchTypeResult/SearchItemList.js +0 -142
  276. package/es/SearchTypeResult/SearchItems.js +0 -60
  277. package/es/SearchTypeResult/SearchSubjectItem.js +0 -62
  278. package/es/SearchTypeResult/SearchSubjectResult.js +0 -34
  279. package/es/SearchTypeResult/SearchTypeHeader.js +0 -118
  280. package/es/SearchTypeResult/SearchTypeResult.js +0 -55
  281. package/es/SearchTypeResult/SearchViewType.js +0 -90
  282. package/es/SearchTypeResult/components/ItemContexts.js +0 -122
  283. package/es/SearchTypeResult/components/ItemResourceHeader.js +0 -96
  284. package/es/SearchTypeResult/components/ItemTopicHeader.js +0 -66
  285. package/es/SearchTypeResult/components/SubjectFilters.js +0 -130
  286. package/es/SearchTypeResult/index.js +0 -14
  287. package/es/Subject/SubjectBanner.js +0 -30
  288. package/es/Subject/SubjectHeader.js +0 -66
  289. package/es/Subject/index.js +0 -10
  290. package/es/ToolboxPage/ToolboxInfo.js +0 -43
  291. package/es/ToolboxPage/index.js +0 -10
  292. package/es/Topic/Loader.js +0 -107
  293. package/es/Topic/Topic.js +0 -221
  294. package/es/Topic/index.js +0 -10
  295. package/es/locale/LocaleProvider.js +0 -38
  296. package/lib/Article/ArticleAccessMessage.d.ts +0 -12
  297. package/lib/Article/ArticleAccessMessage.js +0 -50
  298. package/lib/Aside/Aside.d.ts +0 -15
  299. package/lib/Aside/Aside.js +0 -80
  300. package/lib/Aside/index.d.ts +0 -9
  301. package/lib/Aside/index.js +0 -16
  302. package/lib/BannerCard/BannerCard.d.ts +0 -29
  303. package/lib/BannerCard/BannerCard.js +0 -92
  304. package/lib/BannerCard/index.d.ts +0 -9
  305. package/lib/BannerCard/index.js +0 -13
  306. package/lib/Breadcrumb/HeaderBreadcrumb.d.ts +0 -14
  307. package/lib/Breadcrumb/HeaderBreadcrumb.js +0 -64
  308. package/lib/CompetenceGoalTab/CompetenceGoalItem.d.ts +0 -10
  309. package/lib/CompetenceGoalTab/CompetenceGoalItem.js +0 -49
  310. package/lib/CompetenceGoalTab/CompetenceGoalTab.d.ts +0 -14
  311. package/lib/CompetenceGoalTab/CompetenceGoalTab.js +0 -82
  312. package/lib/CompetenceGoalTab/CompetenceItem.d.ts +0 -30
  313. package/lib/CompetenceGoalTab/CompetenceItem.js +0 -113
  314. package/lib/CompetenceGoalTab/CoreElementItem.d.ts +0 -10
  315. package/lib/CompetenceGoalTab/CoreElementItem.js +0 -51
  316. package/lib/CompetenceGoalTab/SearchButton.d.ts +0 -14
  317. package/lib/CompetenceGoalTab/SearchButton.js +0 -50
  318. package/lib/CompetenceGoalTab/index.d.ts +0 -9
  319. package/lib/CompetenceGoalTab/index.js +0 -16
  320. package/lib/CompetenceGoalTab/styles.d.ts +0 -28
  321. package/lib/CompetenceGoalTab/styles.js +0 -62
  322. package/lib/Filter/FilterButtons.d.ts +0 -16
  323. package/lib/Filter/FilterButtons.js +0 -192
  324. package/lib/Filter/FilterCarousel.d.ts +0 -13
  325. package/lib/Filter/FilterCarousel.js +0 -171
  326. package/lib/Filter/ToggleItem.d.ts +0 -21
  327. package/lib/Filter/ToggleItem.js +0 -75
  328. package/lib/Filter/index.d.ts +0 -9
  329. package/lib/Filter/index.js +0 -20
  330. package/lib/Footer/EditorName.d.ts +0 -13
  331. package/lib/Footer/EditorName.js +0 -27
  332. package/lib/Footer/Footer.d.ts +0 -30
  333. package/lib/Footer/Footer.js +0 -88
  334. package/lib/Footer/FooterLinks.d.ts +0 -26
  335. package/lib/Footer/FooterLinks.js +0 -115
  336. package/lib/Footer/FooterText.d.ts +0 -13
  337. package/lib/Footer/FooterText.js +0 -33
  338. package/lib/Frontpage/FrontpageAllSubjects.d.ts +0 -27
  339. package/lib/Frontpage/FrontpageAllSubjects.js +0 -259
  340. package/lib/LearningPaths/LearningPathContent.d.ts +0 -13
  341. package/lib/LearningPaths/LearningPathContent.js +0 -33
  342. package/lib/LearningPaths/LearningPathInformation.d.ts +0 -18
  343. package/lib/LearningPaths/LearningPathInformation.js +0 -80
  344. package/lib/LearningPaths/LearningPathLastStepNavigation.d.ts +0 -22
  345. package/lib/LearningPaths/LearningPathLastStepNavigation.js +0 -72
  346. package/lib/LearningPaths/LearningPathMenu.d.ts +0 -38
  347. package/lib/LearningPaths/LearningPathMenu.js +0 -110
  348. package/lib/LearningPaths/LearningPathMenuAside.d.ts +0 -24
  349. package/lib/LearningPaths/LearningPathMenuAside.js +0 -69
  350. package/lib/LearningPaths/LearningPathMenuContent.d.ts +0 -22
  351. package/lib/LearningPaths/LearningPathMenuContent.js +0 -116
  352. package/lib/LearningPaths/LearningPathMenuIntro.d.ts +0 -17
  353. package/lib/LearningPaths/LearningPathMenuIntro.js +0 -77
  354. package/lib/LearningPaths/LearningPathMenuModalWrapper.d.ts +0 -14
  355. package/lib/LearningPaths/LearningPathMenuModalWrapper.js +0 -70
  356. package/lib/LearningPaths/LearningPathMobileHeader.d.ts +0 -9
  357. package/lib/LearningPaths/LearningPathMobileHeader.js +0 -42
  358. package/lib/LearningPaths/LearningPathMobileStepInfo.d.ts +0 -13
  359. package/lib/LearningPaths/LearningPathMobileStepInfo.js +0 -41
  360. package/lib/LearningPaths/LearningPathSticky.d.ts +0 -22
  361. package/lib/LearningPaths/LearningPathSticky.js +0 -84
  362. package/lib/LearningPaths/LearningPathWrapper.d.ts +0 -14
  363. package/lib/LearningPaths/LearningPathWrapper.js +0 -35
  364. package/lib/LearningPaths/index.d.ts +0 -17
  365. package/lib/LearningPaths/index.js +0 -74
  366. package/lib/MyNdla/Resource/FolderInput.d.ts +0 -19
  367. package/lib/MyNdla/Resource/FolderInput.js +0 -101
  368. package/lib/NDLAFilm/AllMoviesAlphabetically.d.ts +0 -13
  369. package/lib/NDLAFilm/AllMoviesAlphabetically.js +0 -134
  370. package/lib/NDLAFilm/FilmContentCard.d.ts +0 -19
  371. package/lib/NDLAFilm/FilmContentCard.js +0 -98
  372. package/lib/NDLAFilm/FilmContentCardTags.d.ts +0 -15
  373. package/lib/NDLAFilm/FilmContentCardTags.js +0 -51
  374. package/lib/NDLAFilm/FilmMovieList.d.ts +0 -17
  375. package/lib/NDLAFilm/FilmMovieList.js +0 -59
  376. package/lib/NDLAFilm/FilmMovieSearch.d.ts +0 -21
  377. package/lib/NDLAFilm/FilmMovieSearch.js +0 -113
  378. package/lib/NDLAFilm/FilmSlideshow.d.ts +0 -13
  379. package/lib/NDLAFilm/FilmSlideshow.js +0 -143
  380. package/lib/NDLAFilm/MovieGrid.d.ts +0 -17
  381. package/lib/NDLAFilm/MovieGrid.js +0 -61
  382. package/lib/NDLAFilm/VisualElement.d.ts +0 -16
  383. package/lib/NDLAFilm/VisualElement.js +0 -53
  384. package/lib/NDLAFilm/filmStyles.d.ts +0 -17
  385. package/lib/NDLAFilm/filmStyles.js +0 -39
  386. package/lib/NDLAFilm/index.d.ts +0 -13
  387. package/lib/NDLAFilm/index.js +0 -41
  388. package/lib/NDLAFilm/isLetter.js +0 -20
  389. package/lib/NDLAFilm/types.d.ts +0 -22
  390. package/lib/NDLAFilm/types.js +0 -5
  391. package/lib/Navigation/NavigationBox.d.ts +0 -30
  392. package/lib/Navigation/NavigationBox.js +0 -193
  393. package/lib/Navigation/index.d.ts +0 -9
  394. package/lib/Navigation/index.js +0 -13
  395. package/lib/NoContentBox/NoContentBox.d.ts +0 -14
  396. package/lib/NoContentBox/NoContentBox.js +0 -38
  397. package/lib/NoContentBox/index.d.ts +0 -9
  398. package/lib/NoContentBox/index.js +0 -16
  399. package/lib/Programme/Programme.d.ts +0 -16
  400. package/lib/Programme/Programme.js +0 -112
  401. package/lib/Programme/ProgrammeSubjects.d.ts +0 -26
  402. package/lib/Programme/ProgrammeSubjects.js +0 -67
  403. package/lib/Programme/index.d.ts +0 -11
  404. package/lib/Programme/index.js +0 -23
  405. package/lib/ResourceGroup/ResourceGroup.d.ts +0 -18
  406. package/lib/ResourceGroup/ResourceGroup.js +0 -53
  407. package/lib/ResourceGroup/ResourceItem.d.ts +0 -22
  408. package/lib/ResourceGroup/ResourceItem.js +0 -203
  409. package/lib/ResourceGroup/ResourceList.d.ts +0 -19
  410. package/lib/ResourceGroup/ResourceList.js +0 -64
  411. package/lib/ResourceGroup/index.d.ts +0 -9
  412. package/lib/ResourceGroup/index.js +0 -16
  413. package/lib/ResourcesWrapper/ResourcesTopicTitle.d.ts +0 -20
  414. package/lib/ResourcesWrapper/ResourcesTopicTitle.js +0 -165
  415. package/lib/ResourcesWrapper/ResourcesWrapper.d.ts +0 -16
  416. package/lib/ResourcesWrapper/ResourcesWrapper.js +0 -34
  417. package/lib/ResourcesWrapper/index.d.ts +0 -10
  418. package/lib/ResourcesWrapper/index.js +0 -23
  419. package/lib/SearchTypeResult/ActiveFilterContent.d.ts +0 -23
  420. package/lib/SearchTypeResult/ActiveFilterContent.js +0 -58
  421. package/lib/SearchTypeResult/ActiveFilters.d.ts +0 -18
  422. package/lib/SearchTypeResult/ActiveFilters.js +0 -131
  423. package/lib/SearchTypeResult/PopupFilter.d.ts +0 -26
  424. package/lib/SearchTypeResult/PopupFilter.js +0 -138
  425. package/lib/SearchTypeResult/ResultNavigation.d.ts +0 -18
  426. package/lib/SearchTypeResult/ResultNavigation.js +0 -82
  427. package/lib/SearchTypeResult/SearchFieldHeader.d.ts +0 -17
  428. package/lib/SearchTypeResult/SearchFieldHeader.js +0 -109
  429. package/lib/SearchTypeResult/SearchFilterContent.d.ts +0 -16
  430. package/lib/SearchTypeResult/SearchFilterContent.js +0 -64
  431. package/lib/SearchTypeResult/SearchHeader.d.ts +0 -26
  432. package/lib/SearchTypeResult/SearchHeader.js +0 -166
  433. package/lib/SearchTypeResult/SearchItem.d.ts +0 -30
  434. package/lib/SearchTypeResult/SearchItem.js +0 -104
  435. package/lib/SearchTypeResult/SearchItemList.d.ts +0 -10
  436. package/lib/SearchTypeResult/SearchItemList.js +0 -147
  437. package/lib/SearchTypeResult/SearchItems.d.ts +0 -17
  438. package/lib/SearchTypeResult/SearchItems.js +0 -65
  439. package/lib/SearchTypeResult/SearchSubjectItem.d.ts +0 -20
  440. package/lib/SearchTypeResult/SearchSubjectItem.js +0 -67
  441. package/lib/SearchTypeResult/SearchSubjectResult.d.ts +0 -13
  442. package/lib/SearchTypeResult/SearchSubjectResult.js +0 -41
  443. package/lib/SearchTypeResult/SearchTypeHeader.d.ts +0 -22
  444. package/lib/SearchTypeResult/SearchTypeHeader.js +0 -123
  445. package/lib/SearchTypeResult/SearchTypeResult.d.ts +0 -26
  446. package/lib/SearchTypeResult/SearchTypeResult.js +0 -62
  447. package/lib/SearchTypeResult/SearchViewType.d.ts +0 -13
  448. package/lib/SearchTypeResult/SearchViewType.js +0 -95
  449. package/lib/SearchTypeResult/components/ItemContexts.d.ts +0 -19
  450. package/lib/SearchTypeResult/components/ItemContexts.js +0 -127
  451. package/lib/SearchTypeResult/components/ItemResourceHeader.d.ts +0 -16
  452. package/lib/SearchTypeResult/components/ItemResourceHeader.js +0 -101
  453. package/lib/SearchTypeResult/components/ItemTopicHeader.d.ts +0 -17
  454. package/lib/SearchTypeResult/components/ItemTopicHeader.js +0 -71
  455. package/lib/SearchTypeResult/components/SubjectFilters.d.ts +0 -32
  456. package/lib/SearchTypeResult/components/SubjectFilters.js +0 -135
  457. package/lib/SearchTypeResult/index.d.ts +0 -14
  458. package/lib/SearchTypeResult/index.js +0 -41
  459. package/lib/Subject/SubjectBanner.d.ts +0 -14
  460. package/lib/Subject/SubjectBanner.js +0 -37
  461. package/lib/Subject/SubjectHeader.d.ts +0 -17
  462. package/lib/Subject/SubjectHeader.js +0 -73
  463. package/lib/Subject/index.d.ts +0 -9
  464. package/lib/Subject/index.js +0 -20
  465. package/lib/ToolboxPage/ToolboxInfo.d.ts +0 -18
  466. package/lib/ToolboxPage/ToolboxInfo.js +0 -49
  467. package/lib/ToolboxPage/index.d.ts +0 -9
  468. package/lib/ToolboxPage/index.js +0 -13
  469. package/lib/Topic/Loader.d.ts +0 -9
  470. package/lib/Topic/Loader.js +0 -114
  471. package/lib/Topic/Topic.d.ts +0 -34
  472. package/lib/Topic/Topic.js +0 -228
  473. package/lib/Topic/index.d.ts +0 -10
  474. package/lib/Topic/index.js +0 -16
  475. package/lib/locale/LocaleProvider.d.ts +0 -15
  476. package/lib/locale/LocaleProvider.js +0 -44
  477. package/src/Article/ArticleAccessMessage.tsx +0 -44
  478. package/src/Aside/Aside.tsx +0 -113
  479. package/src/Aside/index.ts +0 -11
  480. package/src/BannerCard/BannerCard.tsx +0 -99
  481. package/src/BannerCard/index.ts +0 -11
  482. package/src/Breadcrumb/HeaderBreadcrumb.tsx +0 -56
  483. package/src/CompetenceGoalTab/CompetenceGoalItem.tsx +0 -39
  484. package/src/CompetenceGoalTab/CompetenceGoalTab.tsx +0 -85
  485. package/src/CompetenceGoalTab/CompetenceItem.tsx +0 -130
  486. package/src/CompetenceGoalTab/CoreElementItem.tsx +0 -39
  487. package/src/CompetenceGoalTab/SearchButton.tsx +0 -50
  488. package/src/CompetenceGoalTab/index.ts +0 -10
  489. package/src/CompetenceGoalTab/styles.ts +0 -37
  490. package/src/Figure/component.figure.scss +0 -60
  491. package/src/Filter/FilterButtons.tsx +0 -199
  492. package/src/Filter/FilterCarousel.tsx +0 -172
  493. package/src/Filter/ToggleItem.tsx +0 -180
  494. package/src/Filter/index.ts +0 -10
  495. package/src/Footer/EditorName.tsx +0 -19
  496. package/src/Footer/Footer.tsx +0 -107
  497. package/src/Footer/FooterLinks.tsx +0 -144
  498. package/src/Footer/FooterText.tsx +0 -35
  499. package/src/Frontpage/FrontpageAllSubjects.tsx +0 -231
  500. package/src/LearningPaths/LearningPathContent.tsx +0 -33
  501. package/src/LearningPaths/LearningPathInformation.tsx +0 -82
  502. package/src/LearningPaths/LearningPathLastStepNavigation.tsx +0 -89
  503. package/src/LearningPaths/LearningPathMenu.stories.tsx +0 -65
  504. package/src/LearningPaths/LearningPathMenu.tsx +0 -166
  505. package/src/LearningPaths/LearningPathMenuAside.tsx +0 -100
  506. package/src/LearningPaths/LearningPathMenuContent.tsx +0 -277
  507. package/src/LearningPaths/LearningPathMenuIntro.tsx +0 -126
  508. package/src/LearningPaths/LearningPathMenuModalWrapper.tsx +0 -71
  509. package/src/LearningPaths/LearningPathMobileHeader.tsx +0 -37
  510. package/src/LearningPaths/LearningPathMobileStepInfo.tsx +0 -38
  511. package/src/LearningPaths/LearningPathSticky.tsx +0 -122
  512. package/src/LearningPaths/LearningPathWrapper.tsx +0 -36
  513. package/src/LearningPaths/index.ts +0 -19
  514. package/src/MyNdla/Resource/FolderInput.stories.tsx +0 -27
  515. package/src/MyNdla/Resource/FolderInput.tsx +0 -89
  516. package/src/NDLAFilm/AllMoviesAlphabetically.tsx +0 -160
  517. package/src/NDLAFilm/FilmContentCard.tsx +0 -138
  518. package/src/NDLAFilm/FilmContentCardTags.tsx +0 -57
  519. package/src/NDLAFilm/FilmMovieList.tsx +0 -54
  520. package/src/NDLAFilm/FilmMovieSearch.tsx +0 -135
  521. package/src/NDLAFilm/FilmSlideshow.tsx +0 -177
  522. package/src/NDLAFilm/MovieGrid.tsx +0 -86
  523. package/src/NDLAFilm/VisualElement.tsx +0 -38
  524. package/src/NDLAFilm/__tests__/isLetter-test.ts +0 -20
  525. package/src/NDLAFilm/filmStyles.ts +0 -49
  526. package/src/NDLAFilm/index.ts +0 -15
  527. package/src/NDLAFilm/isLetter.ts +0 -13
  528. package/src/NDLAFilm/types.ts +0 -24
  529. package/src/Navigation/NavigationBox.tsx +0 -252
  530. package/src/Navigation/index.ts +0 -11
  531. package/src/NoContentBox/NoContentBox.tsx +0 -32
  532. package/src/NoContentBox/index.ts +0 -11
  533. package/src/Programme/Programme.tsx +0 -101
  534. package/src/Programme/ProgrammeSubjects.tsx +0 -83
  535. package/src/Programme/index.ts +0 -13
  536. package/src/ResourceGroup/ResourceGroup.tsx +0 -65
  537. package/src/ResourceGroup/ResourceItem.stories.tsx +0 -101
  538. package/src/ResourceGroup/ResourceItem.tsx +0 -318
  539. package/src/ResourceGroup/ResourceList.tsx +0 -80
  540. package/src/ResourceGroup/index.ts +0 -11
  541. package/src/ResourcesWrapper/ResourcesTopicTitle.tsx +0 -223
  542. package/src/ResourcesWrapper/ResourcesWrapper.tsx +0 -32
  543. package/src/ResourcesWrapper/index.ts +0 -13
  544. package/src/SearchTypeResult/ActiveFilterContent.tsx +0 -55
  545. package/src/SearchTypeResult/ActiveFilters.tsx +0 -163
  546. package/src/SearchTypeResult/PopupFilter.tsx +0 -149
  547. package/src/SearchTypeResult/ResultNavigation.tsx +0 -105
  548. package/src/SearchTypeResult/SearchFieldHeader.tsx +0 -129
  549. package/src/SearchTypeResult/SearchFilterContent.tsx +0 -61
  550. package/src/SearchTypeResult/SearchHeader.tsx +0 -180
  551. package/src/SearchTypeResult/SearchItem.tsx +0 -144
  552. package/src/SearchTypeResult/SearchItemList.tsx +0 -161
  553. package/src/SearchTypeResult/SearchItems.tsx +0 -72
  554. package/src/SearchTypeResult/SearchSubjectItem.tsx +0 -74
  555. package/src/SearchTypeResult/SearchSubjectResult.tsx +0 -58
  556. package/src/SearchTypeResult/SearchTypeHeader.tsx +0 -148
  557. package/src/SearchTypeResult/SearchTypeResult.tsx +0 -89
  558. package/src/SearchTypeResult/SearchViewType.tsx +0 -111
  559. package/src/SearchTypeResult/components/ItemContexts.tsx +0 -131
  560. package/src/SearchTypeResult/components/ItemResourceHeader.tsx +0 -130
  561. package/src/SearchTypeResult/components/ItemTopicHeader.tsx +0 -88
  562. package/src/SearchTypeResult/components/SubjectFilters.tsx +0 -149
  563. package/src/SearchTypeResult/index.ts +0 -17
  564. package/src/Subject/SubjectBanner.tsx +0 -39
  565. package/src/Subject/SubjectHeader.tsx +0 -100
  566. package/src/Subject/index.ts +0 -10
  567. package/src/ToolboxPage/ToolboxInfo.tsx +0 -42
  568. package/src/ToolboxPage/index.ts +0 -11
  569. package/src/Topic/Loader.tsx +0 -29
  570. package/src/Topic/Topic.tsx +0 -348
  571. package/src/Topic/index.ts +0 -13
  572. package/src/locale/LocaleProvider.tsx +0 -31
@@ -10,6 +10,8 @@ import { Meta, StoryObj } from "@storybook/react";
10
10
  import { BrightcoveData, BrightcoveEmbedData, BrightcoveMetaData } from "@ndla/types-embed";
11
11
  import BrightcoveEmbed from "./BrightcoveEmbed";
12
12
  import StoryFavoriteButton from "../../../../stories/StoryFavoriteButton";
13
+ import { ArticleWrapper } from "../Article";
14
+ import { OneColumn } from "../Layout";
13
15
 
14
16
  const embedData: BrightcoveEmbedData = {
15
17
  resource: "brightcove",
@@ -159,15 +161,15 @@ const meta: Meta<typeof BrightcoveEmbed> = {
159
161
  },
160
162
  decorators: [
161
163
  (Story) => (
162
- <div className="o-wrapper">
163
- <article className="c-article c-article--clean">
164
+ <OneColumn>
165
+ <ArticleWrapper modifier="clean">
164
166
  <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
165
167
  <section>
166
168
  <Story />
167
169
  </section>
168
170
  </section>
169
- </article>
170
- </div>
171
+ </ArticleWrapper>
172
+ </OneColumn>
171
173
  ),
172
174
  ],
173
175
  };
@@ -34,14 +34,14 @@ const BrightcoveIframe = styled.iframe`
34
34
  height: auto;
35
35
  `;
36
36
 
37
- export const makeIframeString = (url: string, width: string | number, height: string | number, title: string = "") => {
37
+ export const makeIframeString = (url: string, width: string | number, height: string | number, title = "") => {
38
38
  const strippedWidth = typeof width === "number" ? width : width.replace(/\s*px/, "");
39
39
  const strippedHeight = typeof height === "number" ? height : height.replace(/\s*px/, "");
40
40
  const urlOrTitle = title || url;
41
41
  return `<iframe title="${urlOrTitle}" aria-label="${urlOrTitle}" src="${url}" width="${strippedWidth}" height="${strippedHeight}" allowfullscreen scrolling="no" frameborder="0" loading="lazy"></iframe>`;
42
42
  };
43
43
 
44
- export const isNumeric = (value: any) => !Number.isNaN(value - parseFloat(value));
44
+ export const isNumeric = (value: any) => !Number.isNaN(value - Number.parseFloat(value));
45
45
 
46
46
  const getIframeProps = (data: BrightcoveEmbedData, sources: BrightcoveVideoSource[]) => {
47
47
  const { account, videoid, player = "default" } = data;
@@ -6,8 +6,8 @@
6
6
  *
7
7
  */
8
8
 
9
- import { Codeblock } from "@ndla/code";
10
9
  import { CodeMetaData } from "@ndla/types-embed";
10
+ import { CodeBlock } from "../CodeBlock";
11
11
  import { Figure } from "../Figure";
12
12
 
13
13
  interface Props {
@@ -16,7 +16,7 @@ interface Props {
16
16
  const CodeEmbed = ({ embed }: Props) => {
17
17
  return (
18
18
  <Figure>
19
- <Codeblock
19
+ <CodeBlock
20
20
  title={embed.embedData.title}
21
21
  code={embed.status === "success" ? embed.data.decodedContent : ""}
22
22
  highlightedCode={embed.status === "success" ? embed.data.highlightedCode : ""}
@@ -10,6 +10,8 @@ import { Meta, StoryObj } from "@storybook/react";
10
10
  import { ConceptData, ConceptEmbedData } from "@ndla/types-embed";
11
11
  import ConceptEmbed from "./ConceptEmbed";
12
12
  import StoryFavoriteButton from "../../../../stories/StoryFavoriteButton";
13
+ import { ArticleWrapper } from "../Article";
14
+ import { OneColumn } from "../Layout";
13
15
 
14
16
  const blockEmbedData: ConceptEmbedData = {
15
17
  contentId: "35",
@@ -231,15 +233,15 @@ const meta: Meta<typeof ConceptEmbed> = {
231
233
  },
232
234
  decorators: [
233
235
  (Story) => (
234
- <div className="o-wrapper">
235
- <article className="c-article c-article--clean">
236
+ <OneColumn>
237
+ <ArticleWrapper modifier="clean">
236
238
  <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
237
239
  <section>
238
240
  <Story />
239
241
  </section>
240
242
  </section>
241
- </article>
242
- </div>
243
+ </ArticleWrapper>
244
+ </OneColumn>
243
245
  ),
244
246
  ],
245
247
  };
@@ -7,7 +7,7 @@
7
7
  */
8
8
 
9
9
  import parse from "html-react-parser";
10
- import { ReactElement, ReactNode, useCallback, useMemo, useRef, useState } from "react";
10
+ import { ReactElement, ReactNode, forwardRef, useCallback, useMemo, useRef, useState } from "react";
11
11
  import { isMobile } from "react-device-detect";
12
12
  import { useTranslation } from "react-i18next";
13
13
  import styled from "@emotion/styled";
@@ -82,8 +82,8 @@ const StyledButton = styled.button`
82
82
  font-family: inherit;
83
83
  font-style: inherit;
84
84
  line-height: 1em;
85
- padding: 0 0 4px 0;
86
- margin-bottom: -4px;
85
+ padding: 0 0 ${spacing.xxsmall} 0;
86
+ margin-bottom: -${spacing.xxsmall};
87
87
  text-decoration: none;
88
88
  color: #000;
89
89
  position: relative;
@@ -102,7 +102,8 @@ export const ConceptEmbed = ({ embed, fullWidth, heartButton: HeartButton, lang,
102
102
  }, [embed]);
103
103
  if (embed.status === "error" && embed.embedData.type === "inline") {
104
104
  return <span>{embed.embedData.linkText}</span>;
105
- } else if (embed.status === "error") {
105
+ }
106
+ if (embed.status === "error") {
106
107
  return <EmbedErrorPlaceholder type="concept" />;
107
108
  }
108
109
 
@@ -129,7 +130,8 @@ export const ConceptEmbed = ({ embed, fullWidth, heartButton: HeartButton, lang,
129
130
  exampleLangs={embed.embedData.exampleLangs}
130
131
  />
131
132
  );
132
- } else if (embed.embedData.type === "inline") {
133
+ }
134
+ if (embed.embedData.type === "inline") {
133
135
  return (
134
136
  <InlineConcept
135
137
  title={concept.title}
@@ -148,25 +150,24 @@ export const ConceptEmbed = ({ embed, fullWidth, heartButton: HeartButton, lang,
148
150
  exampleLangs={embed.embedData.exampleLangs}
149
151
  />
150
152
  );
151
- } else {
152
- return (
153
- <ConceptNotionV2
154
- title={concept.title}
155
- content={parsedContent}
156
- copyright={concept.copyright}
157
- source={concept.source}
158
- visualElement={visualElement}
159
- heartButton={HeartButton}
160
- conceptHeartButton={HeartButton && <HeartButton embed={embed} />}
161
- conceptType={concept.conceptType}
162
- glossData={concept.glossData}
163
- lang={lang}
164
- exampleIds={embed.embedData.exampleIds}
165
- exampleLangs={embed.embedData.exampleLangs}
166
- showTitle={renderContext !== "embed"}
167
- />
168
- );
169
153
  }
154
+ return (
155
+ <ConceptNotionV2
156
+ title={concept.title}
157
+ content={parsedContent}
158
+ copyright={concept.copyright}
159
+ source={concept.source}
160
+ visualElement={visualElement}
161
+ heartButton={HeartButton}
162
+ conceptHeartButton={HeartButton && <HeartButton embed={embed} />}
163
+ conceptType={concept.conceptType}
164
+ glossData={concept.glossData}
165
+ lang={lang}
166
+ exampleIds={embed.embedData.exampleIds}
167
+ exampleLangs={embed.embedData.exampleLangs}
168
+ showTitle={renderContext !== "embed"}
169
+ />
170
+ );
170
171
  };
171
172
 
172
173
  interface InlineConceptProps extends ConceptNotionData {
@@ -214,86 +215,92 @@ const StyledAnchorSpan = styled.span`
214
215
  `;
215
216
 
216
217
  const getModalPosition = (anchor: HTMLElement) => {
217
- const article = anchor.closest(".c-article");
218
+ const article = anchor.closest("[data-ndla-article]");
218
219
  const articlePos = article?.getBoundingClientRect();
219
220
  const anchorPos = anchor.getBoundingClientRect();
220
221
  return anchorPos.top - (articlePos?.top || -window.scrollY) + 30; // add 30 so that position is under the word
221
222
  };
222
223
 
223
- export const InlineConcept = ({
224
- title,
225
- content,
226
- copyright,
227
- source,
228
- visualElement,
229
- linkText,
230
- heartButton,
231
- conceptHeartButton,
232
- glossData,
233
- conceptType,
234
- headerButtons,
235
- lang,
236
- exampleIds,
237
- exampleLangs,
238
- }: InlineConceptProps) => {
239
- const { t } = useTranslation();
240
- const anchorRef = useRef<HTMLDivElement>(null);
241
- const [modalPos, setModalPos] = useState(-9999);
224
+ export const InlineConcept = forwardRef<HTMLSpanElement, InlineConceptProps>(
225
+ (
226
+ {
227
+ title,
228
+ content,
229
+ copyright,
230
+ source,
231
+ visualElement,
232
+ linkText,
233
+ heartButton,
234
+ conceptHeartButton,
235
+ glossData,
236
+ conceptType,
237
+ headerButtons,
238
+ lang,
239
+ exampleIds,
240
+ exampleLangs,
241
+ ...rest
242
+ },
243
+ ref,
244
+ ) => {
245
+ const { t } = useTranslation();
246
+ const anchorRef = useRef<HTMLDivElement>(null);
247
+ const [modalPos, setModalPos] = useState(-9999);
242
248
 
243
- const onOpenChange = useCallback((open: boolean) => {
244
- if (open) {
245
- const anchor = anchorRef.current;
246
- if (anchor) {
247
- const top = getModalPosition(anchor);
248
- setModalPos(top);
249
+ const onOpenChange = useCallback((open: boolean) => {
250
+ if (open) {
251
+ const anchor = anchorRef.current;
252
+ if (anchor) {
253
+ const top = getModalPosition(anchor);
254
+ setModalPos(top);
255
+ }
256
+ } else {
257
+ setModalPos(-9999);
249
258
  }
250
- } else {
251
- setModalPos(-9999);
252
- }
253
- }, []);
259
+ }, []);
254
260
 
255
- return (
256
- <Root modal={isMobile} onOpenChange={onOpenChange}>
257
- <StyledAnchor ref={anchorRef} asChild>
258
- <StyledAnchorSpan contentEditable={false} />
259
- </StyledAnchor>
260
- <Trigger asChild type={undefined}>
261
- <NotionButton role={"button"} data-open={modalPos !== -9999} tabIndex={0}>
262
- {linkText}
263
- </NotionButton>
264
- </Trigger>
265
- <Portal container={(anchorRef.current?.closest(".c-article") as HTMLElement | null) || undefined}>
266
- <PopoverWrapper top={modalPos}>
267
- <Content avoidCollisions={false} side="bottom" asChild>
268
- <ConceptNotionV2
269
- title={title}
270
- content={content}
271
- copyright={copyright}
272
- source={source}
273
- visualElement={visualElement}
274
- inPopover
275
- heartButton={heartButton}
276
- headerButtons={headerButtons}
277
- conceptHeartButton={conceptHeartButton}
278
- lang={lang}
279
- closeButton={
280
- <Close asChild>
281
- <IconButtonV2 aria-label={t("close")} variant="ghost">
282
- <Cross />
283
- </IconButtonV2>
284
- </Close>
285
- }
286
- conceptType={conceptType}
287
- glossData={glossData}
288
- exampleIds={exampleIds}
289
- exampleLangs={exampleLangs}
290
- />
291
- </Content>
292
- </PopoverWrapper>
293
- </Portal>
294
- </Root>
295
- );
296
- };
261
+ return (
262
+ <Root modal={isMobile} onOpenChange={onOpenChange}>
263
+ <StyledAnchor ref={anchorRef} asChild>
264
+ <StyledAnchorSpan contentEditable={false} />
265
+ </StyledAnchor>
266
+ <Trigger asChild type={undefined}>
267
+ <NotionButton role="button" data-open={modalPos !== -9999} tabIndex={0} ref={ref} {...rest}>
268
+ {linkText}
269
+ </NotionButton>
270
+ </Trigger>
271
+ <Portal container={(anchorRef.current?.closest("[data-ndla-article]") as HTMLElement | null) || undefined}>
272
+ <PopoverWrapper top={modalPos}>
273
+ <Content avoidCollisions={false} side="bottom" asChild>
274
+ <ConceptNotionV2
275
+ title={title}
276
+ content={content}
277
+ copyright={copyright}
278
+ source={source}
279
+ visualElement={visualElement}
280
+ inPopover
281
+ heartButton={heartButton}
282
+ headerButtons={headerButtons}
283
+ conceptHeartButton={conceptHeartButton}
284
+ lang={lang}
285
+ closeButton={
286
+ <Close asChild>
287
+ <IconButtonV2 aria-label={t("close")} variant="ghost">
288
+ <Cross />
289
+ </IconButtonV2>
290
+ </Close>
291
+ }
292
+ conceptType={conceptType}
293
+ glossData={glossData}
294
+ exampleIds={exampleIds}
295
+ exampleLangs={exampleLangs}
296
+ />
297
+ </Content>
298
+ </PopoverWrapper>
299
+ </Portal>
300
+ </Root>
301
+ );
302
+ },
303
+ );
297
304
 
298
305
  interface ConceptProps extends ConceptNotionData {
299
306
  fullWidth?: boolean;
@@ -380,7 +387,7 @@ export const BlockConcept = ({
380
387
  <Portal
381
388
  container={
382
389
  typeof document !== "undefined"
383
- ? (document.querySelector(".c-article") as HTMLElement | null) || undefined
390
+ ? (document.querySelector("[data-ndla-article]") as HTMLElement | null) || undefined
384
391
  : undefined
385
392
  }
386
393
  >
@@ -9,6 +9,8 @@
9
9
  import { Meta, StoryObj } from "@storybook/react";
10
10
  import { OembedEmbedData, OembedData } from "@ndla/types-embed";
11
11
  import ExternalEmbed from "./ExternalEmbed";
12
+ import { ArticleWrapper } from "../Article";
13
+ import { OneColumn } from "../Layout";
12
14
 
13
15
  const embedData: OembedEmbedData = {
14
16
  resource: "external",
@@ -53,15 +55,15 @@ const meta: Meta<typeof ExternalEmbed> = {
53
55
  tags: ["autodocs"],
54
56
  decorators: [
55
57
  (Story) => (
56
- <div className="o-wrapper">
57
- <article className="c-article c-article--clean">
58
+ <OneColumn>
59
+ <ArticleWrapper modifier="clean">
58
60
  <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
59
61
  <section>
60
62
  <Story />
61
63
  </section>
62
64
  </section>
63
- </article>
64
- </div>
65
+ </ArticleWrapper>
66
+ </OneColumn>
65
67
  ),
66
68
  ],
67
69
  };
@@ -30,9 +30,9 @@ const ExternalEmbed = ({ embed, isConcept }: Props) => {
30
30
  const figRef = useRef<HTMLElement>(null);
31
31
 
32
32
  useEffect(() => {
33
- const iframe = figRef.current?.querySelector(`iframe`);
33
+ const iframe = figRef.current?.querySelector("iframe");
34
34
  if (iframe) {
35
- const [width, height] = [parseInt(iframe.width), parseInt(iframe.height)];
35
+ const [width, height] = [Number.parseInt(iframe.width), Number.parseInt(iframe.height)];
36
36
  iframe.style.aspectRatio = `${width ? width : 16}/${height ? height : 9}`;
37
37
  iframe.width = "";
38
38
  iframe.height = "";
@@ -9,6 +9,8 @@
9
9
  import { Meta, StoryObj } from "@storybook/react";
10
10
  import { H5pEmbedData, H5pData } from "@ndla/types-embed";
11
11
  import H5pEmbed from "./H5pEmbed";
12
+ import { ArticleWrapper } from "../Article";
13
+ import { OneColumn } from "../Layout";
12
14
 
13
15
  const embedData: H5pEmbedData = {
14
16
  resource: "h5p",
@@ -50,15 +52,15 @@ const meta: Meta<typeof H5pEmbed> = {
50
52
  tags: ["autodocs"],
51
53
  decorators: [
52
54
  (Story) => (
53
- <div className="o-wrapper">
54
- <article className="c-article c-article--clean">
55
+ <OneColumn>
56
+ <ArticleWrapper modifier="clean">
55
57
  <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
56
58
  <section>
57
59
  <Story />
58
60
  </section>
59
61
  </section>
60
- </article>
61
- </div>
62
+ </ArticleWrapper>
63
+ </OneColumn>
62
64
  ),
63
65
  ],
64
66
  };
@@ -9,6 +9,8 @@
9
9
  import { Meta, StoryObj } from "@storybook/react";
10
10
  import { IframeData, IframeEmbedData } from "@ndla/types-embed";
11
11
  import IframeEmbed from "./IframeEmbed";
12
+ import { ArticleWrapper } from "../Article";
13
+ import { OneColumn } from "../Layout";
12
14
 
13
15
  const embedData: IframeEmbedData = {
14
16
  width: "708px",
@@ -25,15 +27,15 @@ const meta: Meta<typeof IframeEmbed> = {
25
27
  tags: ["autodocs"],
26
28
  decorators: [
27
29
  (Story) => (
28
- <div className="o-wrapper">
29
- <article className="c-article c-article--clean">
30
+ <OneColumn>
31
+ <ArticleWrapper modifier="clean">
30
32
  <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
31
33
  <section>
32
34
  <Story />
33
35
  </section>
34
36
  </section>
35
- </article>
36
- </div>
37
+ </ArticleWrapper>
38
+ </OneColumn>
37
39
  ),
38
40
  ],
39
41
  };
@@ -25,7 +25,7 @@ const IframeEmbed = ({ embed, isConcept }: Props) => {
25
25
  useEffect(() => {
26
26
  const iframe = iframeRef.current;
27
27
  if (iframe) {
28
- const [width, height] = [parseInt(iframe.width), parseInt(iframe.height)];
28
+ const [width, height] = [Number.parseInt(iframe.width), Number.parseInt(iframe.height)];
29
29
  iframe.style.aspectRatio = `${width ? width : 16}/${height ? height : 9}`;
30
30
  iframe.width = "";
31
31
  iframe.height = "";
@@ -12,6 +12,8 @@ import { IImageMetaInformationV3 } from "@ndla/types-backend/image-api";
12
12
  import { ImageEmbedData } from "@ndla/types-embed";
13
13
  import ImageEmbed from "./ImageEmbed";
14
14
  import StoryFavoriteButton from "../../../../stories/StoryFavoriteButton";
15
+ import { ArticleWrapper } from "../Article";
16
+ import { OneColumn } from "../Layout";
15
17
 
16
18
  const embedData: ImageEmbedData = {
17
19
  resource: "image",
@@ -92,15 +94,15 @@ const meta: Meta<typeof ImageEmbed> = {
92
94
  },
93
95
  decorators: [
94
96
  (Story) => (
95
- <div className="o-wrapper">
96
- <article className="c-article c-article--clean">
97
+ <OneColumn>
98
+ <ArticleWrapper modifier="clean">
97
99
  <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
98
100
  <section>
99
101
  <Story />
100
102
  </section>
101
103
  </section>
102
- </article>
103
- </div>
104
+ </ArticleWrapper>
105
+ </OneColumn>
104
106
  ),
105
107
  ],
106
108
  };
@@ -82,20 +82,25 @@ const getSizes = (size?: string, align?: string) => {
82
82
  };
83
83
 
84
84
  export const getFocalPoint = (data: ImageEmbedData) => {
85
- const focalX = parseFloat(data.focalX ?? "");
86
- const focalY = parseFloat(data.focalY ?? "");
87
- if (!isNaN(focalX) && !isNaN(focalY)) {
85
+ const focalX = Number.parseFloat(data.focalX ?? "");
86
+ const focalY = Number.parseFloat(data.focalY ?? "");
87
+ if (!Number.isNaN(focalX) && !Number.isNaN(focalY)) {
88
88
  return { x: focalX, y: focalY };
89
89
  }
90
90
  return undefined;
91
91
  };
92
92
 
93
93
  export const getCrop = (data: ImageEmbedData) => {
94
- const lowerRightX = parseFloat(data.lowerRightX ?? "");
95
- const lowerRightY = parseFloat(data.lowerRightY ?? "");
96
- const upperLeftX = parseFloat(data.upperLeftX ?? "");
97
- const upperLeftY = parseFloat(data.upperLeftY ?? "");
98
- if (!isNaN(lowerRightX) && !isNaN(lowerRightY) && !isNaN(upperLeftX) && !isNaN(upperLeftY)) {
94
+ const lowerRightX = Number.parseFloat(data.lowerRightX ?? "");
95
+ const lowerRightY = Number.parseFloat(data.lowerRightY ?? "");
96
+ const upperLeftX = Number.parseFloat(data.upperLeftX ?? "");
97
+ const upperLeftY = Number.parseFloat(data.upperLeftY ?? "");
98
+ if (
99
+ !Number.isNaN(lowerRightX) &&
100
+ !Number.isNaN(lowerRightY) &&
101
+ !Number.isNaN(upperLeftX) &&
102
+ !Number.isNaN(upperLeftY)
103
+ ) {
99
104
  return {
100
105
  startX: lowerRightX,
101
106
  startY: lowerRightY,
@@ -142,7 +147,8 @@ const ImageEmbed = ({
142
147
  const parsedDescription = useMemo(() => {
143
148
  if (embed.embedData.caption || renderContext === "article") {
144
149
  return embed.embedData.caption ? parse(embed.embedData.caption) : undefined;
145
- } else if (embed.status === "success" && embed.data.caption.caption) {
150
+ }
151
+ if (embed.status === "success" && embed.data.caption.caption) {
146
152
  return parse(embed.data.caption.caption);
147
153
  }
148
154
  }, [embed, renderContext]);
@@ -279,13 +285,15 @@ const ExpandButton = ({ size, expanded, bylineHidden, onExpand, onHideByline }:
279
285
  <button
280
286
  type="button"
281
287
  css={figureActionIndicatorStyle}
288
+ data-byline-button=""
282
289
  aria-label={t(`license.images.itemImage.zoom${expanded ? "Out" : ""}ImageButtonLabel`)}
283
290
  onClick={onExpand}
284
291
  >
285
292
  {expanded ? <ArrowCollapse /> : <ExpandTwoArrows />}
286
293
  </button>
287
294
  );
288
- } else if (hideByline(size)) {
295
+ }
296
+ if (hideByline(size)) {
289
297
  return (
290
298
  <BylineButton
291
299
  type="button"
@@ -296,7 +304,8 @@ const ExpandButton = ({ size, expanded, bylineHidden, onExpand, onHideByline }:
296
304
  {bylineHidden ? <ChevronDown /> : <ChevronUp />}
297
305
  </BylineButton>
298
306
  );
299
- } else return null;
307
+ }
308
+ return null;
300
309
  };
301
310
 
302
311
  export default ImageEmbed;
@@ -9,6 +9,8 @@
9
9
  import { Meta, StoryObj } from "@storybook/react";
10
10
  import { RelatedContentMetaData } from "@ndla/types-embed";
11
11
  import RelatedContentEmbed from "./RelatedContentEmbed";
12
+ import { ArticleWrapper } from "../Article";
13
+ import { OneColumn } from "../Layout";
12
14
  import RelatedArticleList from "../RelatedArticleList";
13
15
 
14
16
  const filmResourceMeta: RelatedContentMetaData = {
@@ -365,15 +367,15 @@ const meta: Meta<typeof RelatedContentEmbed> = {
365
367
  tags: ["autodocs"],
366
368
  decorators: [
367
369
  (Story) => (
368
- <div className="o-wrapper">
369
- <article className="c-article c-article--clean">
370
+ <OneColumn>
371
+ <ArticleWrapper modifier="clean">
370
372
  <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
371
373
  <section>
372
374
  <Story />
373
375
  </section>
374
376
  </section>
375
- </article>
376
- </div>
377
+ </ArticleWrapper>
378
+ </OneColumn>
377
379
  ),
378
380
  ],
379
381
  };
@@ -42,7 +42,8 @@ const RelatedContentEmbed = ({ embed, isOembed, subject, ndlaFrontendDomain }: P
42
42
  type={type}
43
43
  />
44
44
  );
45
- } else if (typeof embedData.url === "string") {
45
+ }
46
+ if (typeof embedData.url === "string") {
46
47
  return (
47
48
  <RelatedArticle
48
49
  title={embedData.title ?? ""}
@@ -56,9 +57,8 @@ const RelatedContentEmbed = ({ embed, isOembed, subject, ndlaFrontendDomain }: P
56
57
  }`}
57
58
  />
58
59
  );
59
- } else {
60
- return <></>;
61
60
  }
61
+ return <></>;
62
62
  };
63
63
 
64
64
  export default RelatedContentEmbed;
@@ -11,8 +11,11 @@ import { UuDisclaimerEmbedData } from "@ndla/types-embed";
11
11
  import H5pEmbed from "./H5pEmbed";
12
12
  import IframeEmbed from "./IframeEmbed";
13
13
  import UuDisclaimerEmbed from "./UuDisclaimerEmbed";
14
+ import { ArticleWrapper } from "../Article";
15
+ import CopyParagraphButton from "../CopyParagraphButton";
14
16
  import FactBox from "../FactBox";
15
17
  import FramedContent from "../FramedContent";
18
+ import { OneColumn } from "../Layout";
16
19
 
17
20
  const embedData: UuDisclaimerEmbedData = {
18
21
  resource: "uu-disclaimer",
@@ -26,15 +29,15 @@ const meta: Meta<typeof UuDisclaimerEmbed> = {
26
29
  tags: ["autodocs"],
27
30
  decorators: [
28
31
  (Story) => (
29
- <div className="o-wrapper">
30
- <article className="c-article c-article--clean">
32
+ <OneColumn>
33
+ <ArticleWrapper modifier="clean">
31
34
  <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
32
35
  <section>
33
36
  <Story />
34
37
  </section>
35
38
  </section>
36
- </article>
37
- </div>
39
+ </ArticleWrapper>
40
+ </OneColumn>
38
41
  ),
39
42
  ],
40
43
  };
@@ -180,3 +183,19 @@ export const WithFactBox: StoryObj<typeof UuDisclaimerEmbed> = {
180
183
  ),
181
184
  },
182
185
  };
186
+
187
+ export const WithCopyParagraphLink: StoryObj<typeof UuDisclaimerEmbed> = {
188
+ args: {
189
+ embed: {
190
+ resource: "uu-disclaimer",
191
+ status: "success",
192
+ embedData: embedData,
193
+ data: {},
194
+ },
195
+ children: (
196
+ <CopyParagraphButton copyText="Dette er en overskrift" lang="no">
197
+ <h2>Dette er en overskrift</h2>
198
+ </CopyParagraphButton>
199
+ ),
200
+ },
201
+ };