@ndla/ui 55.0.13-alpha.0 → 55.0.15-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 (337) hide show
  1. package/dist/panda.buildinfo.json +142 -1
  2. package/dist/styles.css +597 -0
  3. package/es/Article/ArticleByline.js +7 -7
  4. package/es/Article/ArticleParagraph.js +11 -13
  5. package/es/AudioPlayer/AudioPlayer.js +1 -0
  6. package/es/CampaignBlock/CampaignBlock.js +103 -68
  7. package/es/Concept/Concept.js +69 -0
  8. package/es/ContactBlock/ContactBlock.js +17 -17
  9. package/es/ContentTypeBadge/ContentTypeBadgeNew.js +48 -0
  10. package/es/Embed/AudioEmbed.js +1 -2
  11. package/es/Embed/BrightcoveEmbed.js +13 -25
  12. package/es/Embed/ConceptEmbed.js +57 -301
  13. package/es/Embed/ConceptListEmbed.js +18 -24
  14. package/es/Embed/ContentLinkEmbed.js +10 -10
  15. package/es/Embed/CopyrightEmbed.js +3 -21
  16. package/es/Embed/ExternalEmbed.js +10 -18
  17. package/es/Embed/FootnoteEmbed.js +11 -8
  18. package/es/Embed/GlossEmbed.js +68 -0
  19. package/es/Embed/H5pEmbed.js +19 -19
  20. package/es/Embed/IframeEmbed.js +9 -6
  21. package/es/Embed/InlineTriggerButton.js +70 -0
  22. package/es/Embed/UnknownEmbed.js +9 -9
  23. package/es/Embed/UuDisclaimerEmbed.js +14 -25
  24. package/es/Embed/index.js +1 -3
  25. package/es/ErrorMessage/ErrorMessage.js +41 -22
  26. package/es/ErrorMessage/ErrorResourceAccessDenied.js +8 -6
  27. package/es/FactBox/FactBox.js +118 -47
  28. package/es/FileList/PdfFile.js +23 -5
  29. package/es/Gloss/Gloss.js +116 -86
  30. package/es/Gloss/GlossExample.js +49 -51
  31. package/es/LicenseByline/EmbedByline.js +143 -33
  32. package/es/LicenseByline/LicenseLink.js +16 -9
  33. package/es/LicenseByline/index.js +2 -2
  34. package/es/LinkBlock/LinkBlock.js +61 -33
  35. package/es/LinkBlock/LinkBlockSection.js +9 -6
  36. package/es/Logo/Logo.js +1 -30
  37. package/es/RelatedArticleList/RelatedArticleList.js +70 -87
  38. package/es/ResourceBox/ResourceBox.js +65 -37
  39. package/es/TagSelector/TagSelector.js +124 -131
  40. package/es/i18n/index.js +2 -1
  41. package/es/i18n/useComponentTranslations.js +83 -0
  42. package/es/index.js +4 -12
  43. package/es/locale/messages-en.js +30 -4
  44. package/es/locale/messages-nb.js +30 -4
  45. package/es/locale/messages-nn.js +30 -4
  46. package/es/locale/messages-se.js +30 -4
  47. package/es/locale/messages-sma.js +30 -4
  48. package/es/model/ContentType.js +3 -0
  49. package/es/styles.css +597 -0
  50. package/lib/Article/ArticleByline.js +8 -8
  51. package/lib/Article/ArticleParagraph.js +12 -14
  52. package/lib/AudioPlayer/AudioPlayer.js +1 -0
  53. package/lib/CampaignBlock/CampaignBlock.d.ts +2 -2
  54. package/lib/CampaignBlock/CampaignBlock.js +106 -68
  55. package/lib/Concept/Concept.d.ts +18 -0
  56. package/lib/Concept/Concept.js +75 -0
  57. package/lib/ContactBlock/ContactBlock.js +18 -18
  58. package/lib/ContentTypeBadge/ContentTypeBadgeNew.d.ts +17 -0
  59. package/lib/ContentTypeBadge/ContentTypeBadgeNew.js +56 -0
  60. package/lib/Embed/AudioEmbed.js +2 -3
  61. package/lib/Embed/BrightcoveEmbed.d.ts +1 -2
  62. package/lib/Embed/BrightcoveEmbed.js +16 -26
  63. package/lib/Embed/ConceptEmbed.d.ts +15 -21
  64. package/lib/Embed/ConceptEmbed.js +58 -301
  65. package/lib/Embed/ConceptListEmbed.js +21 -26
  66. package/lib/Embed/ContentLinkEmbed.js +10 -11
  67. package/lib/Embed/CopyrightEmbed.js +5 -22
  68. package/lib/Embed/ExternalEmbed.d.ts +1 -2
  69. package/lib/Embed/ExternalEmbed.js +13 -19
  70. package/lib/Embed/FootnoteEmbed.js +11 -9
  71. package/lib/Embed/GlossEmbed.d.ts +13 -0
  72. package/lib/Embed/GlossEmbed.js +76 -0
  73. package/lib/Embed/H5pEmbed.d.ts +1 -2
  74. package/lib/Embed/H5pEmbed.js +21 -19
  75. package/lib/Embed/IframeEmbed.d.ts +1 -2
  76. package/lib/Embed/IframeEmbed.js +11 -8
  77. package/lib/Embed/InlineTriggerButton.d.ts +11 -0
  78. package/lib/Embed/InlineTriggerButton.js +76 -0
  79. package/lib/Embed/UnknownEmbed.js +9 -10
  80. package/lib/Embed/UuDisclaimerEmbed.js +16 -26
  81. package/lib/Embed/index.d.ts +2 -3
  82. package/lib/Embed/index.js +2 -9
  83. package/lib/ErrorMessage/ErrorMessage.js +40 -23
  84. package/lib/ErrorMessage/ErrorResourceAccessDenied.js +7 -6
  85. package/lib/FactBox/FactBox.d.ts +0 -1
  86. package/lib/FactBox/FactBox.js +119 -46
  87. package/lib/FileList/PdfFile.js +23 -5
  88. package/lib/Gloss/Gloss.d.ts +10 -2
  89. package/lib/Gloss/Gloss.js +116 -85
  90. package/lib/Gloss/GlossExample.d.ts +3 -5
  91. package/lib/Gloss/GlossExample.js +49 -52
  92. package/lib/LicenseByline/EmbedByline.d.ts +2 -4
  93. package/lib/LicenseByline/EmbedByline.js +145 -35
  94. package/lib/LicenseByline/LicenseLink.d.ts +2 -2
  95. package/lib/LicenseByline/LicenseLink.js +16 -9
  96. package/lib/LicenseByline/index.d.ts +2 -2
  97. package/lib/LicenseByline/index.js +4 -5
  98. package/lib/LinkBlock/LinkBlock.js +62 -34
  99. package/lib/LinkBlock/LinkBlockSection.js +9 -7
  100. package/lib/Logo/Logo.d.ts +1 -3
  101. package/lib/Logo/Logo.js +2 -30
  102. package/lib/RelatedArticleList/RelatedArticleList.d.ts +4 -4
  103. package/lib/RelatedArticleList/RelatedArticleList.js +74 -90
  104. package/lib/ResourceBox/ResourceBox.js +64 -37
  105. package/lib/TagSelector/TagSelector.d.ts +27 -12
  106. package/lib/TagSelector/TagSelector.js +126 -131
  107. package/lib/i18n/index.d.ts +1 -0
  108. package/lib/i18n/index.js +20 -1
  109. package/lib/i18n/useComponentTranslations.d.ts +14 -0
  110. package/lib/i18n/useComponentTranslations.js +93 -0
  111. package/lib/index.d.ts +5 -15
  112. package/lib/index.js +70 -102
  113. package/lib/locale/messages-en.d.ts +26 -0
  114. package/lib/locale/messages-en.js +30 -4
  115. package/lib/locale/messages-nb.d.ts +26 -0
  116. package/lib/locale/messages-nb.js +30 -4
  117. package/lib/locale/messages-nn.d.ts +26 -0
  118. package/lib/locale/messages-nn.js +30 -4
  119. package/lib/locale/messages-se.d.ts +26 -0
  120. package/lib/locale/messages-se.js +30 -4
  121. package/lib/locale/messages-sma.d.ts +26 -0
  122. package/lib/locale/messages-sma.js +30 -4
  123. package/lib/model/ContentType.d.ts +3 -0
  124. package/lib/model/ContentType.js +4 -1
  125. package/lib/styles.css +597 -0
  126. package/package.json +11 -13
  127. package/src/Article/ArticleByline.tsx +1 -1
  128. package/src/Article/ArticleParagraph.tsx +11 -9
  129. package/src/AudioPlayer/AudioPlayer.tsx +1 -0
  130. package/src/CampaignBlock/CampaignBlock.tsx +92 -55
  131. package/src/Concept/Concept.stories.tsx +142 -0
  132. package/src/Concept/Concept.tsx +73 -0
  133. package/src/ContactBlock/ContactBlock.tsx +1 -1
  134. package/src/ContentTypeBadge/ContentTypeBadgeNew.stories.tsx +70 -0
  135. package/src/ContentTypeBadge/ContentTypeBadgeNew.tsx +69 -0
  136. package/src/Embed/AudioEmbed.tsx +2 -2
  137. package/src/Embed/BrightcoveEmbed.stories.tsx +0 -3
  138. package/src/Embed/BrightcoveEmbed.tsx +18 -20
  139. package/src/Embed/ConceptEmbed.stories.tsx +1 -105
  140. package/src/Embed/ConceptEmbed.tsx +60 -385
  141. package/src/Embed/ConceptListEmbed.tsx +20 -19
  142. package/src/Embed/ContentLinkEmbed.tsx +8 -10
  143. package/src/Embed/CopyrightEmbed.tsx +1 -11
  144. package/src/Embed/ExternalEmbed.tsx +14 -17
  145. package/src/Embed/FootnoteEmbed.stories.tsx +2 -5
  146. package/src/Embed/FootnoteEmbed.tsx +13 -16
  147. package/src/Embed/GlossEmbed.stories.tsx +140 -0
  148. package/src/Embed/GlossEmbed.tsx +64 -0
  149. package/src/Embed/H5pEmbed.tsx +22 -16
  150. package/src/Embed/IframeEmbed.tsx +12 -6
  151. package/src/Embed/InlineTriggerButton.tsx +72 -0
  152. package/src/Embed/UnknownEmbed.tsx +6 -7
  153. package/src/Embed/UuDisclaimerEmbed.stories.tsx +4 -4
  154. package/src/Embed/UuDisclaimerEmbed.tsx +17 -25
  155. package/src/Embed/index.ts +2 -3
  156. package/src/ErrorMessage/ErrorMessage.tsx +40 -29
  157. package/src/ErrorMessage/ErrorResourceAccessDenied.tsx +8 -6
  158. package/src/FactBox/FactBox.tsx +115 -115
  159. package/src/FactBox/Factbox.stories.tsx +43 -27
  160. package/src/FileList/FileList.stories.tsx +6 -1
  161. package/src/FileList/PdfFile.tsx +22 -5
  162. package/src/Gloss/Gloss.stories.tsx +107 -1
  163. package/src/Gloss/Gloss.tsx +143 -156
  164. package/src/Gloss/GlossExample.tsx +51 -77
  165. package/src/LicenseByline/EmbedByline.stories.tsx +9 -4
  166. package/src/LicenseByline/EmbedByline.tsx +139 -53
  167. package/src/LicenseByline/LicenseLink.tsx +15 -15
  168. package/src/LicenseByline/index.tsx +2 -2
  169. package/src/LinkBlock/LinkBlock.stories.tsx +8 -10
  170. package/src/LinkBlock/LinkBlock.tsx +54 -59
  171. package/src/LinkBlock/LinkBlockSection.tsx +9 -12
  172. package/src/Logo/Logo.stories.tsx +0 -1
  173. package/src/Logo/Logo.tsx +2 -30
  174. package/src/RelatedArticleList/RelatedArticleList.tsx +69 -88
  175. package/src/ResourceBox/ResourceBox.tsx +63 -59
  176. package/src/TagSelector/TagSelector.stories.tsx +92 -68
  177. package/src/TagSelector/TagSelector.tsx +161 -126
  178. package/src/i18n/index.ts +5 -0
  179. package/src/i18n/useComponentTranslations.ts +72 -0
  180. package/src/index.ts +23 -19
  181. package/src/locale/messages-en.ts +28 -2
  182. package/src/locale/messages-nb.ts +28 -2
  183. package/src/locale/messages-nn.ts +28 -2
  184. package/src/locale/messages-se.ts +28 -2
  185. package/src/locale/messages-sma.ts +28 -2
  186. package/src/model/ContentType.ts +3 -0
  187. package/es/DefinitionList/DefinitionDescription.js +0 -28
  188. package/es/DefinitionList/DefinitionTerm.js +0 -28
  189. package/es/DefinitionList/index.js +0 -10
  190. package/es/Embed/conceptComponents.js +0 -155
  191. package/es/ExpandableBox/ExpandableBox.js +0 -29
  192. package/es/ExpandableBox/index.js +0 -9
  193. package/es/Figure/Figure.js +0 -73
  194. package/es/Figure/index.js +0 -9
  195. package/es/FramedContent/FramedContent.js +0 -28
  196. package/es/FramedContent/index.js +0 -10
  197. package/es/Image/Image.js +0 -99
  198. package/es/Image/ImageLink.js +0 -39
  199. package/es/Image/index.js +0 -12
  200. package/es/LetterFilter/LetterFilter.js +0 -54
  201. package/es/LetterFilter/alphabet.js +0 -9
  202. package/es/LetterFilter/index.js +0 -10
  203. package/es/LicenseByline/LicenseDescription.js +0 -63
  204. package/es/List/OrderedList.js +0 -41
  205. package/es/List/UnOrderedList.js +0 -28
  206. package/es/List/index.js +0 -10
  207. package/es/Notion/Notion.js +0 -76
  208. package/es/Notion/NotionImage.js +0 -46
  209. package/es/Notion/index.js +0 -9
  210. package/es/Table/Table.js +0 -141
  211. package/es/Table/index.js +0 -11
  212. package/es/TagSelector/Control.js +0 -28
  213. package/es/TagSelector/DropdownIndicator.js +0 -60
  214. package/es/TagSelector/Input.js +0 -22
  215. package/es/TagSelector/Menu.js +0 -27
  216. package/es/TagSelector/MenuList.js +0 -28
  217. package/es/TagSelector/Option.js +0 -60
  218. package/es/TagSelector/SelectContainer.js +0 -27
  219. package/es/TagSelector/ValueButton.js +0 -53
  220. package/es/TagSelector/ariaMessages.js +0 -94
  221. package/es/TagSelector/index.js +0 -10
  222. package/es/TagSelector/types.js +0 -1
  223. package/lib/DefinitionList/DefinitionDescription.d.ts +0 -10
  224. package/lib/DefinitionList/DefinitionDescription.js +0 -35
  225. package/lib/DefinitionList/DefinitionTerm.d.ts +0 -10
  226. package/lib/DefinitionList/DefinitionTerm.js +0 -35
  227. package/lib/DefinitionList/index.d.ts +0 -9
  228. package/lib/DefinitionList/index.js +0 -20
  229. package/lib/Embed/conceptComponents.d.ts +0 -40
  230. package/lib/Embed/conceptComponents.js +0 -163
  231. package/lib/ExpandableBox/ExpandableBox.d.ts +0 -15
  232. package/lib/ExpandableBox/ExpandableBox.js +0 -37
  233. package/lib/ExpandableBox/index.d.ts +0 -8
  234. package/lib/ExpandableBox/index.js +0 -18
  235. package/lib/Figure/Figure.d.ts +0 -16
  236. package/lib/Figure/Figure.js +0 -81
  237. package/lib/Figure/index.d.ts +0 -9
  238. package/lib/Figure/index.js +0 -13
  239. package/lib/FramedContent/FramedContent.d.ts +0 -12
  240. package/lib/FramedContent/FramedContent.js +0 -35
  241. package/lib/FramedContent/index.d.ts +0 -9
  242. package/lib/FramedContent/index.js +0 -16
  243. package/lib/Image/Image.d.ts +0 -38
  244. package/lib/Image/Image.js +0 -105
  245. package/lib/Image/ImageLink.d.ts +0 -18
  246. package/lib/Image/ImageLink.js +0 -44
  247. package/lib/Image/index.d.ts +0 -12
  248. package/lib/Image/index.js +0 -30
  249. package/lib/LetterFilter/LetterFilter.d.ts +0 -14
  250. package/lib/LetterFilter/LetterFilter.js +0 -61
  251. package/lib/LetterFilter/alphabet.d.ts +0 -8
  252. package/lib/LetterFilter/alphabet.js +0 -15
  253. package/lib/LetterFilter/index.d.ts +0 -9
  254. package/lib/LetterFilter/index.js +0 -16
  255. package/lib/LicenseByline/LicenseDescription.d.ts +0 -15
  256. package/lib/LicenseByline/LicenseDescription.js +0 -70
  257. package/lib/List/OrderedList.d.ts +0 -16
  258. package/lib/List/OrderedList.js +0 -48
  259. package/lib/List/UnOrderedList.d.ts +0 -10
  260. package/lib/List/UnOrderedList.js +0 -35
  261. package/lib/List/index.d.ts +0 -9
  262. package/lib/List/index.js +0 -20
  263. package/lib/Notion/Notion.d.ts +0 -20
  264. package/lib/Notion/Notion.js +0 -82
  265. package/lib/Notion/NotionImage.d.ts +0 -13
  266. package/lib/Notion/NotionImage.js +0 -54
  267. package/lib/Notion/index.d.ts +0 -8
  268. package/lib/Notion/index.js +0 -13
  269. package/lib/Table/Table.d.ts +0 -19
  270. package/lib/Table/Table.js +0 -145
  271. package/lib/Table/index.d.ts +0 -10
  272. package/lib/Table/index.js +0 -23
  273. package/lib/TagSelector/Control.d.ts +0 -11
  274. package/lib/TagSelector/Control.js +0 -35
  275. package/lib/TagSelector/DropdownIndicator.d.ts +0 -11
  276. package/lib/TagSelector/DropdownIndicator.js +0 -64
  277. package/lib/TagSelector/Input.d.ts +0 -12
  278. package/lib/TagSelector/Input.js +0 -29
  279. package/lib/TagSelector/Menu.d.ts +0 -12
  280. package/lib/TagSelector/Menu.js +0 -34
  281. package/lib/TagSelector/MenuList.d.ts +0 -16
  282. package/lib/TagSelector/MenuList.js +0 -35
  283. package/lib/TagSelector/Option.d.ts +0 -12
  284. package/lib/TagSelector/Option.js +0 -67
  285. package/lib/TagSelector/SelectContainer.d.ts +0 -11
  286. package/lib/TagSelector/SelectContainer.js +0 -34
  287. package/lib/TagSelector/ValueButton.d.ts +0 -20
  288. package/lib/TagSelector/ValueButton.js +0 -60
  289. package/lib/TagSelector/ariaMessages.d.ts +0 -16
  290. package/lib/TagSelector/ariaMessages.js +0 -101
  291. package/lib/TagSelector/index.d.ts +0 -11
  292. package/lib/TagSelector/index.js +0 -13
  293. package/lib/TagSelector/types.d.ts +0 -11
  294. package/lib/TagSelector/types.js +0 -5
  295. package/src/DefinitionList/DefinitionDescription.tsx +0 -26
  296. package/src/DefinitionList/DefinitionTerm.tsx +0 -26
  297. package/src/DefinitionList/index.tsx +0 -10
  298. package/src/Embed/conceptComponents.tsx +0 -293
  299. package/src/ExpandableBox/ExpandableBox.stories.tsx +0 -41
  300. package/src/ExpandableBox/ExpandableBox.tsx +0 -23
  301. package/src/ExpandableBox/index.ts +0 -9
  302. package/src/Figure/Figure.tsx +0 -167
  303. package/src/Figure/index.ts +0 -11
  304. package/src/FramedContent/FramedContent.stories.tsx +0 -152
  305. package/src/FramedContent/FramedContent.tsx +0 -26
  306. package/src/FramedContent/index.ts +0 -10
  307. package/src/Image/Image.stories.tsx +0 -61
  308. package/src/Image/Image.tsx +0 -147
  309. package/src/Image/ImageLink.tsx +0 -37
  310. package/src/Image/index.ts +0 -14
  311. package/src/LetterFilter/LetterFilter.stories.tsx +0 -29
  312. package/src/LetterFilter/LetterFilter.tsx +0 -78
  313. package/src/LetterFilter/alphabet.ts +0 -39
  314. package/src/LetterFilter/index.ts +0 -11
  315. package/src/LicenseByline/LicenseDescription.tsx +0 -100
  316. package/src/List/OrderedList.stories.tsx +0 -135
  317. package/src/List/OrderedList.tsx +0 -158
  318. package/src/List/UnOrderedList.tsx +0 -43
  319. package/src/List/UnorderedList.stories.tsx +0 -72
  320. package/src/List/index.ts +0 -10
  321. package/src/Notion/Notion.tsx +0 -96
  322. package/src/Notion/NotionImage.tsx +0 -64
  323. package/src/Notion/index.ts +0 -9
  324. package/src/Table/Table.stories.tsx +0 -738
  325. package/src/Table/Table.tsx +0 -284
  326. package/src/Table/index.ts +0 -12
  327. package/src/TagSelector/Control.tsx +0 -34
  328. package/src/TagSelector/DropdownIndicator.tsx +0 -55
  329. package/src/TagSelector/Input.tsx +0 -31
  330. package/src/TagSelector/Menu.tsx +0 -38
  331. package/src/TagSelector/MenuList.tsx +0 -30
  332. package/src/TagSelector/Option.tsx +0 -58
  333. package/src/TagSelector/SelectContainer.tsx +0 -31
  334. package/src/TagSelector/ValueButton.tsx +0 -47
  335. package/src/TagSelector/ariaMessages.ts +0 -96
  336. package/src/TagSelector/index.ts +0 -14
  337. package/src/TagSelector/types.ts +0 -12
@@ -1,142 +1,177 @@
1
1
  /**
2
- * Copyright (c) 2022-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.
6
6
  *
7
7
  */
8
8
 
9
- import { KeyboardEvent, useMemo, useState } from "react";
10
- import { useTranslation } from "react-i18next";
11
- import { MultiValue, StylesConfig } from "react-select";
12
- import CreatableSelect from "react-select/creatable";
13
- import styled from "@emotion/styled";
14
- import { colors, fonts, spacing, utils } from "@ndla/core";
15
- import { createAriaMessages } from "./ariaMessages";
16
- import Control from "./Control";
17
- import DropdownIndicator from "./DropdownIndicator";
18
- import Input from "./Input";
19
- import Menu from "./Menu";
20
- import MenuList from "./MenuList";
21
- import Option from "./Option";
22
- import SelectContainer from "./SelectContainer";
23
- import { TagType } from "./types";
24
- import ValueButton from "./ValueButton";
25
-
26
- const styles: StylesConfig<TagType, true> = {
27
- menu: () => ({}),
28
- dropdownIndicator: () => ({}),
29
- placeholder: (provided) => ({
30
- ...provided,
31
- padding: `0 ${spacing.small}`,
32
- color: colors.brand.primary,
33
- margin: 0,
34
- }),
35
- valueContainer: (provided) => ({ ...provided, padding: 0 }),
36
- indicatorSeparator: () => ({
37
- display: "none",
38
- }),
39
- indicatorsContainer: (provided) => ({
40
- ...provided,
41
- alignSelf: "flex-end",
42
- }),
43
- };
9
+ import { forwardRef, useEffect, useId, useRef } from "react";
10
+ import type { ComboboxCollectionItem } from "@ark-ui/react";
11
+ import { ComboboxContext, useTagsInputContext } from "@ark-ui/react";
12
+ import { Cross } from "@ndla/icons/action";
13
+ import {
14
+ ComboboxClearTrigger,
15
+ ComboboxControl,
16
+ ComboboxControlProps,
17
+ ComboboxInput,
18
+ ComboboxInputProps,
19
+ ComboboxLabel,
20
+ ComboboxRoot,
21
+ ComboboxRootProps,
22
+ ComboboxTrigger,
23
+ TagsInputControl,
24
+ TagsInputControlProps,
25
+ TagsInputInput,
26
+ TagsInputInputProps,
27
+ TagsInputItem,
28
+ TagsInputItemDeleteTrigger,
29
+ TagsInputItemPreview,
30
+ TagsInputItemText,
31
+ TagsInputRoot,
32
+ TagsInputRootProps,
33
+ TagsInputItemInput,
34
+ } from "@ndla/primitives";
35
+ import { contains } from "@ndla/util";
44
36
 
45
- const StyledTagSelector = styled.div`
46
- display: flex;
47
- flex-direction: column;
48
- flex: 1;
49
- overflow: hidden;
50
- `;
51
-
52
- interface StyledLabelProps {
53
- labelHidden?: boolean;
54
- }
55
-
56
- const StyledLabel = styled.label<StyledLabelProps>`
57
- font-weight: ${fonts.weight.semibold};
58
- ${(p) => p.labelHidden && utils.labelHidden}
59
- `;
60
-
61
- interface Props {
62
- label: string;
63
- tags: string[];
64
- selected: string[];
65
- onChange: (tags: string[]) => void;
66
- onCreateTag: (name: string) => void;
67
- className?: string;
68
- labelHidden?: boolean;
69
- }
70
-
71
- const TagSelector = ({
72
- selected: _selected,
73
- tags: _tags,
74
- onChange,
75
- onCreateTag,
76
- className,
77
- label,
78
- labelHidden,
79
- }: Props) => {
80
- const { t } = useTranslation();
81
- const [input, setInput] = useState("");
82
- const tags = useMemo(() => _tags.map((tag) => ({ value: tag, label: tag })), [_tags]);
83
- const selected = useMemo(() => _selected.map((tag) => ({ value: tag, label: tag })), [_selected]);
84
-
85
- const handleSpaceClick = (e: KeyboardEvent<HTMLDivElement>) => {
86
- if (e.key === " ") {
87
- e.preventDefault();
88
- if (!_selected.find((tag) => tag === input) && input !== "") {
89
- onChange(_selected.concat(input));
90
- }
91
- setInput("");
92
- }
93
- };
37
+ export type TagSelectorRootProps<T extends ComboboxCollectionItem> = ComboboxRootProps<T> & TagsInputRootProps;
94
38
 
95
- const handleChange = (tags: MultiValue<TagType>) => {
96
- onChange(tags.map((tag) => tag.value));
39
+ export const TagSelectorRoot = <T extends ComboboxCollectionItem>({
40
+ allowCustomValue = true,
41
+ multiple = true,
42
+ selectionBehavior = "clear",
43
+ editable,
44
+ addOnPaste = false,
45
+ onValueChange,
46
+ children,
47
+ value,
48
+ translations,
49
+ ...rest
50
+ }: TagSelectorRootProps<T>) => {
51
+ const ids = {
52
+ root: useId(),
53
+ input: useId(),
54
+ control: useId(),
97
55
  };
98
56
 
99
- const createLabel = (tag: string) => t("tagSelector.createLabel", { tag });
57
+ const controlRef = useRef<HTMLDivElement | undefined>(undefined);
58
+
59
+ useEffect(() => {
60
+ if (!controlRef.current) {
61
+ controlRef.current = document.getElementById(ids.control) as HTMLDivElement | undefined;
62
+ }
63
+ }, [ids.control]);
100
64
 
101
65
  return (
102
- <StyledTagSelector className={className}>
103
- {label && (
104
- <StyledLabel labelHidden={labelHidden} htmlFor="tagselector-creatable" id="tagselector-label">
105
- {label}
106
- </StyledLabel>
107
- )}
108
- <CreatableSelect
109
- id="tagselector-creatable"
110
- aria-labelledby={label ? "tagselector-label" : undefined}
111
- ariaLiveMessages={createAriaMessages(t)}
112
- components={{
113
- DropdownIndicator,
114
- MultiValue: ValueButton,
115
- SelectContainer,
116
- MenuList,
117
- Control,
118
- Option,
119
- Menu,
120
- Input,
121
- }}
122
- formatCreateLabel={createLabel}
123
- inputValue={input}
124
- isClearable={false}
125
- isMulti
126
- noOptionsMessage={() => t("tagSelector.noOptions")}
127
- onChange={handleChange}
128
- onCreateOption={onCreateTag}
129
- onInputChange={setInput}
130
- onKeyDown={handleSpaceClick}
131
- options={tags}
132
- placeholder={t("tagSelector.placeholder")}
133
- screenReaderStatus={({ count }) => t("tagSelector.aria.screenReaderStatus", { count })}
134
- styles={styles}
135
- tabSelectsValue={false}
136
- value={selected}
137
- />
138
- </StyledTagSelector>
66
+ <ComboboxRoot
67
+ ids={ids}
68
+ asChild
69
+ allowCustomValue={allowCustomValue}
70
+ multiple={multiple}
71
+ selectionBehavior={selectionBehavior}
72
+ onValueChange={onValueChange}
73
+ translations={translations}
74
+ onPointerDownOutside={(event) => {
75
+ if (contains(controlRef.current, event.detail.originalEvent.target)) {
76
+ event.preventDefault();
77
+ }
78
+ }}
79
+ value={value}
80
+ {...rest}
81
+ >
82
+ <ComboboxContext>
83
+ {(api) => (
84
+ <TagsInputRoot
85
+ ids={ids}
86
+ value={value}
87
+ onInputValueChange={(details) => api.setInputValue(details.inputValue)}
88
+ editable={editable}
89
+ onValueChange={onValueChange}
90
+ addOnPaste={addOnPaste}
91
+ translations={translations}
92
+ >
93
+ {children}
94
+ </TagsInputRoot>
95
+ )}
96
+ </ComboboxContext>
97
+ </ComboboxRoot>
139
98
  );
140
99
  };
141
100
 
142
- export default TagSelector;
101
+ export type TagSelectorControlProps = ComboboxControlProps & TagsInputControlProps;
102
+
103
+ export const TagSelectorLabel = ComboboxLabel;
104
+
105
+ export const TagSelectorItemInput = TagsInputItemInput;
106
+
107
+ export const TagSelectorTrigger = ComboboxTrigger;
108
+
109
+ export const TagSelectorControl = forwardRef<HTMLDivElement, TagSelectorControlProps>(({ children, ...props }, ref) => {
110
+ return (
111
+ <ComboboxControl asChild>
112
+ <TagsInputControl {...props} ref={ref}>
113
+ {children}
114
+ </TagsInputControl>
115
+ </ComboboxControl>
116
+ );
117
+ });
118
+
119
+ export const TagSelectorClearTrigger = ComboboxClearTrigger;
120
+
121
+ export type TagSelectorInputProps = ComboboxInputProps & TagsInputInputProps;
122
+
123
+ // If you need to modify the TagsInputItem, you can use this.
124
+ export const TagSelectorInputBase = forwardRef<HTMLInputElement, TagSelectorInputProps>(
125
+ ({ children, ...props }, ref) => {
126
+ const tagsApi = useTagsInputContext();
127
+
128
+ return (
129
+ <ComboboxInput asChild>
130
+ <TagsInputInput
131
+ {...props}
132
+ onKeyDown={(event) => {
133
+ if (event.key === "Enter") {
134
+ tagsApi.addValue(tagsApi.inputValue);
135
+ }
136
+ }}
137
+ ref={ref}
138
+ >
139
+ {children}
140
+ </TagsInputInput>
141
+ </ComboboxInput>
142
+ );
143
+ },
144
+ );
145
+
146
+ export const TagSelectorInput = forwardRef<HTMLInputElement, TagSelectorInputProps>(({ children, ...props }, ref) => {
147
+ const tagsApi = useTagsInputContext();
148
+
149
+ return (
150
+ <>
151
+ {tagsApi.value.map((value, index) => (
152
+ <TagsInputItem index={index} value={value} key={value}>
153
+ <TagsInputItemPreview>
154
+ <TagsInputItemText>{value}</TagsInputItemText>
155
+ <TagsInputItemDeleteTrigger>
156
+ <Cross />
157
+ </TagsInputItemDeleteTrigger>
158
+ </TagsInputItemPreview>
159
+ <TagsInputItemInput />
160
+ </TagsInputItem>
161
+ ))}
162
+ <ComboboxInput asChild>
163
+ <TagsInputInput
164
+ {...props}
165
+ onKeyDown={(event) => {
166
+ if (event.key === "Enter") {
167
+ tagsApi.addValue(tagsApi.inputValue);
168
+ }
169
+ }}
170
+ ref={ref}
171
+ >
172
+ {children}
173
+ </TagsInputInput>
174
+ </ComboboxInput>
175
+ </>
176
+ );
177
+ });
package/src/i18n/index.ts CHANGED
@@ -8,3 +8,8 @@
8
8
 
9
9
  export { i18nInstance } from "./i18n";
10
10
  export { formatNestedMessages } from "./formatNestedMessages";
11
+ export {
12
+ useComboboxTranslations,
13
+ useTagSelectorTranslations,
14
+ useTagsInputTranslations,
15
+ } from "./useComponentTranslations";
@@ -0,0 +1,72 @@
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 { useTranslation } from "react-i18next";
10
+ import type { ComboboxCollectionItem } from "@ark-ui/react";
11
+ import type { ComboboxRootProps, PaginationRootProps, TagsInputRootProps } from "@ndla/primitives";
12
+ import { TagSelectorRootProps } from "../TagSelector/TagSelector";
13
+
14
+ export const useTagsInputTranslations = (
15
+ translations?: Partial<TagsInputRootProps["translations"]>,
16
+ ): TagsInputRootProps["translations"] => {
17
+ const { t } = useTranslation("translation", { keyPrefix: "component.tagsInput" });
18
+
19
+ return {
20
+ clearTriggerLabel: t("clearTriggerLabel"),
21
+ deleteTagTriggerLabel: (tag) => t("deleteTagTriggerLabel", { tag }),
22
+ tagAdded: (tag) => t("tagAdded", { tag }),
23
+ tagsPasted: (tag) => t("tagsPasted", { length: tag.length }),
24
+ tagEdited: (tag) => t("tagEdited", { tag }),
25
+ tagUpdated: (tag) => t("tagUpdated", { tag }),
26
+ tagDeleted: (tag) => t("tagDeleted", { tag }),
27
+ tagSelected: (tag) => t("tagSelected", { tag }),
28
+ ...translations,
29
+ };
30
+ };
31
+
32
+ export const useComboboxTranslations = <T extends ComboboxCollectionItem>(
33
+ translations?: Partial<ComboboxRootProps<T>["translations"]>,
34
+ ): ComboboxRootProps<T>["translations"] => {
35
+ const { t } = useTranslation("translation", { keyPrefix: "component.combobox" });
36
+
37
+ return {
38
+ triggerLabel: t("triggerLabel"),
39
+ clearTriggerLabel: t("clearTriggerLabel"),
40
+ ...translations,
41
+ };
42
+ };
43
+
44
+ export const useTagSelectorTranslations = <T extends ComboboxCollectionItem>(
45
+ translations?: Partial<TagSelectorRootProps<T>["translations"]>,
46
+ ): TagSelectorRootProps<T>["translations"] => {
47
+ const tagsInputTranslations = useTagsInputTranslations();
48
+ const comboboxTranslations = useComboboxTranslations();
49
+
50
+ return {
51
+ ...comboboxTranslations,
52
+ ...tagsInputTranslations,
53
+ ...translations,
54
+ } as TagSelectorRootProps<T>["translations"];
55
+ };
56
+
57
+ export const usePaginationTranslations = (
58
+ translations?: Partial<PaginationRootProps["translations"]>,
59
+ ): PaginationRootProps["translations"] => {
60
+ const { t } = useTranslation("translation", { keyPrefix: "component.pagination" });
61
+
62
+ return {
63
+ rootLabel: t("rootLabel"),
64
+ prevTriggerLabel: t("prevTriggerLabel"),
65
+ nextTriggerLabel: t("nextTriggerLabel"),
66
+ itemLabel: (details) => {
67
+ const lastPage = details.totalPages > 1 && details.page === details.totalPages;
68
+ return lastPage ? t("lastPage", { page: details.page }) : t("page", { page: details.page });
69
+ },
70
+ ...translations,
71
+ };
72
+ };
package/src/index.ts CHANGED
@@ -9,10 +9,7 @@
9
9
  // Ignore typescript implicit any warning and export all javascript components
10
10
  // Move components to this file when they are migrated to typescript
11
11
 
12
- export { ExpandableBox, ExpandableBoxSummary } from "./ExpandableBox";
13
- export { default as FramedContent } from "./FramedContent";
14
12
  export {
15
- ConceptNotionV2,
16
13
  ImageEmbed,
17
14
  getCrop,
18
15
  getFocalPoint,
@@ -51,8 +48,6 @@ export type { ArticleModifier } from "./Article";
51
48
 
52
49
  export { getPossiblyRelativeUrl } from "./utils/relativeUrl";
53
50
 
54
- export { default as Table, TableStyling } from "./Table";
55
-
56
51
  export { default as ContentLoader } from "./ContentLoader";
57
52
 
58
53
  export { default as RelatedArticleList, RelatedArticle } from "./RelatedArticleList";
@@ -65,9 +60,6 @@ export { default as Logo } from "./Logo";
65
60
 
66
61
  export { default as FactBox } from "./FactBox";
67
62
 
68
- export { default as Image, ImageLink, makeSrcQueryString } from "./Image";
69
- export type { ImageCrop, ImageFocalPoint } from "./Image";
70
-
71
63
  export type { HeroContentType } from "./Hero";
72
64
  export {
73
65
  SubjectMaterialHero,
@@ -83,9 +75,6 @@ export {
83
75
 
84
76
  export { FooterBlock } from "./Footer";
85
77
 
86
- export { Figure } from "./Figure";
87
- export type { FigureType } from "./Figure";
88
-
89
78
  export { LanguageSelector } from "./LanguageSelector";
90
79
 
91
80
  export { default as SearchResultSleeve } from "./Search/SearchResultSleeve";
@@ -115,7 +104,13 @@ export { default as messagesSMA } from "./locale/messages-sma";
115
104
  export { default as Breadcrumb, HomeBreadcrumb } from "./Breadcrumb";
116
105
  export type { SimpleBreadcrumbItem, IndexedBreadcrumbItem } from "./Breadcrumb";
117
106
 
118
- export { i18nInstance, formatNestedMessages } from "./i18n";
107
+ export {
108
+ i18nInstance,
109
+ formatNestedMessages,
110
+ useTagsInputTranslations,
111
+ useTagSelectorTranslations,
112
+ useComboboxTranslations,
113
+ } from "./i18n";
119
114
 
120
115
  export { default as LayoutItem, OneColumn, PageContainer } from "./Layout";
121
116
 
@@ -130,14 +125,26 @@ export {
130
125
  ConceptBadge,
131
126
  } from "./ContentTypeBadge";
132
127
 
128
+ export type { ContentTypeBadgeProps } from "./ContentTypeBadge/ContentTypeBadgeNew";
129
+ export {
130
+ ContentTypeBadge as ContentTypeBadgeNew,
131
+ contentTypeToBadgeVariantMap,
132
+ } from "./ContentTypeBadge/ContentTypeBadgeNew";
133
+
133
134
  export { default as CopyParagraphButton } from "./CopyParagraphButton";
134
135
 
135
136
  export { default as ContentPlaceholder } from "./ContentPlaceholder";
136
137
 
137
- export { Notion } from "./Notion";
138
-
139
- export type { TagType } from "./TagSelector";
140
- export { TagSelector } from "./TagSelector";
138
+ export {
139
+ TagSelectorRoot,
140
+ TagSelectorLabel,
141
+ TagSelectorItemInput,
142
+ TagSelectorTrigger,
143
+ TagSelectorControl,
144
+ TagSelectorClearTrigger,
145
+ TagSelectorInputBase,
146
+ TagSelectorInput,
147
+ } from "./TagSelector/TagSelector";
141
148
 
142
149
  export { SnackbarProvider, useSnack, BaseSnack, DefaultSnackbar } from "./SnackBar";
143
150
  export type { Snack, SnackContext } from "./SnackBar";
@@ -145,9 +152,7 @@ export { TreeStructure } from "./TreeStructure";
145
152
  export type { TreeStructureProps } from "./TreeStructure";
146
153
 
147
154
  export { SearchField, SearchResultList, SearchResultItem, ActiveFilters } from "./Search";
148
- export { default as LetterFilter } from "./LetterFilter";
149
155
 
150
- export { OrderedList, UnOrderedList } from "./List";
151
156
  export { BlogPostV2 } from "./BlogPost";
152
157
  export { ProgrammeCard } from "./ProgrammeCard";
153
158
  export { KeyFigure } from "./KeyFigure";
@@ -162,7 +167,6 @@ export {
162
167
  FRONTPAGE_ARTICLE_MAX_WIDTH,
163
168
  WIDE_FRONTPAGE_ARTICLE_MAX_WIDTH,
164
169
  } from "./FrontpageArticle";
165
- export { DefinitionTerm, DefinitionDescription } from "./DefinitionList";
166
170
  export type { ProgrammeV2 } from "./ProgrammeCard";
167
171
 
168
172
  export { Gloss, GlossExample } from "./Gloss";
@@ -203,7 +203,7 @@ const messages = {
203
203
  alphabeticSort: "Subjects grouped alphabetically",
204
204
  subjectGroup: 'Group "{{ category }}"',
205
205
  allSubjects: "All subjects",
206
- myFavoriteSubjects: "My favorite subjects",
206
+ myFavoriteSubjects: "Your favorite subjects",
207
207
  chooseSubject: "Choose subject",
208
208
  errorDescription: "Sorry, an error occurred while loading the subjects.",
209
209
  confirmRemove: "Are you sure you want to remove {{subject}} from your favorite subjects?",
@@ -334,7 +334,7 @@ const messages = {
334
334
  useCompentenceGoalsFilter: "Use filter",
335
335
  closeCompentenceGoalsFilter: "Close filter",
336
336
  competenceGoalsNarrowBackButton: "Go back",
337
- competenceGoalResourceSearchText: "View resources to competence goal {{code}}",
337
+ competenceGoalResourceSearchText: "View resources for {{code}}",
338
338
  coreResourceSearchText: "View resources to core element {{code}}",
339
339
  competenceGoalShowExtra: "Show",
340
340
  competenceGoalCloseExtra: "Hide",
@@ -577,6 +577,8 @@ const messages = {
577
577
  podcast: "Podcast",
578
578
  h5p: "H5P",
579
579
  video: "Video",
580
+ missing: "Unknown",
581
+ external: "External",
580
582
  },
581
583
  modal: {
582
584
  closeModal: "Close",
@@ -1419,6 +1421,7 @@ const messages = {
1419
1421
  },
1420
1422
  gloss: {
1421
1423
  examples: "Examples",
1424
+ showExamples: "Show examples",
1422
1425
  wordClass: "Word class",
1423
1426
  play: "Play gloss",
1424
1427
  transcriptions: {
@@ -1470,6 +1473,29 @@ const messages = {
1470
1473
  menuTitle: "About NDLA",
1471
1474
  },
1472
1475
  login: "Log in",
1476
+ component: {
1477
+ tagsInput: {
1478
+ clearTriggerLabel: "Clear all tags",
1479
+ deleteTagTriggerLabel: "Remove tag {{tag}}",
1480
+ tagAdded: "Added tag {{tag}}",
1481
+ tagsPasted: "Pasted {{length}} tags",
1482
+ tagEdited: "Edited tag {{tag}}. Press enter to save, or escape to cancel.",
1483
+ tagUpdated: "Tag updated to {{tag}}",
1484
+ tagDeleted: "Tag {{tag}} deleted",
1485
+ tagSelected: "Tag {{tag}} selected. Press enter to edit. Press backspace or delete to delete.",
1486
+ },
1487
+ combobox: {
1488
+ triggerLabel: "Show suggestions",
1489
+ clearTriggerLabel: "Clear selection",
1490
+ },
1491
+ pagination: {
1492
+ rootLabel: "Pagination",
1493
+ prevTriggerLabel: "Previous page",
1494
+ nextTriggerLabel: "Next page",
1495
+ lastPage: "Last page, page {{page}}",
1496
+ page: "Page {{page}}",
1497
+ },
1498
+ },
1473
1499
  };
1474
1500
 
1475
1501
  export default messages;
@@ -203,7 +203,7 @@ const messages = {
203
203
  alphabeticSort: "Fag gruppert alfabetisk",
204
204
  subjectGroup: 'Gruppe "{{ category }}"',
205
205
  allSubjects: "Alle fag",
206
- myFavoriteSubjects: "Mine favorittfag",
206
+ myFavoriteSubjects: "Dine favorittfag",
207
207
  errorDescription: "Beklager, en feil oppstod under lasting av fagene.",
208
208
  chooseSubject: "Velg fag",
209
209
  confirmRemove: "Er du sikker på at du vil fjerne {{subject}} fra favorittfag?",
@@ -334,7 +334,7 @@ const messages = {
334
334
  useCompentenceGoalsFilter: "Bruk filter",
335
335
  closeCompentenceGoalsFilter: "Lukk filter",
336
336
  competenceGoalsNarrowBackButton: "Tilbake",
337
- competenceGoalResourceSearchText: "Vis ressurser til kompetansemål {{code}}",
337
+ competenceGoalResourceSearchText: "Vis ressurser til {{code}}",
338
338
  coreResourceSearchText: "Vis ressurser til kjerneelement {{code}}",
339
339
  competenceGoalShowExtra: "Vis støtte til læreplanen",
340
340
  competenceGoalCloseExtra: "Skjul støtte til læreplanen",
@@ -577,6 +577,8 @@ const messages = {
577
577
  podcast: "Podkast",
578
578
  h5p: "H5P",
579
579
  video: "Video",
580
+ missing: "Ukjent",
581
+ external: "Ekstern",
580
582
  },
581
583
  modal: {
582
584
  closeModal: "Lukk",
@@ -1419,6 +1421,7 @@ const messages = {
1419
1421
  },
1420
1422
  gloss: {
1421
1423
  examples: "Eksempler",
1424
+ showExamples: "Vis eksempler",
1422
1425
  wordClass: "Ordklasse",
1423
1426
  play: "Spill av glose",
1424
1427
  transcriptions: {
@@ -1470,6 +1473,29 @@ const messages = {
1470
1473
  menuTitle: "Om NDLA",
1471
1474
  },
1472
1475
  login: "Logg inn",
1476
+ component: {
1477
+ tagsInput: {
1478
+ clearTriggerLabel: "Fjern alle emneknagger",
1479
+ deleteTagTriggerLabel: "Fjern emneknagg {{tag}}",
1480
+ tagAdded: "Emneknagg {{tag}} lagt til",
1481
+ tagsPasted: "Limte inn {{length}} emneknagger",
1482
+ tagEdited: "Redigerer emneknagg {{tag}}. Trykk enter for å lagre, eller esc for å avbryte.",
1483
+ tagUpdated: "Emneknagg oppdatert til {{tag}}",
1484
+ tagDeleted: "Emneknagg {{tag}} slettet",
1485
+ tagSelected: "Emneknagg {{tag}} valgt. Trykk enter for å redigere. Trykk backspace eller delete for å slette",
1486
+ },
1487
+ combobox: {
1488
+ triggerLabel: "Vis resultater",
1489
+ clearTriggerLabel: "Fjern valg",
1490
+ },
1491
+ pagination: {
1492
+ rootLabel: "Sidenavigering",
1493
+ prevTriggerLabel: "Forrige side",
1494
+ nextTriggerLabel: "Neste side",
1495
+ lastPage: "Siste side, side {{page}}",
1496
+ page: "Side {{page}}",
1497
+ },
1498
+ },
1473
1499
  };
1474
1500
 
1475
1501
  export default messages;
@@ -203,7 +203,7 @@ const messages = {
203
203
  alphabeticSort: "Fag gruppert alfabetisk",
204
204
  subjectGroup: 'Gruppe "{{ category }}"',
205
205
  allSubjects: "Alle fag",
206
- myFavoriteSubjects: "Favorittfaga mine",
206
+ myFavoriteSubjects: "Favorittfaga dine",
207
207
  errorDescription: "Orsak, ein feil oppstod under lasting av faga.",
208
208
  chooseSubject: "Vel fag",
209
209
  confirmRemove: "Er du sikker på at du vil fjerne {{subject}} fra favorittfag?",
@@ -334,7 +334,7 @@ const messages = {
334
334
  useCompentenceGoalsFilter: "Bruk filter",
335
335
  closeCompentenceGoalsFilter: "Lukk filter",
336
336
  competenceGoalsNarrowBackButton: "Tilbake",
337
- competenceGoalResourceSearchText: "Vis ressursar til kompetansemål {{code}}",
337
+ competenceGoalResourceSearchText: "Vis ressursar til {{code}}",
338
338
  coreResourceSearchText: "Vis ressursar til kjerneelement {{code}}",
339
339
  competenceGoalShowExtra: "Vis støtte til læreplanen",
340
340
  competenceGoalCloseExtra: "Skjul støtte til læreplanen",
@@ -577,6 +577,8 @@ const messages = {
577
577
  podcast: "Podkast",
578
578
  h5p: "H5P",
579
579
  video: "Video",
580
+ missing: "Ukjent",
581
+ external: "Ekstern",
580
582
  },
581
583
  modal: {
582
584
  closeModal: "Lukk",
@@ -1418,6 +1420,7 @@ const messages = {
1418
1420
  },
1419
1421
  gloss: {
1420
1422
  examples: "Eksempler",
1423
+ showExamples: "Vis eksempler",
1421
1424
  wordClass: "Ordklasse",
1422
1425
  play: "Spill av glose",
1423
1426
  transcriptions: {
@@ -1469,6 +1472,29 @@ const messages = {
1469
1472
  menuTitle: "Om NDLA",
1470
1473
  },
1471
1474
  login: "Logg inn",
1475
+ component: {
1476
+ tagsInput: {
1477
+ clearTriggerLabel: "Fjern alle emneknaggar",
1478
+ deleteTagTriggerLabel: "Fjern emneknagg {{tag}}",
1479
+ tagAdded: "Emneknagg {{tag}} lagt til",
1480
+ tagsPasted: "Limte inn {{length}} emneknaggar",
1481
+ tagEdited: "Redigerer emneknagg {{tag}}. Trykk enter for å lagre, eller esc for å avbryte.",
1482
+ tagUpdated: "Emneknagg oppdatret til {{tag}}",
1483
+ tagDeleted: "Emneknagg {{tag}} slettet",
1484
+ tagSelected: "Emneknagg {{tag}} valgt. Trykk enter for å redigere. Trykk backspace eller delete for å slette",
1485
+ },
1486
+ combobox: {
1487
+ triggerLabel: "Vis resultater",
1488
+ clearTriggerLabel: "Fjern valg",
1489
+ },
1490
+ pagination: {
1491
+ rootLabel: "Sidenavigering",
1492
+ prevTriggerLabel: "Førre side",
1493
+ nextTriggerLabel: "Neste side",
1494
+ lastPage: "Siste side, side {{page}}",
1495
+ page: "Side {{page}}",
1496
+ },
1497
+ },
1472
1498
  };
1473
1499
 
1474
1500
  export default messages;