@ndla/ui 55.0.12-alpha.0 → 55.0.14-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/dist/all-aout.js +0 -0
  2. package/dist/all.css +1 -0
  3. package/dist/panda.buildinfo.json +289 -0
  4. package/dist/styles.css +1197 -0
  5. package/es/Article/Article.js +3 -4
  6. package/es/Article/ArticleByline.js +9 -9
  7. package/es/Article/ArticleFootNotes.js +4 -4
  8. package/es/Article/ArticleParagraph.js +11 -13
  9. package/es/AudioPlayer/AudioPlayer.js +142 -163
  10. package/es/AudioPlayer/Controls.js +187 -203
  11. package/es/AudioPlayer/SpeechControl.js +13 -11
  12. package/es/BlogPost/BlogPost.js +85 -23
  13. package/es/CampaignBlock/CampaignBlock.js +103 -69
  14. package/es/CodeBlock/CodeBlock.js +88 -96
  15. package/es/Concept/Concept.js +69 -0
  16. package/es/ContactBlock/ContactBlock.js +54 -40
  17. package/es/ContentLoader/index.js +7 -7
  18. package/es/ContentTypeBadge/ContentTypeBadgeNew.js +48 -0
  19. package/es/CopyParagraphButton/CopyParagraphButton.js +4 -4
  20. package/es/Embed/AudioEmbed.js +6 -11
  21. package/es/Embed/BrightcoveEmbed.js +25 -39
  22. package/es/Embed/CodeEmbed.js +58 -10
  23. package/es/Embed/ConceptEmbed.js +57 -306
  24. package/es/Embed/ConceptListEmbed.js +18 -24
  25. package/es/Embed/ContentLinkEmbed.js +10 -10
  26. package/es/Embed/CopyrightEmbed.js +4 -21
  27. package/es/Embed/EmbedErrorPlaceholder.js +32 -17
  28. package/es/Embed/ExternalEmbed.js +17 -28
  29. package/es/Embed/FootnoteEmbed.js +14 -11
  30. package/es/Embed/GlossEmbed.js +68 -0
  31. package/es/Embed/H5pEmbed.js +20 -21
  32. package/es/Embed/IframeEmbed.js +17 -15
  33. package/es/Embed/ImageEmbed.js +167 -122
  34. package/es/Embed/InlineTriggerButton.js +70 -0
  35. package/es/Embed/RelatedContentEmbed.js +8 -10
  36. package/es/Embed/UnknownEmbed.js +9 -9
  37. package/es/Embed/UuDisclaimerEmbed.js +16 -27
  38. package/es/Embed/index.js +1 -3
  39. package/es/ErrorMessage/ErrorMessage.js +42 -23
  40. package/es/ErrorMessage/ErrorResourceAccessDenied.js +8 -6
  41. package/es/FactBox/FactBox.js +118 -47
  42. package/es/FileList/File.js +1 -1
  43. package/es/FileList/Format.js +3 -3
  44. package/es/FileList/PdfFile.js +23 -5
  45. package/es/FrontpageArticle/FrontpageArticle.js +1 -1
  46. package/es/Gloss/Gloss.js +122 -94
  47. package/es/Gloss/GlossExample.js +49 -52
  48. package/es/Grid/Grid.js +1 -1
  49. package/es/KeyFigure/KeyFigure.js +2 -2
  50. package/es/LanguageSelector/LanguageSelector.js +2 -2
  51. package/es/LicenseByline/EmbedByline.js +5 -6
  52. package/es/LicenseByline/LicenseDescription.js +1 -1
  53. package/es/LicenseByline/LicenseLink.js +1 -2
  54. package/es/LinkBlock/LinkBlock.js +61 -33
  55. package/es/LinkBlock/LinkBlockSection.js +9 -6
  56. package/es/Logo/Logo.js +1 -30
  57. package/es/Messages/MessageBox.js +1 -1
  58. package/es/RelatedArticleList/RelatedArticleList.js +73 -90
  59. package/es/ResourceBox/ResourceBox.js +67 -44
  60. package/es/Search/ActiveFilters.js +1 -1
  61. package/es/Search/ContentTypeResult.js +9 -6
  62. package/es/Search/ContentTypeResultStyles.js +1 -1
  63. package/es/Search/IsPathToHighlight.js +1 -1
  64. package/es/Search/SearchField.js +6 -8
  65. package/es/Search/SearchResult.js +14 -19
  66. package/es/Search/SearchResultSleeve.js +14 -16
  67. package/es/SnackBar/SnackbarProvider.js +8 -11
  68. package/es/TagSelector/TagSelector.js +124 -131
  69. package/es/TreeStructure/AddFolderButton.js +4 -6
  70. package/es/TreeStructure/ComboboxButton.js +4 -7
  71. package/es/TreeStructure/FolderItem.js +12 -15
  72. package/es/TreeStructure/FolderItems.js +3 -3
  73. package/es/TreeStructure/TreeStructure.js +9 -12
  74. package/es/TreeStructure/helperFunctions.js +1 -1
  75. package/es/ZendeskButton/ZendeskButton.js +55 -0
  76. package/es/i18n/formatNestedMessages.js +1 -1
  77. package/es/i18n/index.js +2 -1
  78. package/es/i18n/useComponentTranslations.js +83 -0
  79. package/es/index.js +6 -12
  80. package/es/locale/messages-en.js +39 -12
  81. package/es/locale/messages-nb.js +39 -12
  82. package/es/locale/messages-nn.js +39 -12
  83. package/es/locale/messages-se.js +39 -12
  84. package/es/locale/messages-sma.js +39 -12
  85. package/es/model/ContentType.js +3 -0
  86. package/es/styles.css +1197 -0
  87. package/es/utils/relativeUrl.js +3 -3
  88. package/lib/Article/Article.js +3 -4
  89. package/lib/Article/ArticleByline.js +9 -9
  90. package/lib/Article/ArticleFootNotes.js +4 -4
  91. package/lib/Article/ArticleParagraph.js +12 -14
  92. package/lib/AudioPlayer/AudioPlayer.d.ts +1 -2
  93. package/lib/AudioPlayer/AudioPlayer.js +142 -162
  94. package/lib/AudioPlayer/Controls.js +190 -205
  95. package/lib/AudioPlayer/SpeechControl.js +13 -11
  96. package/lib/BlogPost/BlogPost.d.ts +2 -2
  97. package/lib/BlogPost/BlogPost.js +85 -24
  98. package/lib/CampaignBlock/CampaignBlock.d.ts +2 -2
  99. package/lib/CampaignBlock/CampaignBlock.js +106 -69
  100. package/lib/CodeBlock/CodeBlock.d.ts +5 -8
  101. package/lib/CodeBlock/CodeBlock.js +88 -96
  102. package/lib/Concept/Concept.d.ts +18 -0
  103. package/lib/Concept/Concept.js +75 -0
  104. package/lib/ContactBlock/ContactBlock.js +55 -43
  105. package/lib/ContentLoader/index.js +7 -7
  106. package/lib/ContentTypeBadge/ContentTypeBadgeNew.d.ts +17 -0
  107. package/lib/ContentTypeBadge/ContentTypeBadgeNew.js +56 -0
  108. package/lib/CopyParagraphButton/CopyParagraphButton.js +4 -4
  109. package/lib/Embed/AudioEmbed.js +7 -12
  110. package/lib/Embed/BrightcoveEmbed.d.ts +1 -2
  111. package/lib/Embed/BrightcoveEmbed.js +28 -40
  112. package/lib/Embed/CodeEmbed.js +56 -8
  113. package/lib/Embed/ConceptEmbed.d.ts +15 -21
  114. package/lib/Embed/ConceptEmbed.js +58 -306
  115. package/lib/Embed/ConceptListEmbed.js +21 -26
  116. package/lib/Embed/ContentLinkEmbed.js +10 -11
  117. package/lib/Embed/CopyrightEmbed.js +6 -22
  118. package/lib/Embed/EmbedErrorPlaceholder.d.ts +4 -3
  119. package/lib/Embed/EmbedErrorPlaceholder.js +32 -18
  120. package/lib/Embed/ExternalEmbed.d.ts +1 -2
  121. package/lib/Embed/ExternalEmbed.js +20 -29
  122. package/lib/Embed/FootnoteEmbed.js +14 -12
  123. package/lib/Embed/GlossEmbed.d.ts +13 -0
  124. package/lib/Embed/GlossEmbed.js +76 -0
  125. package/lib/Embed/H5pEmbed.d.ts +1 -2
  126. package/lib/Embed/H5pEmbed.js +22 -21
  127. package/lib/Embed/IframeEmbed.d.ts +1 -2
  128. package/lib/Embed/IframeEmbed.js +19 -17
  129. package/lib/Embed/ImageEmbed.d.ts +1 -2
  130. package/lib/Embed/ImageEmbed.js +167 -123
  131. package/lib/Embed/InlineTriggerButton.d.ts +11 -0
  132. package/lib/Embed/InlineTriggerButton.js +76 -0
  133. package/lib/Embed/RelatedContentEmbed.js +8 -10
  134. package/lib/Embed/UnknownEmbed.js +9 -10
  135. package/lib/Embed/UuDisclaimerEmbed.js +18 -28
  136. package/lib/Embed/index.d.ts +2 -3
  137. package/lib/Embed/index.js +2 -9
  138. package/lib/ErrorMessage/ErrorMessage.js +41 -24
  139. package/lib/ErrorMessage/ErrorResourceAccessDenied.js +7 -6
  140. package/lib/FactBox/FactBox.d.ts +0 -1
  141. package/lib/FactBox/FactBox.js +119 -46
  142. package/lib/FileList/File.js +1 -1
  143. package/lib/FileList/Format.js +3 -3
  144. package/lib/FileList/PdfFile.js +23 -5
  145. package/lib/FrontpageArticle/FrontpageArticle.js +1 -1
  146. package/lib/Gloss/Gloss.d.ts +10 -2
  147. package/lib/Gloss/Gloss.js +122 -93
  148. package/lib/Gloss/GlossExample.d.ts +3 -5
  149. package/lib/Gloss/GlossExample.js +49 -53
  150. package/lib/Grid/Grid.js +1 -1
  151. package/lib/KeyFigure/KeyFigure.js +2 -2
  152. package/lib/LanguageSelector/LanguageSelector.js +2 -2
  153. package/lib/LicenseByline/EmbedByline.js +5 -6
  154. package/lib/LicenseByline/LicenseDescription.js +1 -1
  155. package/lib/LicenseByline/LicenseLink.js +1 -2
  156. package/lib/LinkBlock/LinkBlock.js +62 -34
  157. package/lib/LinkBlock/LinkBlockSection.js +9 -7
  158. package/lib/Logo/Logo.d.ts +1 -3
  159. package/lib/Logo/Logo.js +2 -30
  160. package/lib/Messages/MessageBox.js +1 -1
  161. package/lib/RelatedArticleList/RelatedArticleList.d.ts +4 -4
  162. package/lib/RelatedArticleList/RelatedArticleList.js +77 -93
  163. package/lib/ResourceBox/ResourceBox.js +67 -45
  164. package/lib/Search/ActiveFilters.js +1 -1
  165. package/lib/Search/ContentTypeResult.js +9 -6
  166. package/lib/Search/ContentTypeResultStyles.js +1 -1
  167. package/lib/Search/IsPathToHighlight.js +1 -1
  168. package/lib/Search/SearchField.js +6 -8
  169. package/lib/Search/SearchResult.js +14 -19
  170. package/lib/Search/SearchResultSleeve.js +14 -16
  171. package/lib/SnackBar/SnackbarProvider.js +8 -11
  172. package/lib/TagSelector/TagSelector.d.ts +27 -12
  173. package/lib/TagSelector/TagSelector.js +126 -131
  174. package/lib/TreeStructure/AddFolderButton.js +4 -6
  175. package/lib/TreeStructure/ComboboxButton.js +4 -7
  176. package/lib/TreeStructure/FolderItem.js +12 -15
  177. package/lib/TreeStructure/FolderItems.js +3 -3
  178. package/lib/TreeStructure/TreeStructure.js +9 -12
  179. package/lib/TreeStructure/helperFunctions.js +1 -1
  180. package/lib/ZendeskButton/ZendeskButton.d.ts +19 -0
  181. package/lib/ZendeskButton/ZendeskButton.js +61 -0
  182. package/lib/i18n/formatNestedMessages.js +1 -1
  183. package/lib/i18n/index.d.ts +1 -0
  184. package/lib/i18n/index.js +20 -1
  185. package/lib/i18n/useComponentTranslations.d.ts +14 -0
  186. package/lib/i18n/useComponentTranslations.js +93 -0
  187. package/lib/index.d.ts +7 -14
  188. package/lib/index.js +77 -89
  189. package/lib/locale/messages-en.d.ts +27 -0
  190. package/lib/locale/messages-en.js +39 -12
  191. package/lib/locale/messages-nb.d.ts +27 -0
  192. package/lib/locale/messages-nb.js +39 -12
  193. package/lib/locale/messages-nn.d.ts +27 -0
  194. package/lib/locale/messages-nn.js +39 -12
  195. package/lib/locale/messages-se.d.ts +27 -0
  196. package/lib/locale/messages-se.js +39 -12
  197. package/lib/locale/messages-sma.d.ts +27 -0
  198. package/lib/locale/messages-sma.js +39 -12
  199. package/lib/model/ContentType.d.ts +3 -0
  200. package/lib/model/ContentType.js +4 -1
  201. package/lib/styles.css +1197 -0
  202. package/lib/types.d.ts +1 -0
  203. package/lib/utils/relativeUrl.js +3 -3
  204. package/package.json +18 -15
  205. package/src/Article/ArticleParagraph.tsx +11 -9
  206. package/src/AudioPlayer/AudioPlayer.tsx +139 -176
  207. package/src/AudioPlayer/Controls.tsx +210 -250
  208. package/src/AudioPlayer/SpeechControl.tsx +9 -7
  209. package/src/BlogPost/BlogPost.tsx +82 -58
  210. package/src/CampaignBlock/CampaignBlock.tsx +92 -55
  211. package/src/CodeBlock/CodeBlock.stories.tsx +0 -43
  212. package/src/CodeBlock/CodeBlock.tsx +91 -202
  213. package/src/Concept/Concept.stories.tsx +142 -0
  214. package/src/Concept/Concept.tsx +73 -0
  215. package/src/ContactBlock/ContactBlock.tsx +10 -2
  216. package/src/ContentTypeBadge/ContentTypeBadgeNew.stories.tsx +70 -0
  217. package/src/ContentTypeBadge/ContentTypeBadgeNew.tsx +69 -0
  218. package/src/Embed/AudioEmbed.tsx +2 -2
  219. package/src/Embed/BrightcoveEmbed.stories.tsx +0 -3
  220. package/src/Embed/BrightcoveEmbed.tsx +17 -19
  221. package/src/Embed/CodeEmbed.stories.tsx +95 -0
  222. package/src/Embed/CodeEmbed.tsx +62 -7
  223. package/src/Embed/ConceptEmbed.stories.tsx +1 -105
  224. package/src/Embed/ConceptEmbed.tsx +60 -393
  225. package/src/Embed/ConceptListEmbed.tsx +20 -19
  226. package/src/Embed/ContentLinkEmbed.tsx +8 -10
  227. package/src/Embed/CopyrightEmbed.tsx +1 -11
  228. package/src/Embed/EmbedErrorPlaceholder.tsx +31 -28
  229. package/src/Embed/ExternalEmbed.tsx +14 -17
  230. package/src/Embed/FootnoteEmbed.stories.tsx +2 -5
  231. package/src/Embed/FootnoteEmbed.tsx +13 -16
  232. package/src/Embed/GlossEmbed.stories.tsx +140 -0
  233. package/src/Embed/GlossEmbed.tsx +64 -0
  234. package/src/Embed/H5pEmbed.tsx +22 -16
  235. package/src/Embed/IframeEmbed.tsx +12 -6
  236. package/src/Embed/ImageEmbed.stories.tsx +53 -11
  237. package/src/Embed/ImageEmbed.tsx +162 -166
  238. package/src/Embed/InlineTriggerButton.tsx +72 -0
  239. package/src/Embed/UnknownEmbed.tsx +6 -7
  240. package/src/Embed/UuDisclaimerEmbed.stories.tsx +4 -4
  241. package/src/Embed/UuDisclaimerEmbed.tsx +17 -25
  242. package/src/Embed/index.ts +2 -3
  243. package/src/ErrorMessage/ErrorMessage.tsx +40 -29
  244. package/src/ErrorMessage/ErrorResourceAccessDenied.tsx +8 -6
  245. package/src/FactBox/FactBox.tsx +115 -115
  246. package/src/FactBox/Factbox.stories.tsx +43 -27
  247. package/src/FileList/FileList.stories.tsx +6 -1
  248. package/src/FileList/PdfFile.tsx +22 -5
  249. package/src/Gloss/Gloss.stories.tsx +107 -1
  250. package/src/Gloss/Gloss.tsx +143 -156
  251. package/src/Gloss/GlossExample.tsx +51 -77
  252. package/src/LinkBlock/LinkBlock.stories.tsx +8 -10
  253. package/src/LinkBlock/LinkBlock.tsx +54 -59
  254. package/src/LinkBlock/LinkBlockSection.tsx +9 -12
  255. package/src/Logo/Logo.stories.tsx +0 -1
  256. package/src/Logo/Logo.tsx +2 -30
  257. package/src/RelatedArticleList/RelatedArticleList.tsx +69 -88
  258. package/src/ResourceBox/ResourceBox.tsx +65 -73
  259. package/src/Search/ContentTypeResult.tsx +9 -3
  260. package/src/Search/SearchResultSleeve.tsx +5 -2
  261. package/src/TagSelector/TagSelector.stories.tsx +92 -68
  262. package/src/TagSelector/TagSelector.tsx +161 -126
  263. package/src/ZendeskButton/ZendeskButton.tsx +58 -0
  264. package/src/i18n/index.ts +5 -0
  265. package/src/i18n/useComponentTranslations.ts +72 -0
  266. package/src/index.ts +27 -18
  267. package/src/locale/messages-en.ts +29 -2
  268. package/src/locale/messages-nb.ts +29 -2
  269. package/src/locale/messages-nn.ts +29 -2
  270. package/src/locale/messages-se.ts +29 -2
  271. package/src/locale/messages-sma.ts +29 -2
  272. package/src/model/ContentType.ts +3 -0
  273. package/src/types.ts +2 -0
  274. package/es/DefinitionList/DefinitionDescription.js +0 -28
  275. package/es/DefinitionList/DefinitionTerm.js +0 -28
  276. package/es/DefinitionList/index.js +0 -10
  277. package/es/Embed/conceptComponents.js +0 -155
  278. package/es/ExpandableBox/ExpandableBox.js +0 -29
  279. package/es/ExpandableBox/index.js +0 -9
  280. package/es/Figure/Figure.js +0 -73
  281. package/es/Figure/index.js +0 -9
  282. package/es/FramedContent/FramedContent.js +0 -28
  283. package/es/FramedContent/index.js +0 -10
  284. package/es/Image/Image.js +0 -100
  285. package/es/Image/ImageLink.js +0 -39
  286. package/es/Image/index.js +0 -12
  287. package/es/LetterFilter/LetterFilter.js +0 -54
  288. package/es/LetterFilter/alphabet.js +0 -9
  289. package/es/LetterFilter/index.js +0 -10
  290. package/es/Notion/Notion.js +0 -76
  291. package/es/Notion/NotionImage.js +0 -91
  292. package/es/Notion/index.js +0 -9
  293. package/es/Table/Table.js +0 -141
  294. package/es/Table/index.js +0 -11
  295. package/es/TagSelector/Control.js +0 -28
  296. package/es/TagSelector/DropdownIndicator.js +0 -60
  297. package/es/TagSelector/Input.js +0 -22
  298. package/es/TagSelector/Menu.js +0 -27
  299. package/es/TagSelector/MenuList.js +0 -28
  300. package/es/TagSelector/Option.js +0 -60
  301. package/es/TagSelector/SelectContainer.js +0 -27
  302. package/es/TagSelector/ValueButton.js +0 -53
  303. package/es/TagSelector/ariaMessages.js +0 -94
  304. package/es/TagSelector/index.js +0 -10
  305. package/es/TagSelector/types.js +0 -1
  306. package/lib/DefinitionList/DefinitionDescription.d.ts +0 -10
  307. package/lib/DefinitionList/DefinitionDescription.js +0 -35
  308. package/lib/DefinitionList/DefinitionTerm.d.ts +0 -10
  309. package/lib/DefinitionList/DefinitionTerm.js +0 -35
  310. package/lib/DefinitionList/index.d.ts +0 -9
  311. package/lib/DefinitionList/index.js +0 -20
  312. package/lib/Embed/conceptComponents.d.ts +0 -40
  313. package/lib/Embed/conceptComponents.js +0 -163
  314. package/lib/ExpandableBox/ExpandableBox.d.ts +0 -15
  315. package/lib/ExpandableBox/ExpandableBox.js +0 -37
  316. package/lib/ExpandableBox/index.d.ts +0 -8
  317. package/lib/ExpandableBox/index.js +0 -18
  318. package/lib/Figure/Figure.d.ts +0 -16
  319. package/lib/Figure/Figure.js +0 -81
  320. package/lib/Figure/index.d.ts +0 -9
  321. package/lib/Figure/index.js +0 -13
  322. package/lib/FramedContent/FramedContent.d.ts +0 -12
  323. package/lib/FramedContent/FramedContent.js +0 -35
  324. package/lib/FramedContent/index.d.ts +0 -9
  325. package/lib/FramedContent/index.js +0 -16
  326. package/lib/Image/Image.d.ts +0 -38
  327. package/lib/Image/Image.js +0 -106
  328. package/lib/Image/ImageLink.d.ts +0 -18
  329. package/lib/Image/ImageLink.js +0 -44
  330. package/lib/Image/index.d.ts +0 -12
  331. package/lib/Image/index.js +0 -30
  332. package/lib/LetterFilter/LetterFilter.d.ts +0 -14
  333. package/lib/LetterFilter/LetterFilter.js +0 -61
  334. package/lib/LetterFilter/alphabet.d.ts +0 -8
  335. package/lib/LetterFilter/alphabet.js +0 -15
  336. package/lib/LetterFilter/index.d.ts +0 -9
  337. package/lib/LetterFilter/index.js +0 -16
  338. package/lib/Notion/Notion.d.ts +0 -20
  339. package/lib/Notion/Notion.js +0 -82
  340. package/lib/Notion/NotionImage.d.ts +0 -23
  341. package/lib/Notion/NotionImage.js +0 -101
  342. package/lib/Notion/index.d.ts +0 -8
  343. package/lib/Notion/index.js +0 -13
  344. package/lib/Table/Table.d.ts +0 -19
  345. package/lib/Table/Table.js +0 -145
  346. package/lib/Table/index.d.ts +0 -10
  347. package/lib/Table/index.js +0 -23
  348. package/lib/TagSelector/Control.d.ts +0 -11
  349. package/lib/TagSelector/Control.js +0 -35
  350. package/lib/TagSelector/DropdownIndicator.d.ts +0 -11
  351. package/lib/TagSelector/DropdownIndicator.js +0 -64
  352. package/lib/TagSelector/Input.d.ts +0 -12
  353. package/lib/TagSelector/Input.js +0 -29
  354. package/lib/TagSelector/Menu.d.ts +0 -12
  355. package/lib/TagSelector/Menu.js +0 -34
  356. package/lib/TagSelector/MenuList.d.ts +0 -16
  357. package/lib/TagSelector/MenuList.js +0 -35
  358. package/lib/TagSelector/Option.d.ts +0 -12
  359. package/lib/TagSelector/Option.js +0 -67
  360. package/lib/TagSelector/SelectContainer.d.ts +0 -11
  361. package/lib/TagSelector/SelectContainer.js +0 -34
  362. package/lib/TagSelector/ValueButton.d.ts +0 -20
  363. package/lib/TagSelector/ValueButton.js +0 -60
  364. package/lib/TagSelector/ariaMessages.d.ts +0 -16
  365. package/lib/TagSelector/ariaMessages.js +0 -101
  366. package/lib/TagSelector/index.d.ts +0 -11
  367. package/lib/TagSelector/index.js +0 -13
  368. package/lib/TagSelector/types.d.ts +0 -11
  369. package/lib/TagSelector/types.js +0 -5
  370. package/src/DefinitionList/DefinitionDescription.tsx +0 -26
  371. package/src/DefinitionList/DefinitionTerm.tsx +0 -26
  372. package/src/DefinitionList/index.tsx +0 -10
  373. package/src/Embed/conceptComponents.tsx +0 -293
  374. package/src/ExpandableBox/ExpandableBox.stories.tsx +0 -41
  375. package/src/ExpandableBox/ExpandableBox.tsx +0 -23
  376. package/src/ExpandableBox/index.ts +0 -9
  377. package/src/Figure/Figure.tsx +0 -167
  378. package/src/Figure/index.ts +0 -11
  379. package/src/FramedContent/FramedContent.stories.tsx +0 -152
  380. package/src/FramedContent/FramedContent.tsx +0 -26
  381. package/src/FramedContent/index.ts +0 -10
  382. package/src/Image/Image.stories.tsx +0 -61
  383. package/src/Image/Image.tsx +0 -147
  384. package/src/Image/ImageLink.tsx +0 -37
  385. package/src/Image/__tests__/Image-test.tsx +0 -66
  386. package/src/Image/__tests__/__snapshots__/Image-test.tsx.snap +0 -194
  387. package/src/Image/index.ts +0 -14
  388. package/src/LetterFilter/LetterFilter.stories.tsx +0 -29
  389. package/src/LetterFilter/LetterFilter.tsx +0 -78
  390. package/src/LetterFilter/alphabet.ts +0 -39
  391. package/src/LetterFilter/index.ts +0 -11
  392. package/src/Notion/Notion.tsx +0 -96
  393. package/src/Notion/NotionImage.tsx +0 -114
  394. package/src/Notion/index.ts +0 -9
  395. package/src/Table/Table.stories.tsx +0 -738
  396. package/src/Table/Table.tsx +0 -284
  397. package/src/Table/index.ts +0 -12
  398. package/src/TagSelector/Control.tsx +0 -34
  399. package/src/TagSelector/DropdownIndicator.tsx +0 -55
  400. package/src/TagSelector/Input.tsx +0 -31
  401. package/src/TagSelector/Menu.tsx +0 -38
  402. package/src/TagSelector/MenuList.tsx +0 -30
  403. package/src/TagSelector/Option.tsx +0 -58
  404. package/src/TagSelector/SelectContainer.tsx +0 -31
  405. package/src/TagSelector/ValueButton.tsx +0 -47
  406. package/src/TagSelector/ariaMessages.ts +0 -96
  407. package/src/TagSelector/index.ts +0 -14
  408. package/src/TagSelector/types.ts +0 -12
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2023-present, NDLA.
2
+ * Copyright (c) 2024-present, NDLA.
3
3
  *
4
4
  * This source code is licensed under the GPLv3 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -7,439 +7,106 @@
7
7
  */
8
8
 
9
9
  import parse from "html-react-parser";
10
- import { ReactNode, forwardRef, useCallback, useMemo, useRef, useState } from "react";
11
- import { isMobile } from "react-device-detect";
12
- import { useTranslation } from "react-i18next";
13
- import styled from "@emotion/styled";
14
- import { Root, Trigger, Content, Anchor, Close, Portal } from "@radix-ui/react-popover";
15
- import { IconButtonV2 } from "@ndla/button";
16
- import { breakpoints, colors, mq, spacing, stackOrder } from "@ndla/core";
17
- import { Cross } from "@ndla/icons/action";
18
- import { Tooltip } from "@ndla/tooltip";
10
+ import { forwardRef, useMemo } from "react";
11
+ import { Figure, PopoverContent, PopoverRoot, PopoverTrigger } from "@ndla/primitives";
12
+ import { styled } from "@ndla/styled-system/jsx";
19
13
  import { ConceptMetaData } from "@ndla/types-embed";
20
- import { ConceptNotionV2, ConceptNotionData, ConceptType } from "./conceptComponents";
21
14
  import EmbedErrorPlaceholder from "./EmbedErrorPlaceholder";
15
+ import { GlossEmbed } from "./GlossEmbed";
16
+ import { InlineTriggerButton } from "./InlineTriggerButton";
22
17
  import { RenderContext } from "./types";
23
- import { Figure } from "../Figure";
24
- import { Gloss } from "../Gloss";
25
- import { EmbedByline } from "../LicenseByline";
26
- import { Notion as UINotion } from "../Notion";
27
- import { NotionImage } from "../Notion/NotionImage";
18
+ import { Concept, ConceptProps } from "../Concept/Concept";
28
19
 
29
- interface PopoverPosition {
30
- top?: number;
20
+ interface BaseProps {
21
+ renderContext?: RenderContext;
22
+ lang?: string;
31
23
  }
32
24
 
33
- const PopoverWrapper = styled.div<PopoverPosition>`
34
- div[data-radix-popper-content-wrapper] {
35
- position: absolute !important;
36
- left: 50% !important;
37
- transform: translateX(-50%) !important;
38
- top: ${({ top }) => top}px !important;
39
- z-index: ${stackOrder.popover} !important;
40
- }
41
-
42
- ${mq.range({ until: breakpoints.tablet })} {
43
- div[data-radix-popper-content-wrapper] {
44
- // Fix for popover positioning on mobile.
45
- // If we modify all popovers we break license icons.
46
- // https://github.com/radix-ui/primitives/issues/1839
47
- position: fixed !important;
48
- transform: none !important;
49
- top: 0 !important;
50
- left: 0 !important;
51
- width: 100vw;
52
- z-index: ${stackOrder.popover} !important;
53
- height: 100vh;
54
- min-width: 100vw !important;
55
- }
56
- }
57
- `;
58
-
59
- const ImageWrapper = styled.div`
60
- float: right;
61
- padding-left: ${spacing.normal};
62
- position: relative;
63
-
64
- ${mq.range({ until: breakpoints.tabletWide })} {
65
- width: 100%;
66
- padding-left: 0;
67
- }
68
- `;
69
-
70
- interface Props {
25
+ interface Props extends BaseProps {
71
26
  embed: ConceptMetaData;
72
- fullWidth?: boolean;
73
- lang?: string;
74
- renderContext?: RenderContext;
75
27
  }
76
28
 
77
- const StyledButton = styled.button`
78
- background: none;
79
- border: none;
80
- font-family: inherit;
81
- font-style: inherit;
82
- line-height: 1em;
83
- padding: 0 0 ${spacing.xxsmall} 0;
84
- margin-bottom: -${spacing.xxsmall};
85
- text-decoration: none;
86
- color: #000;
87
- position: relative;
88
- cursor: pointer;
89
- &:focus,
90
- &:hover {
91
- color: ${colors.brand.primary};
92
- outline: none;
93
- }
94
- `;
29
+ const StyledPopoverContent = styled(PopoverContent, {
30
+ base: {
31
+ width: "surface.xlarge",
32
+ },
33
+ });
95
34
 
96
- export const ConceptEmbed = ({ embed, fullWidth, lang, renderContext }: Props) => {
35
+ export const ConceptEmbed = ({ embed, renderContext, lang }: Props) => {
97
36
  const parsedContent = useMemo(() => {
98
37
  if (embed.status === "error" || !embed.data.concept.content) return undefined;
99
38
  return parse(embed.data.concept.content.htmlContent);
100
39
  }, [embed]);
40
+
101
41
  if (embed.status === "error" && embed.embedData.type === "inline") {
102
42
  return <span>{embed.embedData.linkText}</span>;
103
43
  }
104
44
  if (embed.status === "error") {
105
- return <EmbedErrorPlaceholder type="concept" />;
45
+ return <EmbedErrorPlaceholder type="gloss" />;
106
46
  }
107
47
 
108
- const {
109
- data: { concept, visualElement },
110
- } = embed;
48
+ const { concept, visualElement } = embed.data;
111
49
 
112
- if (embed.embedData.type === "block") {
113
- return (
114
- <BlockConcept
115
- fullWidth={fullWidth}
116
- title={concept.title}
117
- content={parsedContent}
118
- metaImage={concept.metaImage}
119
- copyright={concept.copyright}
120
- source={concept.source}
121
- visualElement={visualElement}
122
- conceptType={concept.conceptType}
123
- glossData={concept.glossData}
124
- lang={lang}
125
- exampleIds={embed.embedData.exampleIds}
126
- exampleLangs={embed.embedData.exampleLangs}
127
- />
128
- );
50
+ // TODO: Consider whether we should do this in article-converter instead.
51
+ if (embed.data.concept.glossData) {
52
+ return <GlossEmbed embed={embed} />;
129
53
  }
54
+
130
55
  if (embed.embedData.type === "inline") {
131
56
  return (
132
57
  <InlineConcept
133
- title={concept.title}
134
- content={parsedContent}
135
- metaImage={concept.metaImage}
58
+ linkText={embed.embedData.linkText}
136
59
  copyright={concept.copyright}
137
- source={concept.source}
138
60
  visualElement={visualElement}
139
- linkText={embed.embedData.linkText}
140
- conceptType={concept.conceptType}
141
- glossData={concept.glossData}
142
61
  lang={lang}
143
- exampleIds={embed.embedData.exampleIds}
144
- exampleLangs={embed.embedData.exampleLangs}
145
- />
62
+ title={concept.title.title}
63
+ >
64
+ {parsedContent}
65
+ </InlineConcept>
146
66
  );
147
67
  }
68
+
148
69
  return (
149
- <ConceptNotionV2
150
- title={concept.title}
151
- content={parsedContent}
70
+ <BlockConcept
152
71
  copyright={concept.copyright}
153
- source={concept.source}
154
72
  visualElement={visualElement}
155
- conceptType={concept.conceptType}
156
- glossData={concept.glossData}
157
73
  lang={lang}
158
- exampleIds={embed.embedData.exampleIds}
159
- exampleLangs={embed.embedData.exampleLangs}
160
- showTitle={renderContext !== "embed"}
161
- />
74
+ title={renderContext === "embed" ? undefined : concept.title.title}
75
+ >
76
+ {parsedContent}
77
+ </BlockConcept>
162
78
  );
163
79
  };
164
80
 
165
- interface InlineConceptProps extends ConceptNotionData {
166
- linkText: ReactNode;
167
- headerButtons?: ReactNode;
168
- exampleIds?: string;
169
- exampleLangs?: string;
170
- setSelection?: (e: MouseEvent) => void;
81
+ export interface InlineConceptProps extends ConceptProps, BaseProps {
82
+ linkText?: string;
171
83
  }
172
84
 
173
- const NotionButton = styled.span`
174
- background: none;
175
- border: none;
176
- font-family: inherit;
177
- font-style: inherit;
178
- line-height: 1em;
179
- text-decoration: none;
180
- position: relative;
181
- text-align: left;
182
- color: ${colors.concept.text};
183
- cursor: pointer;
184
- &:focus,
185
- &:hover,
186
- &:active,
187
- &[data-open="true"] {
188
- color: ${colors.concept.text};
189
- background-color: ${colors.concept.light};
190
- }
191
- display: inline;
192
- border-bottom: 5px double currentColor;
193
- `;
194
-
195
- const StyledAnchor = styled(Anchor)`
196
- ${mq.range({ until: breakpoints.tablet })} {
197
- position: fixed;
198
- top: 0;
199
- }
200
- `;
201
-
202
- const StyledAnchorSpan = styled.span`
203
- position: absolute;
204
- left: 50%;
205
- align-self: center;
206
- `;
207
-
208
- const getModalPosition = (anchor: HTMLElement) => {
209
- const article = anchor.closest("[data-ndla-article]");
210
- const articlePos = article?.getBoundingClientRect();
211
- const anchorPos = anchor.getBoundingClientRect();
212
- return anchorPos.top - (articlePos?.top || -window.scrollY) + 30; // add 30 so that position is under the word
213
- };
85
+ // TODO: Consider if we should make this act like the old concept popover.
86
+ // Should it take up the entire screen height on mobile? I don't think we need to.
87
+ // Should it always stay directly underneath the trigger?
214
88
 
215
89
  export const InlineConcept = forwardRef<HTMLSpanElement, InlineConceptProps>(
216
- (
217
- {
218
- title,
219
- content,
220
- copyright,
221
- source,
222
- visualElement,
223
- linkText,
224
- glossData,
225
- conceptType,
226
- headerButtons,
227
- lang,
228
- exampleIds,
229
- exampleLangs,
230
- setSelection,
231
- ...rest
232
- },
233
- ref,
234
- ) => {
235
- const { t } = useTranslation();
236
- const anchorRef = useRef<HTMLDivElement>(null);
237
- const [modalPos, setModalPos] = useState(-9999);
238
-
239
- const onOpenChange = useCallback((open: boolean) => {
240
- if (open) {
241
- const anchor = anchorRef.current;
242
- if (anchor) {
243
- const top = getModalPosition(anchor);
244
- setModalPos(top);
245
- }
246
- } else {
247
- setModalPos(-9999);
248
- }
249
- }, []);
250
-
251
- const preventAutoFocusInEditor = useCallback(
252
- (e: MouseEvent) => {
253
- e.preventDefault();
254
- e.stopPropagation();
255
- setSelection?.(e);
256
- },
257
- [setSelection],
258
- );
259
-
260
- return (
261
- <Root modal={isMobile} onOpenChange={onOpenChange}>
262
- <StyledAnchor ref={anchorRef} asChild>
263
- <StyledAnchorSpan contentEditable={false} />
264
- </StyledAnchor>
265
- <Trigger asChild>
266
- <NotionButton
267
- onMouseDown={(e) => (setSelection ? preventAutoFocusInEditor(e.nativeEvent) : undefined)}
268
- data-open={modalPos !== -9999}
269
- role="button"
270
- tabIndex={0}
271
- ref={ref}
272
- {...rest}
273
- >
274
- {linkText}
275
- </NotionButton>
276
- </Trigger>
277
- <Portal container={(anchorRef.current?.closest("[data-ndla-article]") as HTMLElement | null) || undefined}>
278
- <PopoverWrapper top={modalPos}>
279
- <Content avoidCollisions={false} side="bottom" asChild>
280
- <ConceptNotionV2
281
- title={title}
282
- content={content}
283
- copyright={copyright}
284
- source={source}
285
- visualElement={visualElement}
286
- inPopover
287
- headerButtons={headerButtons}
288
- lang={lang}
289
- closeButton={
290
- <Close asChild>
291
- <IconButtonV2 aria-label={t("close")} variant="ghost">
292
- <Cross />
293
- </IconButtonV2>
294
- </Close>
295
- }
296
- conceptType={conceptType}
297
- glossData={glossData}
298
- exampleIds={exampleIds}
299
- exampleLangs={exampleLangs}
300
- />
301
- </Content>
302
- </PopoverWrapper>
303
- </Portal>
304
- </Root>
305
- );
306
- },
90
+ ({ linkText, copyright, visualElement, lang, children, title, ...rest }, ref) => (
91
+ <PopoverRoot>
92
+ <PopoverTrigger asChild>
93
+ <InlineTriggerButton {...rest} ref={ref}>
94
+ {linkText}
95
+ </InlineTriggerButton>
96
+ </PopoverTrigger>
97
+ <StyledPopoverContent>
98
+ <Figure>
99
+ <Concept copyright={copyright} visualElement={visualElement} lang={lang} title={title}>
100
+ {children}
101
+ </Concept>
102
+ </Figure>
103
+ </StyledPopoverContent>
104
+ </PopoverRoot>
105
+ ),
307
106
  );
308
107
 
309
- interface ConceptProps extends ConceptNotionData {
310
- fullWidth?: boolean;
311
- exampleIds?: string;
312
- exampleLangs?: string;
313
- }
314
-
315
- export const BlockConcept = ({
316
- title,
317
- content,
318
- metaImage,
319
- copyright,
320
- source,
321
- visualElement,
322
- fullWidth,
323
- glossData,
324
- conceptType,
325
- lang,
326
- exampleIds,
327
- exampleLangs,
328
- }: ConceptProps) => {
329
- const { t } = useTranslation();
330
- const anchorRef = useRef<HTMLDivElement>(null);
331
- const [modalPos, setModalPos] = useState(-9999);
332
-
333
- const visualElementType =
334
- visualElement?.embedData.resource === "brightcove" ? "video" : visualElement?.embedData.resource;
335
-
336
- const onOpenChange = useCallback((open: boolean) => {
337
- if (open) {
338
- const anchor = anchorRef.current;
339
- if (anchor) {
340
- const top = getModalPosition(anchor);
341
- setModalPos(top);
342
- }
343
- } else {
344
- setModalPos(-9999);
345
- }
346
- }, []);
347
-
348
- return (
349
- <Root modal={isMobile} onOpenChange={onOpenChange}>
350
- <StyledAnchor ref={anchorRef} />
351
- <Figure type={fullWidth ? "full" : "full-column"}>
352
- {conceptType === "concept" ? (
353
- <UINotion
354
- id=""
355
- title={title.title}
356
- text={content}
357
- lang={lang}
358
- visualElement={
359
- visualElement?.status === "success" && (
360
- <>
361
- <ImageWrapper>
362
- <Tooltip tooltip={t(`searchPage.resultType.${conceptType}`)}>
363
- <Trigger asChild>
364
- <StyledButton
365
- type="button"
366
- aria-label={t("concept.showDescription", {
367
- title: title,
368
- })}
369
- >
370
- {visualElement.resource === "image" ? (
371
- <NotionImage
372
- type={visualElementType}
373
- src={visualElement.data.image.imageUrl}
374
- alt={visualElement.data.alttext.alttext}
375
- />
376
- ) : metaImage ? (
377
- <NotionImage
378
- type={visualElementType}
379
- src={metaImage?.url ?? ""}
380
- alt={metaImage?.alt ?? ""}
381
- />
382
- ) : undefined}
383
- </StyledButton>
384
- </Trigger>
385
- </Tooltip>
386
- </ImageWrapper>
387
- <Portal
388
- container={
389
- typeof document !== "undefined"
390
- ? (document.querySelector("[data-ndla-article]") as HTMLElement | null) || undefined
391
- : undefined
392
- }
393
- >
394
- <PopoverWrapper top={modalPos}>
395
- <Content avoidCollisions={false} asChild side="bottom">
396
- <ConceptNotionV2
397
- title={title}
398
- content={content}
399
- copyright={copyright}
400
- source={source}
401
- visualElement={visualElement}
402
- inPopover
403
- lang={lang}
404
- closeButton={
405
- <Close asChild>
406
- <IconButtonV2 aria-label={t("close")} variant="ghost">
407
- <Cross />
408
- </IconButtonV2>
409
- </Close>
410
- }
411
- conceptType={conceptType}
412
- glossData={glossData}
413
- />
414
- </Content>
415
- </PopoverWrapper>
416
- </Portal>
417
- </>
418
- )
419
- }
420
- />
421
- ) : (
422
- <Gloss
423
- glossData={glossData}
424
- title={title}
425
- audio={
426
- visualElement?.status === "success" && visualElement.resource === "audio"
427
- ? {
428
- src: visualElement.data.audioFile.url,
429
- title: visualElement.data.title.title,
430
- }
431
- : undefined
432
- }
433
- exampleIds={exampleIds}
434
- exampleLangs={exampleLangs}
435
- />
436
- )}
437
- {copyright && conceptType === "concept" && (
438
- <EmbedByline copyright={copyright} type={conceptType as ConceptType} />
439
- )}
440
- </Figure>
441
- </Root>
442
- );
443
- };
108
+ export interface BlockConceptProps extends ConceptProps {}
444
109
 
445
- export default ConceptEmbed;
110
+ export const BlockConcept = forwardRef<HTMLElement, BlockConceptProps>((props, ref) => (
111
+ <Concept {...props} ref={ref} />
112
+ ));
@@ -7,29 +7,32 @@
7
7
  */
8
8
 
9
9
  import { useTranslation } from "react-i18next";
10
- import styled from "@emotion/styled";
11
- import { colors } from "@ndla/core";
10
+ import { Figure } from "@ndla/primitives";
11
+ import { styled } from "@ndla/styled-system/jsx";
12
12
  import { ConceptListMetaData } from "@ndla/types-embed";
13
13
  import { BlockConcept } from "./ConceptEmbed";
14
- import { Figure } from "../Figure";
15
14
 
16
15
  interface Props {
17
16
  embed: ConceptListMetaData;
18
17
  lang?: string;
19
18
  }
20
19
 
21
- const ConceptList = styled.div`
22
- & > figure:first-of-type {
23
- margin-top: 32px;
24
- }
25
- & li {
26
- display: block;
27
- }
28
- `;
20
+ // TODO: Find out if we're actually still going to use this.
21
+ // If we are, we need to re-add some margin between the list items. We should also probably parse the concept content to HTML, like we do in ConceptEmbed.
22
+
23
+ const ConceptList = styled("div", {
24
+ base: {
25
+ "& li": {
26
+ display: "block",
27
+ },
28
+ },
29
+ });
29
30
 
30
- const StyledSpan = styled.span`
31
- color: ${colors.support.red};
32
- `;
31
+ const StyledSpan = styled("span", {
32
+ base: {
33
+ color: "text.error",
34
+ },
35
+ });
33
36
 
34
37
  const ConceptListEmbed = ({ embed, lang }: Props) => {
35
38
  const { t } = useTranslation();
@@ -39,20 +42,18 @@ const ConceptListEmbed = ({ embed, lang }: Props) => {
39
42
  const { embedData, data } = embed;
40
43
  return (
41
44
  <div>
42
- <Figure type="full">
45
+ <Figure>
43
46
  {embedData.title && <h2 lang={lang}>{embedData.title}</h2>}
44
47
  <ConceptList>
45
48
  <ul lang={lang}>
46
49
  {data.concepts.map(({ concept, visualElement }) => (
47
50
  <li key={concept.id}>
48
51
  <BlockConcept
49
- title={concept.title}
52
+ title={concept.title.title}
50
53
  content={concept.content.content}
51
- metaImage={concept.metaImage}
52
54
  copyright={concept.copyright}
53
- source={concept.source}
54
55
  visualElement={visualElement}
55
- conceptType={concept.conceptType}
56
+ lang={lang}
56
57
  />
57
58
  </li>
58
59
  ))}
@@ -8,27 +8,25 @@
8
8
 
9
9
  import { ReactNode } from "react";
10
10
  import { useTranslation } from "react-i18next";
11
- import styled from "@emotion/styled";
12
- import { colors } from "@ndla/core";
11
+ import { Text } from "@ndla/primitives";
13
12
  import { ContentLinkMetaData } from "@ndla/types-embed";
13
+
14
14
  interface Props {
15
15
  embed: ContentLinkMetaData;
16
16
  isOembed?: boolean;
17
17
  children?: ReactNode;
18
18
  }
19
19
 
20
- const StyledSpan = styled.span`
21
- color: ${colors.support.red};
22
- `;
23
-
24
20
  const ContentLinkEmbed = ({ embed, isOembed, children }: Props) => {
25
21
  const { t } = useTranslation();
26
22
  if (embed.status === "error") {
27
23
  return (
28
- <StyledSpan>
29
- <span>{`${t("embed.linkError")}: `}</span>
30
- {children}
31
- </StyledSpan>
24
+ <Text color="text.error" asChild consumeCss>
25
+ <span>
26
+ <span>{`${t("embed.linkError")}: `}</span>
27
+ {children}
28
+ </span>
29
+ </Text>
32
30
  );
33
31
  }
34
32
 
@@ -7,7 +7,6 @@
7
7
  */
8
8
 
9
9
  import { ReactNode } from "react";
10
- import styled from "@emotion/styled";
11
10
  import { CopyrightMetaData } from "@ndla/types-embed";
12
11
  import { EmbedByline } from "../LicenseByline";
13
12
 
@@ -16,20 +15,11 @@ interface Props {
16
15
  children?: ReactNode;
17
16
  }
18
17
 
19
- const StyledFigCaption = styled.figcaption`
20
- background: unset;
21
- font-size: unset;
22
- padding: unset;
23
- color: unset;
24
- `;
25
-
26
18
  const CopyrightEmbed = ({ embed, children }: Props) => {
27
19
  return (
28
20
  <figure>
29
21
  {children}
30
- <StyledFigCaption contentEditable={false}>
31
- <EmbedByline type="copyright" copyright={embed.embedData.copyright} bottomRounded />
32
- </StyledFigCaption>
22
+ <EmbedByline type="copyright" copyright={embed.embedData.copyright} bottomRounded />
33
23
  </figure>
34
24
  );
35
25
  };