@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,42 +7,53 @@
7
7
  */
8
8
 
9
9
  import { ReactNode } from "react";
10
- import styled from "@emotion/styled";
11
- import { colors, spacing, breakpoints } from "@ndla/core";
10
+ import { Text } from "@ndla/primitives";
12
11
  import { SafeLink } from "@ndla/safelink";
12
+ import { styled } from "@ndla/styled-system/jsx";
13
13
 
14
- const StyledErrorMessage = styled.article`
15
- text-align: center;
16
- a {
17
- color: ${colors.brand.primary};
18
- }
14
+ // TODO: This has not been redesignet yet. This is just a rewrite of the previous design in panda
19
15
 
20
- h1 {
21
- margin-top: 0;
22
- }
23
- `;
16
+ const StyledErrorMessage = styled("article", {
17
+ base: {
18
+ textAlign: "center",
19
+ "& a": {
20
+ color: "text.strong",
21
+ },
22
+ "& h1": {
23
+ marginTop: "0",
24
+ },
25
+ },
26
+ });
24
27
 
25
- const IllustrationWrapper = styled("div")`
26
- margin-bottom: ${spacing.normal};
27
- @media (min-width: ${breakpoints.tablet}) {
28
- margin-top: ${spacing.large};
29
- }
30
- `;
28
+ const IllustrationWrapper = styled("div", {
29
+ base: {
30
+ marginBottom: "medium",
31
+ tablet: {
32
+ marginTop: "xxlarge",
33
+ },
34
+ },
35
+ });
31
36
 
32
- const Description = styled("p")`
33
- margin-bottom: ${spacing.normal};
34
- @media (min-width: ${breakpoints.tablet}) {
35
- margin-bottom: ${spacing.large};
36
- }
37
- `;
37
+ const Description = styled(Text, {
38
+ base: {
39
+ marginBottom: "medium",
40
+ tablet: {
41
+ marginBottom: "xxlarge",
42
+ },
43
+ },
44
+ });
38
45
 
39
- const CustomElementWrapper = styled.div`
40
- margin: ${spacing.large} 0;
41
- `;
46
+ const CustomElementWrapper = styled("div", {
47
+ base: {
48
+ marginBlock: "xxlarge",
49
+ },
50
+ });
42
51
 
43
- const MessageWrapper = styled.div`
44
- margin-top: ${spacing.xsmall};
45
- `;
52
+ const MessageWrapper = styled("div", {
53
+ base: {
54
+ marginTop: "3xsmall",
55
+ },
56
+ });
46
57
 
47
58
  interface Props {
48
59
  messages: {
@@ -7,16 +7,18 @@
7
7
  */
8
8
 
9
9
  import { useTranslation } from "react-i18next";
10
- import styled from "@emotion/styled";
11
10
  import { ButtonV2 } from "@ndla/button";
12
- import { spacing } from "@ndla/core";
13
11
  import { HumanMaleBoard, LogIn } from "@ndla/icons/common";
14
-
12
+ import { styled } from "@ndla/styled-system/jsx";
15
13
  import ErrorMessage from "./ErrorMessage";
16
14
 
17
- const StyledLogInIconWrapper = styled.span`
18
- margin-left: ${spacing.xsmall};
19
- `;
15
+ // TODO: This has not been redesignet yet. This is just a rewrite of the previous design in panda
16
+
17
+ const StyledLogInIconWrapper = styled("span", {
18
+ base: {
19
+ marginLeft: "3xsmall",
20
+ },
21
+ });
20
22
 
21
23
  type Props = {
22
24
  onAuthenticateClick: () => void;
@@ -6,14 +6,11 @@
6
6
  *
7
7
  */
8
8
 
9
- /** @jsxImportSource @emotion/react */
10
- import { ComponentProps, ReactNode, forwardRef, useCallback, useEffect, useState } from "react";
9
+ import { ComponentProps, ReactNode, forwardRef, useCallback, useEffect, useId, useMemo, useState } from "react";
11
10
  import { useTranslation } from "react-i18next";
12
- import { css } from "@emotion/react";
13
- import styled from "@emotion/styled";
14
- import { IconButtonV2 } from "@ndla/button";
15
- import { breakpoints, colors, mq, spacing, stackOrder } from "@ndla/core";
16
- import { ChevronDown, ChevronUp } from "@ndla/icons/common";
11
+ import { ChevronDown } from "@ndla/icons/common";
12
+ import { IconButton } from "@ndla/primitives";
13
+ import { styled } from "@ndla/styled-system/jsx";
17
14
 
18
15
  interface Props extends ComponentProps<"aside"> {
19
16
  children?: ReactNode;
@@ -22,129 +19,132 @@ interface Props extends ComponentProps<"aside"> {
22
19
  onOpenChange?: (open: boolean) => void;
23
20
  }
24
21
 
25
- const StyledAside = styled.aside`
26
- display: flex;
27
- flex-direction: column;
28
- align-items: center;
29
- position: relative;
30
- z-index: ${stackOrder.offsetSingle};
31
- margin: ${spacing.large} 0 calc(${spacing.large} - ${spacing.nsmall}) 0;
32
- overflow: hidden;
33
- padding-bottom: ${spacing.nsmall};
34
-
35
- @media print {
36
- overflow: visible;
37
- }
38
-
39
- h2:first-of-type {
40
- border-bottom: 2px solid ${colors.brand.primary};
41
- margin-top: 0;
42
- margin-bottom: ${spacing.normal};
43
- }
44
-
45
- h2,
46
- h3,
47
- h4,
48
- h5 {
49
- display: block;
50
- margin-top: ${spacing.normal};
51
- margin-bottom: ${spacing.small};
52
- border-bottom: 1px solid ${colors.brand.light};
53
- }
54
- `;
55
-
56
- const StyledDiv = styled.div`
57
- width: 100%;
58
- position: relative;
59
- color: ${colors.brand.greyDark};
60
- padding: ${spacing.normal} ${spacing.normal} ${spacing.large};
61
- border: 1px solid ${colors.brand.greyLight};
62
- max-height: 190px;
63
- transition: max-height 0.6s ease-in-out;
64
- overflow: hidden;
65
-
66
- &:after {
67
- content: "";
68
- text-align: center;
69
- position: absolute;
70
- top: 0;
71
- bottom: 0;
72
- right: 0;
73
- width: 99%;
74
- margin: 0.5% 0.5% 0 0.5%;
75
- transition: opacity 0.5s cubic-bezier(0.74, -0.04, 0.96, 0.97);
76
- /* The 00 after our color is to set its opacity to 0 */
77
- background: linear-gradient(${colors.brand.light}00, ${colors.white});
78
- opacity: 1;
79
- z-index: ${stackOrder.base};
80
- }
81
-
82
- @media print {
83
- max-height: revert;
84
- &:after {
85
- display: none;
86
- }
87
- }
88
-
89
- & > ul:not([class]),
90
- :not(li) > ul:not([class]) {
91
- ${mq.range({ from: breakpoints.desktop })} {
92
- margin-left: ${spacing.normal};
93
- }
94
- }
95
-
96
- & > ol:not([class]),
97
- :not(li) > ol:not([class]) {
98
- ${mq.range({ from: breakpoints.desktop })} {
99
- margin-left: ${spacing.large};
100
- }
101
- }
102
- `;
103
-
104
- const StyledIconButton = styled(IconButtonV2)`
105
- margin-top: -20px;
106
- z-index: ${stackOrder.offsetSingle};
107
-
108
- @media print {
109
- display: none;
110
- }
111
- `;
112
-
113
- const expandedStyle = css`
114
- max-height: 500vh;
115
- `;
22
+ const StyledAside = styled("aside", {
23
+ base: {
24
+ display: "flex",
25
+ flexDirection: "column",
26
+ alignItems: "center",
27
+ position: "relative",
28
+ padding: "medium",
29
+ transitionProperty: "max-height",
30
+ transitionDuration: "slow",
31
+ transitionTimingFunction: "ease-in-out",
32
+ border: "1px solid",
33
+ borderColor: "stroke.default",
34
+ borderRadius: "xsmall",
35
+ maxHeight: "surface.xxsmall",
36
+ _closed: {
37
+ _print: {
38
+ overflow: "visible",
39
+ maxHeight: "500vh",
40
+ },
41
+ },
42
+ _open: {
43
+ maxHeight: "500vh",
44
+ },
45
+ },
46
+ });
47
+
48
+ const StyledContent = styled("div", {
49
+ base: {
50
+ position: "relative",
51
+ width: "100%",
52
+ overflow: "hidden",
53
+ // Reset the top margin of the very first child.
54
+ "& :first-child": {
55
+ marginBlockStart: "0",
56
+ },
57
+ _after: {
58
+ content: '""',
59
+ textAlign: "center",
60
+ position: "absolute",
61
+ inset: "0",
62
+ transitionProperty: "opacity",
63
+ transitionDuration: "slow",
64
+ transitionTimingFunction: "ease-out",
65
+ // TODO: Consider improving this gradient. It's a little light up top.
66
+ gradientFrom: "surface.default/00",
67
+ gradientTo: "surface.default",
68
+ backgroundGradient: "to-b",
69
+ opacity: "1",
70
+ zIndex: "base",
71
+ },
72
+ _print: {
73
+ overflow: "visible",
74
+ _after: {
75
+ display: "none",
76
+ },
77
+ },
78
+ _open: {
79
+ paddingBlockEnd: "xsmall",
80
+ _after: {
81
+ opacity: "0",
82
+ zIndex: "hide",
83
+ },
84
+ },
85
+ },
86
+ });
87
+
88
+ const StyledIconButton = styled(IconButton, {
89
+ base: {
90
+ position: "absolute",
91
+ bottom: "-medium",
92
+ zIndex: "base",
93
+ "& svg": {
94
+ transitionProperty: "transform",
95
+ transitionTimingFunction: "ease-in-out",
96
+ transitionDuration: "fast",
97
+ },
98
+ _open: {
99
+ "& svg": {
100
+ transform: "rotate(180deg)",
101
+ },
102
+ },
103
+ _print: {
104
+ display: "none",
105
+ },
106
+ },
107
+ });
116
108
 
117
- const expandedContentStyle = css`
118
- max-height: 500vh;
119
- &:after {
120
- opacity: 0;
121
- z-index: ${stackOrder.hide};
122
- }
123
- `;
109
+ // TODO: Consider moving the open trigger depending on whether the content is open or closed.
124
110
 
125
111
  const FactBox = forwardRef<HTMLElement, Props>(
126
112
  ({ children, open, onOpenChange, defaultOpen = false, ...rest }, ref) => {
127
113
  const { t } = useTranslation();
128
- const [isOpen, setIsOpen] = useState(defaultOpen);
114
+ const [state, setState] = useState<"open" | "closed">(defaultOpen ? "open" : "closed");
115
+ const contentId = useId();
116
+ // Inert has existed since early 2023. It allows us to disable tabindex inside the content if it is closed, allowing us to be accessible for users with newish browsers. React 18 removes this because it doesn't recognize the attribute. This is a workaround for that.
117
+ // TODO: Remove this hack when we upgrade to React 19.
118
+ const inertAttribute = useMemo(() => {
119
+ return state === "closed" ? { inert: "" } : {};
120
+ }, [state]);
129
121
 
130
122
  useEffect(() => {
131
123
  if (open !== undefined) {
132
- setIsOpen(open);
124
+ setState(open ? "open" : "closed");
133
125
  }
134
126
  }, [open]);
135
127
 
136
128
  const onClick = useCallback(() => {
137
- const newOpen = !isOpen;
138
- setIsOpen(newOpen);
139
- onOpenChange?.(newOpen);
140
- }, [isOpen, onOpenChange]);
129
+ const newState = state === "open" ? "closed" : "open";
130
+ setState(newState);
131
+ onOpenChange?.(newState === "open");
132
+ }, [state, onOpenChange]);
141
133
 
142
134
  return (
143
- <StyledAside {...rest} css={[isOpen ? expandedStyle : undefined]} ref={ref}>
144
- <StyledDiv css={isOpen ? expandedContentStyle : undefined}>{children}</StyledDiv>
145
- <StyledIconButton onClick={onClick} aria-label={t(`factbox.${isOpen ? "close" : "open"}`)}>
146
- {isOpen ? <ChevronUp /> : <ChevronDown />}
135
+ <StyledAside data-state={state} {...rest} ref={ref}>
136
+ <StyledIconButton
137
+ data-state={state}
138
+ onClick={onClick}
139
+ aria-expanded={state === "open"}
140
+ aria-controls={contentId}
141
+ aria-label={t(`factbox.${state === "open" ? "close" : "open"}`)}
142
+ >
143
+ <ChevronDown />
147
144
  </StyledIconButton>
145
+ <StyledContent id={contentId} data-state={state} aria-hidden={state === "closed"} {...inertAttribute}>
146
+ {children}
147
+ </StyledContent>
148
148
  </StyledAside>
149
149
  );
150
150
  },
@@ -6,16 +6,10 @@
6
6
  *
7
7
  */
8
8
 
9
- import styled from "@emotion/styled";
10
9
  import { Meta, StoryObj } from "@storybook/react";
11
- import { spacing } from "@ndla/core";
12
- import { Heading, Text } from "@ndla/typography";
10
+ import { Button, UnOrderedList, OrderedList } from "@ndla/primitives";
13
11
  import FactBox from "./FactBox";
14
12
 
15
- const Wrapper = styled.div`
16
- padding: ${spacing.normal};
17
- `;
18
-
19
13
  /**
20
14
  *For alt nytt innhold på ndla.no skal ikke flytende høyrespalte benyttes. I stedet benytter vi faktabokser innenfor innholdsspalten.
21
15
  */
@@ -26,32 +20,54 @@ export default {
26
20
  paramemeters: {
27
21
  inlineStories: true,
28
22
  },
29
- decorators: [
30
- (Story) => (
31
- <Wrapper>
32
- <Story />
33
- </Wrapper>
34
- ),
35
- ],
23
+ decorators: [(Story) => <Story />],
36
24
  args: {
37
25
  children: (
38
26
  <>
39
- <Heading element="h2" headingStyle="h2">
40
- Faktaboks
41
- </Heading>
42
- <Text textStyle="content">
43
- En faktaboks kan inneholde punktlister eller korte fakta som er relevant for artikkelens innhold.
44
- </Text>
45
- <Text textStyle="content">
27
+ <h2>Faktaboks</h2>
28
+ <p>Innhold kan først nås etter at boksen er åpnet.</p>
29
+ <Button>Klikk meg</Button>
30
+ <p>En faktaboks kan inneholde punktlister eller korte fakta som er relevant for artikkelens innhold.</p>
31
+ <p>
46
32
  Det anbefales å ikke ha for mye innhold i faktaboks, slik at lese-konteksten i størst mulig grad beholdes.
47
- </Text>
48
- <Heading element="h2" headingStyle="h2">
49
- Enkel tittel
50
- </Heading>
51
- <Text textStyle="content">
33
+ </p>
34
+ <h2>Enkel tittel</h2>
35
+ <p>
52
36
  Faktaboksen kan også brukes til å oppsummere innhold i slutten av en artikkel, og den kan inneholde
53
37
  lisensiering om eksternt innhold er brukt.
54
- </Text>
38
+ </p>
39
+ <UnOrderedList>
40
+ <li>Punkt 1</li>
41
+ <li>Punkt 2</li>
42
+ <li>
43
+ <UnOrderedList>
44
+ <li>Punkt 1.1</li>
45
+ <li>Punkt 1.2</li>
46
+ <li>
47
+ <UnOrderedList>
48
+ <li>Punkt 1.1.1</li>
49
+ <li>Punkt 1.2.1</li>
50
+ </UnOrderedList>
51
+ </li>
52
+ </UnOrderedList>
53
+ </li>
54
+ </UnOrderedList>
55
+ <OrderedList>
56
+ <li>Punkt 1</li>
57
+ <li>Punkt 2</li>
58
+ <li>
59
+ <OrderedList>
60
+ <li>Punkt 1.1</li>
61
+ <li>Punkt 1.2</li>
62
+ <li>
63
+ <OrderedList>
64
+ <li>Punkt 1.1.1</li>
65
+ <li>Punkt 1.2.1</li>
66
+ </OrderedList>
67
+ </li>
68
+ </OrderedList>
69
+ </li>
70
+ </OrderedList>
55
71
  </>
56
72
  ),
57
73
  },
@@ -9,6 +9,7 @@
9
9
  import { Meta, StoryObj } from "@storybook/react";
10
10
  import File from "./File";
11
11
  import FileList from "./FileList";
12
+ import PdfFile from "./PdfFile";
12
13
 
13
14
  export default {
14
15
  title: "Components/FileList",
@@ -38,7 +39,11 @@ export const SeveralFiles: StoryObj<typeof File> = {
38
39
  render: () => (
39
40
  <FileList>
40
41
  <File title="Fil 1" url="https://ndla.no/1" fileExists fileType="mp4" />
41
- <File title="Fil 2" url="https://ndla.no/2" fileExists={false} fileType="pdf" />
42
+ <File title="Fil 2" url="https://ndla.no/2" fileExists={false} fileType="png" />
43
+ <PdfFile
44
+ title="Fil 3"
45
+ url="https://api.test.ndla.no/files/131789/krypteringsaktivitet_-_til_fiendegruppe_bm.pdf"
46
+ />
42
47
  <File title="Fil 3" url="https://ndla.no/3" fileExists fileType="docx" />
43
48
  <File title="Fil 4" url="https://ndla.no/4" fileExists fileType="docx" />
44
49
  </FileList>
@@ -6,19 +6,36 @@
6
6
  *
7
7
  */
8
8
 
9
- import { Figure } from "../Figure";
9
+ import { Heading, Figure } from "@ndla/primitives";
10
+ import { styled } from "@ndla/styled-system/jsx";
10
11
 
11
12
  interface Props {
12
13
  title: string;
13
14
  url: string;
14
15
  }
15
16
 
17
+ const StyledIframe = styled("iframe", {
18
+ base: {
19
+ width: "100%",
20
+ },
21
+ });
22
+
23
+ const StyledFigure = styled(Figure, {
24
+ base: {
25
+ display: "flex",
26
+ flexDirection: "column",
27
+ gap: "xsmall",
28
+ },
29
+ });
30
+
16
31
  const PdfFile = ({ title, url }: Props) => {
17
32
  return (
18
- <Figure>
19
- <h2>{title}</h2>
20
- <iframe title={title} height="1050" src={url} />
21
- </Figure>
33
+ <StyledFigure>
34
+ <Heading asChild consumeCss textStyle="title.medium">
35
+ <h4>{title}</h4>
36
+ </Heading>
37
+ <StyledIframe title={title} height="1050" src={url} />
38
+ </StyledFigure>
22
39
  );
23
40
  };
24
41
 
@@ -65,6 +65,32 @@ export const GlossStory: StoryFn<typeof Gloss> = ({ ...args }) => {
65
65
  return <Gloss {...args} />;
66
66
  };
67
67
 
68
+ export const Bordered: StoryObj<typeof Gloss> = {
69
+ args: {
70
+ variant: "bordered",
71
+ },
72
+ };
73
+
74
+ export const NoExamples: StoryObj<typeof Gloss> = {
75
+ args: {
76
+ title: {
77
+ title: "Å angripe",
78
+ language: "nb",
79
+ },
80
+ glossData: {
81
+ gloss: "angreifen",
82
+ wordClass: wordClass.verb,
83
+ originalLanguage: "de",
84
+ transcriptions: {},
85
+ examples: [],
86
+ },
87
+ audio: {
88
+ title: "",
89
+ src: "",
90
+ },
91
+ },
92
+ };
93
+
68
94
  export const GlossChineseStory: StoryObj<typeof Gloss> = {
69
95
  args: {
70
96
  title: {
@@ -103,6 +129,86 @@ export const GlossChineseStory: StoryObj<typeof Gloss> = {
103
129
  },
104
130
  };
105
131
 
132
+ export const BigExample: StoryObj<typeof Gloss> = {
133
+ args: {
134
+ title: {
135
+ title: "(spørsmålspartikkel); hva med…?",
136
+ language: "nb",
137
+ },
138
+ audio: {
139
+ src: "https://api.ndla.no/audio/files/ne.mp3",
140
+ title: "Spill av",
141
+ },
142
+ glossData: {
143
+ gloss: "呢",
144
+ wordClass: "particle",
145
+ originalLanguage: "zh",
146
+ transcriptions: {
147
+ pinyin: "ne",
148
+ },
149
+ examples: [
150
+ [
151
+ {
152
+ example: "我叫马红,你呢?//我叫馬紅,你呢?",
153
+ language: "zh",
154
+ transcriptions: {
155
+ pinyin: "Wǒ jiào Mǎ Hóng, nǐ ne?",
156
+ },
157
+ },
158
+ {
159
+ example: "Jeg heter Ma Hong, hva med deg?",
160
+ language: "nb",
161
+ transcriptions: {},
162
+ },
163
+ {
164
+ example: "Eg heiter Ma Hong, kva med deg?",
165
+ language: "nn",
166
+ transcriptions: {},
167
+ },
168
+ ],
169
+ [
170
+ {
171
+ example: "我姓王,你呢?",
172
+ language: "zh",
173
+ transcriptions: {
174
+ pinyin: "Wǒ xìng Wáng, nǐ ne?",
175
+ },
176
+ },
177
+ {
178
+ example: "Jeg heter Wang til etternavn, hva med deg?",
179
+ language: "nb",
180
+ transcriptions: {},
181
+ },
182
+ {
183
+ example: "Eg heiter Wang til etternamn, kva med deg?",
184
+ language: "nn",
185
+ transcriptions: {},
186
+ },
187
+ ],
188
+ [
189
+ {
190
+ example: "我是老师,你呢?//我是老師,你呢?",
191
+ language: "zh",
192
+ transcriptions: {
193
+ pinyin: "Wǒ shì lǎoshī, nǐ ne?",
194
+ },
195
+ },
196
+ {
197
+ example: "Jeg er lærer, hva med deg?",
198
+ language: "nb",
199
+ transcriptions: {},
200
+ },
201
+ {
202
+ example: "Eg er lærar, kva med deg?",
203
+ language: "nn",
204
+ transcriptions: {},
205
+ },
206
+ ],
207
+ ],
208
+ },
209
+ },
210
+ };
211
+
106
212
  const GlossExampleText = {
107
213
  example: "我叫马红",
108
214
  language: "zh",
@@ -112,5 +218,5 @@ const GlossExampleText = {
112
218
  };
113
219
 
114
220
  export const GlossExampleStory: StoryFn<typeof Gloss> = () => {
115
- return <GlossExample originalLanguage="zh" index={0} example={GlossExampleText} isStandalone />;
221
+ return <GlossExample originalLanguage="zh" examples={[GlossExampleText]} />;
116
222
  };