@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
@@ -7,51 +7,54 @@
7
7
  */
8
8
 
9
9
  import { ReactNode } from "react";
10
- import styled from "@emotion/styled";
11
- import { colors, spacing } from "@ndla/core";
12
10
  import { WarningOutline } from "@ndla/icons/common";
13
- import { Figure, FigureType } from "../Figure";
11
+ import { Figure, type FigureFloat, type FigureSize } from "@ndla/primitives";
12
+ import { styled } from "@ndla/styled-system/jsx";
14
13
  import { EmbedByline } from "../LicenseByline";
15
14
  import { EmbedBylineErrorProps } from "../LicenseByline/EmbedByline";
16
15
 
17
16
  interface Props {
18
17
  type: EmbedBylineErrorProps["type"];
19
- figureType?: FigureType;
18
+ figureType?: FigureSize;
19
+ float?: FigureFloat;
20
20
  children?: ReactNode;
21
21
  }
22
22
 
23
- const ErrorPlaceholder = styled.div`
24
- display: flex;
25
- align-items: center;
26
- justify-content: center;
27
- background-color: ${colors.brand.greyLighter};
28
- height: 330px;
23
+ const ErrorPlaceholder = styled("div", {
24
+ base: {
25
+ display: "flex",
26
+ alignItems: "center",
27
+ justifyContent: "center",
28
+ backgroundColor: "surface.disabled",
29
+ height: "surface.xsmall",
30
+ "& svg": {
31
+ fill: "text.subtle",
32
+ height: "90%",
33
+ width: "90%",
34
+ },
35
+ "&[data-embed-type='audio']": {
36
+ height: "surface.3xsmall",
37
+ },
38
+ },
39
+ });
29
40
 
30
- svg {
31
- fill: ${colors.text.light};
32
- height: 90%;
33
- width: 90%;
34
- }
35
- &[data-embed-type="audio"] {
36
- height: 150px;
37
- }
38
- `;
41
+ const StyledFigure = styled(Figure, {
42
+ base: {
43
+ "& > *:not(:first-child)": {
44
+ marginBlockStart: "3xsmall",
45
+ },
46
+ },
47
+ });
39
48
 
40
- const StyledFigure = styled(Figure)`
41
- display: flex;
42
- flex-direction: column;
43
- gap: ${spacing.xsmall};
44
- `;
45
-
46
- const EmbedErrorPlaceholder = ({ type, children, figureType }: Props) => {
49
+ const EmbedErrorPlaceholder = ({ type, children, figureType, float }: Props) => {
47
50
  return (
48
- <StyledFigure type={figureType}>
51
+ <StyledFigure size={figureType} float={float}>
49
52
  {children ?? (
50
53
  <ErrorPlaceholder data-embed-type={type}>
51
54
  <WarningOutline />
52
55
  </ErrorPlaceholder>
53
56
  )}
54
- <EmbedByline error type={type} topRounded bottomRounded />
57
+ <EmbedByline error type={type} />
55
58
  </StyledFigure>
56
59
  );
57
60
  };
@@ -8,24 +8,26 @@
8
8
 
9
9
  import { useEffect, useRef } from "react";
10
10
  import { useTranslation } from "react-i18next";
11
- import styled from "@emotion/styled";
11
+ import { Figure } from "@ndla/primitives";
12
+ import { styled } from "@ndla/styled-system/jsx";
12
13
  import { OembedMetaData } from "@ndla/types-embed";
13
14
  import EmbedErrorPlaceholder from "./EmbedErrorPlaceholder";
14
- import { Figure } from "../Figure";
15
15
  import { ResourceBox } from "../ResourceBox";
16
16
 
17
17
  interface Props {
18
18
  embed: OembedMetaData;
19
- isConcept?: boolean;
20
19
  }
21
20
 
22
- const StyledFigure = styled(Figure)`
23
- iframe {
24
- height: auto;
25
- }
26
- `;
21
+ const StyledFigure = styled(Figure, {
22
+ base: {
23
+ "& iframe": {
24
+ height: "auto",
25
+ width: "100%",
26
+ },
27
+ },
28
+ });
27
29
 
28
- const ExternalEmbed = ({ embed, isConcept }: Props) => {
30
+ const ExternalEmbed = ({ embed }: Props) => {
29
31
  const { t } = useTranslation();
30
32
  const figRef = useRef<HTMLElement>(null);
31
33
 
@@ -38,6 +40,7 @@ const ExternalEmbed = ({ embed, isConcept }: Props) => {
38
40
  iframe.height = "";
39
41
  }
40
42
  }, []);
43
+
41
44
  if (embed.status === "error") {
42
45
  return <EmbedErrorPlaceholder type="external" />;
43
46
  }
@@ -50,7 +53,7 @@ const ExternalEmbed = ({ embed, isConcept }: Props) => {
50
53
  alt: embedData.alt !== undefined ? embedData.alt : data.iframeImage?.alttext?.alttext ?? "",
51
54
  };
52
55
  return (
53
- <Figure type="full">
56
+ <Figure>
54
57
  <ResourceBox
55
58
  image={image}
56
59
  title={embedData.title ?? ""}
@@ -62,13 +65,7 @@ const ExternalEmbed = ({ embed, isConcept }: Props) => {
62
65
  );
63
66
  }
64
67
 
65
- return (
66
- <StyledFigure
67
- ref={figRef}
68
- type={isConcept ? "full-column" : undefined}
69
- dangerouslySetInnerHTML={{ __html: data.oembed.html ?? "" }}
70
- />
71
- );
68
+ return <StyledFigure ref={figRef} dangerouslySetInnerHTML={{ __html: data.oembed.html ?? "" }} />;
72
69
  };
73
70
 
74
71
  export default ExternalEmbed;
@@ -99,11 +99,7 @@ const otherFootnoteMeta: FootnoteData = {
99
99
  export const WithSeveralFootnotes: StoryFn<typeof FootnoteEmbed> = ({ ...args }) => (
100
100
  <div>
101
101
  <p>
102
- Her kan det ligge en fotnote
103
- <FootnoteEmbed {...args} />
104
- </p>
105
- <p>
106
- Her kan det ligge en til
102
+ Her kan det ligge en fotnote <FootnoteEmbed {...args} /> for eksempel. Her kan det ligge en til
107
103
  <FootnoteEmbed
108
104
  embed={{
109
105
  resource: "footnote",
@@ -112,6 +108,7 @@ export const WithSeveralFootnotes: StoryFn<typeof FootnoteEmbed> = ({ ...args })
112
108
  embedData: otherFootnoteEmbedData,
113
109
  }}
114
110
  />
111
+ .
115
112
  </p>
116
113
  <ArticleByline
117
114
  footnotes={
@@ -7,24 +7,21 @@
7
7
  */
8
8
 
9
9
  import { useTranslation } from "react-i18next";
10
- import styled from "@emotion/styled";
11
- import { spacing } from "@ndla/core";
10
+ import { styled } from "@ndla/styled-system/jsx";
12
11
  import { FootnoteMetaData } from "@ndla/types-embed";
13
12
 
14
13
  interface Props {
15
14
  embed: FootnoteMetaData;
16
15
  }
17
16
 
18
- const FootnoteRef = styled.span`
19
- sup {
20
- a {
21
- margin-left: -2px;
22
- padding: ${spacing.small} ${spacing.xsmall};
23
- box-shadow: none;
24
- text-decoration: underline;
25
- }
26
- }
27
- `;
17
+ const StyledSup = styled("sup", {
18
+ base: {
19
+ "& a": {
20
+ textStyle: "label.xsmall",
21
+ marginInlineStart: "1",
22
+ },
23
+ },
24
+ });
28
25
 
29
26
  const FootnoteEmbed = ({ embed }: Props) => {
30
27
  const { t } = useTranslation();
@@ -33,11 +30,11 @@ const FootnoteEmbed = ({ embed }: Props) => {
33
30
  }
34
31
 
35
32
  return (
36
- <FootnoteRef id={`ref${embed.data.entryNum}`}>
37
- <sup>
33
+ <span id={`ref${embed.data.entryNum}`}>
34
+ <StyledSup>
38
35
  <a href={`#note${embed.data.entryNum}`} target="_self">{`[${embed.data.entryNum}]`}</a>
39
- </sup>
40
- </FootnoteRef>
36
+ </StyledSup>
37
+ </span>
41
38
  );
42
39
  };
43
40
 
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Copyright (c) 2024-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import { Meta, StoryObj } from "@storybook/react";
10
+ import { ConceptData, ConceptEmbedData } from "@ndla/types-embed";
11
+ import { GlossEmbed } from "./GlossEmbed";
12
+
13
+ const glossBlockEmbedData: ConceptEmbedData = {
14
+ contentId: "4942",
15
+ resource: "concept",
16
+ type: "block",
17
+ linkText: "",
18
+ };
19
+
20
+ const glossInlineEmbedData: ConceptEmbedData = {
21
+ contentId: "23",
22
+ linkText: "glose",
23
+ resource: "concept",
24
+ type: "inline",
25
+ };
26
+
27
+ const glossMetaData: ConceptData["concept"] = {
28
+ id: 4942,
29
+ revision: 6,
30
+ title: {
31
+ title: "Ma Hong",
32
+ language: "nb",
33
+ },
34
+ content: {
35
+ content: "Hei",
36
+ htmlContent: "Hei",
37
+ language: "nb",
38
+ },
39
+ copyright: {
40
+ creators: [],
41
+ processors: [],
42
+ rightsholders: [],
43
+ processed: false,
44
+ },
45
+ source: "",
46
+ metaImage: {
47
+ url: "",
48
+ alt: "",
49
+ language: "und",
50
+ },
51
+ created: "2023-07-19T09:30:40.000Z",
52
+ updated: "2023-09-19T17:13:56.573Z",
53
+ updatedBy: ["XxnkdI7rApMl58MeG3p4g4B8", "hd5ZL5Lm4kKkumWgN2gjy9wx"],
54
+ supportedLanguages: ["nb"],
55
+ articleIds: [],
56
+ status: {
57
+ current: "IN_PROGRESS",
58
+ other: [],
59
+ },
60
+ responsible: {
61
+ responsibleId: "XxnkdI7rApMl58MeG3p4g4B8",
62
+ lastUpdated: "2023-07-19T09:30:40.000Z",
63
+ },
64
+ conceptType: "gloss",
65
+ glossData: {
66
+ gloss: "马红",
67
+ wordClass: "personal-pronoun",
68
+ originalLanguage: "zh",
69
+ transcriptions: {},
70
+ examples: [
71
+ [
72
+ {
73
+ example: "我叫马红",
74
+ language: "zh",
75
+ transcriptions: {
76
+ pinyin: "wo jiao ma hong ",
77
+ },
78
+ },
79
+ {
80
+ example: "Jeg heter ma hong",
81
+ language: "nb",
82
+ transcriptions: {},
83
+ },
84
+ ],
85
+ ],
86
+ },
87
+ };
88
+
89
+ const glossBlockData: ConceptData = {
90
+ concept: glossMetaData,
91
+ };
92
+
93
+ export default {
94
+ title: "Embeds/GlossEmbed",
95
+ component: GlossEmbed,
96
+ tags: ["autodocs"],
97
+ render: (args) => <GlossEmbed {...args} />,
98
+ } satisfies Meta<typeof GlossEmbed>;
99
+
100
+ export const Block: StoryObj<typeof GlossEmbed> = {
101
+ args: {
102
+ embed: {
103
+ resource: "concept",
104
+ status: "success",
105
+ embedData: glossBlockEmbedData,
106
+ data: glossBlockData,
107
+ },
108
+ },
109
+ };
110
+
111
+ export const BlockFailed: StoryObj<typeof GlossEmbed> = {
112
+ args: {
113
+ embed: {
114
+ resource: "concept",
115
+ status: "error",
116
+ embedData: glossBlockEmbedData,
117
+ },
118
+ },
119
+ };
120
+
121
+ export const Inline: StoryObj<typeof GlossEmbed> = {
122
+ args: {
123
+ embed: {
124
+ resource: "concept",
125
+ status: "success",
126
+ embedData: glossInlineEmbedData,
127
+ data: glossBlockData,
128
+ },
129
+ },
130
+ };
131
+
132
+ export const InlineFailed: StoryObj<typeof GlossEmbed> = {
133
+ args: {
134
+ embed: {
135
+ resource: "concept",
136
+ status: "error",
137
+ embedData: glossInlineEmbedData,
138
+ },
139
+ },
140
+ };
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Copyright (c) 2024-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import { Figure, PopoverContent, PopoverRoot, PopoverTrigger } from "@ndla/primitives";
10
+ import { styled } from "@ndla/styled-system/jsx";
11
+ import { ConceptMetaData } from "@ndla/types-embed";
12
+ import EmbedErrorPlaceholder from "./EmbedErrorPlaceholder";
13
+ import { InlineTriggerButton } from "./InlineTriggerButton";
14
+ import { Gloss } from "../Gloss";
15
+
16
+ interface Props {
17
+ embed: ConceptMetaData;
18
+ }
19
+
20
+ const StyledPopoverContent = styled(PopoverContent, {
21
+ base: {
22
+ width: "surface.xlarge",
23
+ },
24
+ });
25
+
26
+ export const GlossEmbed = ({ embed }: Props) => {
27
+ if (embed.status === "error" && embed.embedData.type === "inline") {
28
+ return <span>{embed.embedData.linkText}</span>;
29
+ }
30
+ if (embed.status === "error" || !embed.data.concept.glossData) {
31
+ return <EmbedErrorPlaceholder type="gloss" />;
32
+ }
33
+
34
+ const { concept, visualElement } = embed.data;
35
+
36
+ const audio =
37
+ visualElement?.status === "success" && visualElement.resource === "audio"
38
+ ? {
39
+ src: visualElement.data.audioFile.url,
40
+ title: visualElement.data.title.title,
41
+ }
42
+ : undefined;
43
+
44
+ if (embed.embedData.type === "inline") {
45
+ return (
46
+ <PopoverRoot>
47
+ <PopoverTrigger asChild>
48
+ <InlineTriggerButton>{embed.embedData.linkText}</InlineTriggerButton>
49
+ </PopoverTrigger>
50
+ <StyledPopoverContent>
51
+ <Figure>
52
+ <Gloss glossData={concept.glossData} title={concept.title} audio={audio} />
53
+ </Figure>
54
+ </StyledPopoverContent>
55
+ </PopoverRoot>
56
+ );
57
+ }
58
+
59
+ return (
60
+ <Figure>
61
+ <Gloss glossData={concept.glossData} title={concept.title} audio={audio} variant="bordered" />
62
+ </Figure>
63
+ );
64
+ };
@@ -6,38 +6,44 @@
6
6
  *
7
7
  */
8
8
 
9
- import styled from "@emotion/styled";
9
+ import { Figure } from "@ndla/primitives";
10
+ import { styled } from "@ndla/styled-system/jsx";
10
11
  import { H5pMetaData } from "@ndla/types-embed";
11
12
  import EmbedErrorPlaceholder from "./EmbedErrorPlaceholder";
12
- import { Figure } from "../Figure";
13
13
 
14
14
  interface Props {
15
15
  embed: H5pMetaData;
16
- isConcept?: boolean;
17
16
  }
18
17
 
19
- const StyledFigure = styled(Figure)`
20
- iframe {
21
- height: auto;
22
- }
23
- `;
18
+ const StyledFigure = styled(Figure, {
19
+ base: {
20
+ "& iframe": {
21
+ height: "auto",
22
+ width: "100%",
23
+ },
24
+ },
25
+ });
26
+
27
+ const FigureOembed = styled(Figure, {
28
+ base: {
29
+ width: "100%",
30
+ "& iframe": {
31
+ width: "100%",
32
+ },
33
+ },
34
+ });
24
35
 
25
- const H5pEmbed = ({ embed, isConcept }: Props) => {
36
+ const H5pEmbed = ({ embed }: Props) => {
26
37
  if (embed.status === "error") {
27
38
  return <EmbedErrorPlaceholder type="h5p" />;
28
39
  }
29
40
 
30
41
  if (embed.data.oembed) {
31
- return (
32
- <Figure
33
- type={isConcept ? "full-column" : undefined}
34
- dangerouslySetInnerHTML={{ __html: embed.data.oembed.html ?? "" }}
35
- />
36
- );
42
+ return <FigureOembed dangerouslySetInnerHTML={{ __html: embed.data.oembed.html ?? "" }} />;
37
43
  }
38
44
 
39
45
  return (
40
- <StyledFigure type={isConcept ? "full-column" : undefined}>
46
+ <StyledFigure>
41
47
  <iframe title={embed.embedData.url} aria-label={embed.embedData.url} src={embed.embedData.url} />
42
48
  </StyledFigure>
43
49
  );
@@ -8,17 +8,23 @@
8
8
 
9
9
  import { useEffect, useRef } from "react";
10
10
  import { useTranslation } from "react-i18next";
11
+ import { Figure } from "@ndla/primitives";
12
+ import { styled } from "@ndla/styled-system/jsx";
11
13
  import { IframeMetaData } from "@ndla/types-embed";
12
14
  import EmbedErrorPlaceholder from "./EmbedErrorPlaceholder";
13
- import { Figure } from "../Figure";
14
15
  import { ResourceBox } from "../ResourceBox";
15
16
 
16
17
  interface Props {
17
18
  embed: IframeMetaData;
18
- isConcept?: boolean;
19
19
  }
20
20
 
21
- const IframeEmbed = ({ embed, isConcept }: Props) => {
21
+ const StyledIframe = styled("iframe", {
22
+ base: {
23
+ width: "100%",
24
+ },
25
+ });
26
+
27
+ const IframeEmbed = ({ embed }: Props) => {
22
28
  const { t } = useTranslation();
23
29
  const iframeRef = useRef<HTMLIFrameElement>(null);
24
30
 
@@ -43,7 +49,7 @@ const IframeEmbed = ({ embed, isConcept }: Props) => {
43
49
  const alt = embedData.alt !== undefined ? embedData.alt : iframeImage?.alttext.alttext;
44
50
  const image = { src: iframeImage?.image.imageUrl ?? "", alt: alt ?? "" };
45
51
  return (
46
- <Figure type="full">
52
+ <Figure>
47
53
  <ResourceBox
48
54
  image={image}
49
55
  title={embedData.title ?? ""}
@@ -62,8 +68,8 @@ const IframeEmbed = ({ embed, isConcept }: Props) => {
62
68
  const urlOrTitle = title || url;
63
69
 
64
70
  return (
65
- <Figure type={isConcept ? "full-column" : undefined}>
66
- <iframe
71
+ <Figure>
72
+ <StyledIframe
67
73
  ref={iframeRef}
68
74
  title={urlOrTitle}
69
75
  aria-label={urlOrTitle}
@@ -7,11 +7,15 @@
7
7
  */
8
8
 
9
9
  import { ReactNode } from "react";
10
- import { Meta, StoryObj } from "@storybook/react";
10
+ import { Meta, StoryFn, StoryObj } from "@storybook/react";
11
+ import { Text } from "@ndla/primitives";
12
+ import { css } from "@ndla/styled-system/css";
13
+ import { styled } from "@ndla/styled-system/jsx";
11
14
  import { IImageMetaInformationV3 } from "@ndla/types-backend/image-api";
12
15
  import { ImageEmbedData } from "@ndla/types-embed";
13
16
  import ImageEmbed from "./ImageEmbed";
14
17
  import { ArticleWrapper } from "../Article";
18
+ import { Grid } from "../Grid";
15
19
  import LayoutItem, { OneColumn } from "../Layout";
16
20
 
17
21
  const embedData: ImageEmbedData = {
@@ -184,26 +188,27 @@ export const Cropped: StoryObj<typeof ImageEmbed> = {
184
188
  };
185
189
 
186
190
  const TextWrapper = ({ children }: { children: ReactNode }) => (
187
- <>
188
- <p>
191
+ // TODO: Replace this with regular css once we drop emotion
192
+ <styled.div css={css.raw({ "& > p": { marginBlock: "medium", width: "100%" } })}>
193
+ <Text>
189
194
  Du har en kjempegod idé til en kortfilm. Men det koster mange penger å produsere filmen. Derfor er du avhengig av
190
195
  at noen tenner på idéen din og bestemmer seg for å bruke ressurser på nettopp dette prosjektet.
191
- </p>
196
+ </Text>
192
197
  {children}
193
198
 
194
- <p>
199
+ <Text>
195
200
  Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen du
196
201
  planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
197
- </p>
198
- <p>
202
+ </Text>
203
+ <Text>
199
204
  Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen du
200
205
  planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
201
- </p>
202
- <p>
206
+ </Text>
207
+ <Text>
203
208
  Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen du
204
209
  planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
205
- </p>
206
- </>
210
+ </Text>
211
+ </styled.div>
207
212
  );
208
213
 
209
214
  export const FloatLeft: StoryObj<typeof ImageEmbed> = {
@@ -324,3 +329,40 @@ export const FloatLeftExtraSmall: StoryObj<typeof ImageEmbed> = {
324
329
  </TextWrapper>
325
330
  ),
326
331
  };
332
+
333
+ export const In2x2Grid: StoryFn<typeof ImageEmbed> = (args) => {
334
+ const items = new Array(4).fill(
335
+ <ImageEmbed
336
+ {...args}
337
+ embed={{
338
+ resource: "image",
339
+ status: "success",
340
+ embedData: {
341
+ ...embedData,
342
+ align: "left",
343
+ border: "true",
344
+ },
345
+ data: metaData,
346
+ }}
347
+ />,
348
+ );
349
+ return <Grid columns="2x2">{items}</Grid>;
350
+ };
351
+
352
+ export const In4Grid: StoryFn<typeof ImageEmbed> = (args) => {
353
+ const items = new Array(4).fill(
354
+ <ImageEmbed
355
+ {...args}
356
+ embed={{
357
+ resource: "image",
358
+ status: "success",
359
+ embedData: {
360
+ ...embedData,
361
+ border: "true",
362
+ },
363
+ data: metaData,
364
+ }}
365
+ />,
366
+ );
367
+ return <Grid columns="4">{items}</Grid>;
368
+ };