@ndla/ui 53.0.0 → 54.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/es/Embed/ConceptEmbed.js +14 -8
  2. package/es/Embed/ImageEmbed.js +10 -4
  3. package/es/Embed/RelatedContentEmbed.js +2 -1
  4. package/es/ErrorMessage/ErrorMessage.js +14 -17
  5. package/es/Figure/Figure.js +36 -20
  6. package/es/Layout/LayoutItem.js +20 -6
  7. package/es/Layout/index.js +0 -1
  8. package/es/List/OrderedList.js +12 -11
  9. package/es/TreeStructure/AddFolderButton.js +2 -2
  10. package/es/TreeStructure/ComboboxButton.js +2 -2
  11. package/es/TreeStructure/FolderItem.js +7 -7
  12. package/es/TreeStructure/FolderItems.js +2 -2
  13. package/es/TreeStructure/TreeStructure.js +5 -5
  14. package/es/all.css +1 -1
  15. package/es/index.js +1 -1
  16. package/es/locale/messages-en.js +2 -0
  17. package/es/locale/messages-nb.js +2 -0
  18. package/es/locale/messages-nn.js +2 -0
  19. package/es/locale/messages-se.js +2 -0
  20. package/es/locale/messages-sma.js +2 -0
  21. package/lib/Article/Article.js +1 -1
  22. package/lib/Article/ArticleByline.js +1 -1
  23. package/lib/Article/ArticleFootNotes.js +1 -1
  24. package/lib/Article/ArticleHeaderWrapper.js +1 -1
  25. package/lib/Article/ArticleParagraph.js +1 -1
  26. package/lib/Article/index.js +1 -1
  27. package/lib/AudioPlayer/AudioPlayer.js +1 -1
  28. package/lib/AudioPlayer/Controls.js +1 -1
  29. package/lib/AudioPlayer/index.js +1 -1
  30. package/lib/BlogPost/BlogPost.js +1 -1
  31. package/lib/BlogPost/index.js +1 -1
  32. package/lib/Breadcrumb/Breadcrumb.js +1 -1
  33. package/lib/Breadcrumb/BreadcrumbItem.js +1 -1
  34. package/lib/Breadcrumb/HomeBreadcrumb.js +1 -1
  35. package/lib/Breadcrumb/index.js +1 -1
  36. package/lib/CampaignBlock/CampaignBlock.js +1 -1
  37. package/lib/CampaignBlock/index.js +1 -1
  38. package/lib/CodeBlock/CodeBlock.js +1 -1
  39. package/lib/CodeBlock/index.js +1 -1
  40. package/lib/ContactBlock/ContactBlock.js +1 -1
  41. package/lib/ContactBlock/index.js +1 -1
  42. package/lib/ContentPlaceholder/ContentPlaceholder.js +1 -1
  43. package/lib/ContentPlaceholder/index.js +1 -1
  44. package/lib/ContentTypeBadge/ContentTypeBadge.js +1 -1
  45. package/lib/CopyParagraphButton/CopyParagraphButton.js +1 -1
  46. package/lib/CopyParagraphButton/index.js +1 -1
  47. package/lib/CreatedBy/CreatedBy.js +1 -1
  48. package/lib/CreatedBy/index.js +1 -1
  49. package/lib/DefinitionList/DefinitionDescription.js +1 -1
  50. package/lib/DefinitionList/DefinitionTerm.js +1 -1
  51. package/lib/DefinitionList/index.js +1 -1
  52. package/lib/Embed/AudioEmbed.js +1 -1
  53. package/lib/Embed/BrightcoveEmbed.js +1 -1
  54. package/lib/Embed/ConceptEmbed.d.ts +1 -0
  55. package/lib/Embed/ConceptEmbed.js +15 -9
  56. package/lib/Embed/ConceptListEmbed.js +1 -1
  57. package/lib/Embed/ContentLinkEmbed.js +1 -1
  58. package/lib/Embed/CopyrightEmbed.js +1 -1
  59. package/lib/Embed/EmbedErrorPlaceholder.js +1 -1
  60. package/lib/Embed/ExternalEmbed.js +1 -1
  61. package/lib/Embed/FootnoteEmbed.js +1 -1
  62. package/lib/Embed/H5pEmbed.js +1 -1
  63. package/lib/Embed/IframeEmbed.js +1 -1
  64. package/lib/Embed/ImageEmbed.js +11 -5
  65. package/lib/Embed/RelatedContentEmbed.js +3 -1
  66. package/lib/Embed/UnknownEmbed.js +1 -1
  67. package/lib/Embed/UuDisclaimerEmbed.js +1 -1
  68. package/lib/Embed/conceptComponents.js +1 -1
  69. package/lib/Embed/index.js +1 -1
  70. package/lib/ErrorMessage/ErrorMessage.js +15 -18
  71. package/lib/ErrorMessage/ErrorResourceAccessDenied.js +1 -1
  72. package/lib/ErrorMessage/index.js +1 -1
  73. package/lib/FactBox/FactBox.js +1 -1
  74. package/lib/FactBox/index.js +1 -1
  75. package/lib/Figure/Figure.js +41 -21
  76. package/lib/Figure/index.js +1 -1
  77. package/lib/FileList/File.js +1 -1
  78. package/lib/FileList/FileList.js +1 -1
  79. package/lib/FileList/Format.js +1 -1
  80. package/lib/FileList/index.js +1 -1
  81. package/lib/Footer/FooterBlock.js +1 -1
  82. package/lib/FramedContent/FramedContent.js +1 -1
  83. package/lib/FramedContent/index.js +1 -1
  84. package/lib/FrontpageArticle/FrontpageArticle.js +1 -1
  85. package/lib/Gloss/Gloss.js +1 -1
  86. package/lib/Gloss/GlossExample.js +1 -1
  87. package/lib/Gloss/index.js +1 -1
  88. package/lib/Grid/Grid.js +1 -1
  89. package/lib/Hero/Hero.js +1 -1
  90. package/lib/Hero/HeroContent.js +1 -1
  91. package/lib/Image/Image.js +1 -1
  92. package/lib/Image/ImageLink.js +1 -1
  93. package/lib/KeyFigure/KeyFigure.js +1 -1
  94. package/lib/KeyFigure/index.js +1 -1
  95. package/lib/LanguageSelector/LanguageSelector.js +1 -1
  96. package/lib/LanguageSelector/index.js +1 -1
  97. package/lib/Layout/LayoutItem.js +20 -8
  98. package/lib/Layout/OneColumn.js +1 -1
  99. package/lib/Layout/PageContainer.js +1 -1
  100. package/lib/Layout/index.d.ts +0 -1
  101. package/lib/Layout/index.js +1 -8
  102. package/lib/LetterFilter/LetterFilter.js +1 -1
  103. package/lib/LetterFilter/index.js +1 -1
  104. package/lib/LicenseByline/EmbedByline.js +1 -1
  105. package/lib/LicenseByline/LicenseDescription.js +1 -1
  106. package/lib/LicenseByline/LicenseLink.js +1 -1
  107. package/lib/LicenseByline/index.js +1 -1
  108. package/lib/LinkBlock/LinkBlock.js +1 -1
  109. package/lib/LinkBlock/LinkBlockSection.js +1 -1
  110. package/lib/LinkBlock/index.js +1 -1
  111. package/lib/List/OrderedList.d.ts +0 -1
  112. package/lib/List/OrderedList.js +13 -13
  113. package/lib/List/UnOrderedList.js +1 -1
  114. package/lib/List/index.js +1 -1
  115. package/lib/Logo/Logo.js +1 -1
  116. package/lib/Logo/SvgLogo.js +1 -1
  117. package/lib/Logo/index.js +1 -1
  118. package/lib/MediaList/MediaList.js +1 -1
  119. package/lib/Messages/MessageBanner.js +1 -1
  120. package/lib/Messages/MessageBox.js +1 -1
  121. package/lib/Messages/index.js +1 -1
  122. package/lib/MyNdla/Resource/Folder.js +1 -1
  123. package/lib/MyNdla/Resource/index.js +1 -1
  124. package/lib/MyNdla/index.js +1 -1
  125. package/lib/Notion/Notion.js +1 -1
  126. package/lib/Notion/NotionImage.js +1 -1
  127. package/lib/Notion/index.js +1 -1
  128. package/lib/ProgrammeCard/ProgrammeCard.js +1 -1
  129. package/lib/ProgrammeCard/index.js +1 -1
  130. package/lib/RelatedArticleList/RelatedArticleList.js +1 -1
  131. package/lib/Resource/BlockResource.js +1 -1
  132. package/lib/Resource/ListResource.js +1 -1
  133. package/lib/Resource/index.js +1 -1
  134. package/lib/Resource/resourceComponents.js +1 -1
  135. package/lib/ResourceBox/ResourceBox.js +1 -1
  136. package/lib/ResourceBox/index.js +1 -1
  137. package/lib/Search/ActiveFilterContent.js +1 -1
  138. package/lib/Search/ActiveFilters.js +1 -1
  139. package/lib/Search/ContentTypeResult.js +1 -1
  140. package/lib/Search/ContentTypeResultStyles.js +1 -1
  141. package/lib/Search/LoadingWrapper.js +1 -1
  142. package/lib/Search/SearchField.js +1 -1
  143. package/lib/Search/SearchFieldForm.js +1 -1
  144. package/lib/Search/SearchResult.js +1 -1
  145. package/lib/Search/SearchResultSleeve.js +1 -1
  146. package/lib/Search/index.js +1 -1
  147. package/lib/SnackBar/DefaultSnackbar.js +1 -1
  148. package/lib/SnackBar/SnackbarProvider.js +1 -1
  149. package/lib/SnackBar/index.js +1 -1
  150. package/lib/Table/Table.js +1 -1
  151. package/lib/TagSelector/Control.js +1 -1
  152. package/lib/TagSelector/DropdownIndicator.js +1 -1
  153. package/lib/TagSelector/MenuList.js +1 -1
  154. package/lib/TagSelector/Option.js +1 -1
  155. package/lib/TagSelector/SelectContainer.js +1 -1
  156. package/lib/TagSelector/TagSelector.js +1 -1
  157. package/lib/TagSelector/ValueButton.js +1 -1
  158. package/lib/TagSelector/index.js +1 -1
  159. package/lib/TreeStructure/AddFolderButton.d.ts +1 -1
  160. package/lib/TreeStructure/AddFolderButton.js +3 -3
  161. package/lib/TreeStructure/ComboboxButton.d.ts +1 -1
  162. package/lib/TreeStructure/ComboboxButton.js +3 -3
  163. package/lib/TreeStructure/FolderItem.d.ts +1 -1
  164. package/lib/TreeStructure/FolderItem.js +8 -8
  165. package/lib/TreeStructure/FolderItems.d.ts +1 -1
  166. package/lib/TreeStructure/FolderItems.js +3 -3
  167. package/lib/TreeStructure/TreeStructure.d.ts +1 -1
  168. package/lib/TreeStructure/TreeStructure.js +6 -6
  169. package/lib/TreeStructure/arrowNavigation.d.ts +1 -1
  170. package/lib/TreeStructure/helperFunctions.d.ts +1 -1
  171. package/lib/TreeStructure/index.js +1 -1
  172. package/lib/TreeStructure/types.d.ts +1 -1
  173. package/lib/all.css +1 -1
  174. package/lib/i18n/i18n.js +1 -1
  175. package/lib/index.d.ts +1 -1
  176. package/lib/index.js +1 -7
  177. package/lib/locale/messages-en.d.ts +2 -0
  178. package/lib/locale/messages-en.js +3 -1
  179. package/lib/locale/messages-nb.d.ts +2 -0
  180. package/lib/locale/messages-nb.js +3 -1
  181. package/lib/locale/messages-nn.d.ts +2 -0
  182. package/lib/locale/messages-nn.js +3 -1
  183. package/lib/locale/messages-se.d.ts +2 -0
  184. package/lib/locale/messages-se.js +3 -1
  185. package/lib/locale/messages-sma.d.ts +2 -0
  186. package/lib/locale/messages-sma.js +3 -1
  187. package/lib/utils/resourceTypeColor.js +1 -1
  188. package/package.json +16 -15
  189. package/src/CodeBlock/CodeBlock.stories.tsx +1 -3
  190. package/src/Embed/AudioEmbed.stories.tsx +3 -3
  191. package/src/Embed/BrightcoveEmbed.stories.tsx +3 -3
  192. package/src/Embed/ConceptEmbed.stories.tsx +3 -3
  193. package/src/Embed/ConceptEmbed.tsx +20 -2
  194. package/src/Embed/ExternalEmbed.stories.tsx +3 -3
  195. package/src/Embed/H5pEmbed.stories.tsx +3 -3
  196. package/src/Embed/IframeEmbed.stories.tsx +3 -3
  197. package/src/Embed/ImageEmbed.stories.tsx +3 -3
  198. package/src/Embed/ImageEmbed.tsx +5 -1
  199. package/src/Embed/RelatedContentEmbed.stories.tsx +15 -3
  200. package/src/Embed/RelatedContentEmbed.tsx +4 -1
  201. package/src/Embed/UuDisclaimerEmbed.stories.tsx +3 -3
  202. package/src/ErrorMessage/ErrorMessage.tsx +8 -4
  203. package/src/Figure/Figure.tsx +102 -24
  204. package/src/Layout/LayoutItem.tsx +23 -6
  205. package/src/Layout/index.ts +0 -1
  206. package/src/LicenseByline/EmbedByline.stories.tsx +2 -2
  207. package/src/List/OrderedList.stories.tsx +2 -2
  208. package/src/List/OrderedList.tsx +21 -18
  209. package/src/TreeStructure/AddFolderButton.tsx +1 -1
  210. package/src/TreeStructure/ComboboxButton.tsx +1 -1
  211. package/src/TreeStructure/FolderItem.tsx +1 -1
  212. package/src/TreeStructure/FolderItems.tsx +1 -1
  213. package/src/TreeStructure/TreeStructure.stories.tsx +1 -1
  214. package/src/TreeStructure/TreeStructure.tsx +1 -1
  215. package/src/TreeStructure/arrowNavigation.ts +1 -1
  216. package/src/TreeStructure/helperFunctions.ts +1 -1
  217. package/src/TreeStructure/types.ts +1 -1
  218. package/src/index.ts +1 -1
  219. package/src/locale/messages-en.ts +2 -0
  220. package/src/locale/messages-nb.ts +2 -0
  221. package/src/locale/messages-nn.ts +2 -0
  222. package/src/locale/messages-se.ts +2 -0
  223. package/src/locale/messages-sma.ts +2 -0
  224. package/es/Layout/Content.js +0 -19
  225. package/lib/Layout/Content.d.ts +0 -13
  226. package/lib/Layout/Content.js +0 -26
  227. package/src/Layout/Content.tsx +0 -17
package/lib/i18n/i18n.js CHANGED
@@ -12,7 +12,7 @@ var _messagesNb = _interopRequireDefault(require("../locale/messages-nb"));
12
12
  var _messagesNn = _interopRequireDefault(require("../locale/messages-nn"));
13
13
  var _messagesSe = _interopRequireDefault(require("../locale/messages-se"));
14
14
  var _messagesSma = _interopRequireDefault(require("../locale/messages-sma"));
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
16
  /**
17
17
  * Copyright (c) 2021-present, NDLA.
18
18
  *
package/lib/index.d.ts CHANGED
@@ -44,7 +44,7 @@ export { default as messagesSMA } from "./locale/messages-sma";
44
44
  export { default as Breadcrumb, HomeBreadcrumb } from "./Breadcrumb";
45
45
  export type { SimpleBreadcrumbItem, IndexedBreadcrumbItem } from "./Breadcrumb";
46
46
  export { i18nInstance, formatNestedMessages } from "./i18n";
47
- export { default as LayoutItem, OneColumn, PageContainer, Content } from "./Layout";
47
+ export { default as LayoutItem, OneColumn, PageContainer } from "./Layout";
48
48
  export { MediaList, MediaListItem, MediaListItemBody, MediaListItemActions, MediaListItemImage, MediaListItemMeta, } from "./MediaList";
49
49
  export type { ItemType } from "./MediaList";
50
50
  export { default as ContentTypeBadge, SubjectMaterialBadge, TasksAndActivitiesBadge, AssessmentResourcesBadge, LearningPathBadge, SubjectBadge, SourceMaterialBadge, ConceptBadge, } from "./ContentTypeBadge";
package/lib/index.js CHANGED
@@ -171,12 +171,6 @@ Object.defineProperty(exports, "ContactBlock", {
171
171
  return _ContactBlock.default;
172
172
  }
173
173
  });
174
- Object.defineProperty(exports, "Content", {
175
- enumerable: true,
176
- get: function () {
177
- return _Layout.Content;
178
- }
179
- });
180
174
  Object.defineProperty(exports, "ContentLinkEmbed", {
181
175
  enumerable: true,
182
176
  get: function () {
@@ -874,4 +868,4 @@ var _LinkBlock = require("./LinkBlock");
874
868
  var _CodeBlock = require("./CodeBlock");
875
869
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
876
870
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
877
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
871
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -923,6 +923,7 @@ declare const messages: {
923
923
  unShare: string;
924
924
  copyLink: string;
925
925
  link: string;
926
+ savedLink: string;
926
927
  header: {
927
928
  shared: string;
928
929
  };
@@ -1153,6 +1154,7 @@ declare const messages: {
1153
1154
  examLockInfo: string;
1154
1155
  copyFolderDisclaimer: string;
1155
1156
  loginCopyFolderPitch: string;
1157
+ loginSaveFolderLinkPitch: string;
1156
1158
  help: string;
1157
1159
  more: string;
1158
1160
  selectView: string;
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _licenses = require("@ndla/licenses");
8
8
  var _model = _interopRequireDefault(require("../model"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  /**
11
11
  * Copyright (c) 2018-present, NDLA.
12
12
  *
@@ -940,6 +940,7 @@ const messages = {
940
940
  unShare: "Sharing stopped. The folder is no longer shared",
941
941
  copyLink: "Copy link to folder",
942
942
  link: "Link is copied",
943
+ savedLink: "Link to {{ name }} has been added to My folders.",
943
944
  header: {
944
945
  shared: "This folder is shared"
945
946
  },
@@ -1170,6 +1171,7 @@ const messages = {
1170
1171
  examLockInfo: "Editing content on Min NDLA is deactivated for pupils during the exam period.",
1171
1172
  copyFolderDisclaimer: "This creates a copy of the folder. Any changes made to the original folder will not be updated here.",
1172
1173
  loginCopyFolderPitch: "Do you wish to copy this folder?",
1174
+ loginSaveFolderLinkPitch: "Do you wish to save the link to this shared folder?",
1173
1175
  help: "Help",
1174
1176
  more: "More options",
1175
1177
  selectView: "Select view",
@@ -923,6 +923,7 @@ declare const messages: {
923
923
  unShare: string;
924
924
  copyLink: string;
925
925
  link: string;
926
+ savedLink: string;
926
927
  header: {
927
928
  shared: string;
928
929
  };
@@ -1153,6 +1154,7 @@ declare const messages: {
1153
1154
  examLockInfo: string;
1154
1155
  copyFolderDisclaimer: string;
1155
1156
  loginCopyFolderPitch: string;
1157
+ loginSaveFolderLinkPitch: string;
1156
1158
  help: string;
1157
1159
  more: string;
1158
1160
  selectView: string;
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _licenses = require("@ndla/licenses");
8
8
  var _model = _interopRequireDefault(require("../model"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  /**
11
11
  * Copyright (c) 2018-present, NDLA.
12
12
  *
@@ -940,6 +940,7 @@ const messages = {
940
940
  unShare: "Delingen er avsluttet. Mappen er ikke lenger delt.",
941
941
  copyLink: "Kopier lenke til mappa",
942
942
  link: "Lenken er kopiert",
943
+ savedLink: "Lenke til {{ name }} er lagt til i Mine mapper.",
943
944
  header: {
944
945
  shared: "Denne mappa er delt"
945
946
  },
@@ -1170,6 +1171,7 @@ const messages = {
1170
1171
  examLockInfo: "Redigering av innhold på Min NDLA er deaktivert for elever i eksamensperioden.",
1171
1172
  copyFolderDisclaimer: "Dette lager en kopi av mappen. Eventuelle endringer i originalmappen vil ikke bli oppdatert her.",
1172
1173
  loginCopyFolderPitch: "Ønsker du å kopiere denne mappen?",
1174
+ loginSaveFolderLinkPitch: "Ønsker du å lagre lenken til denne delte mappen?",
1173
1175
  help: "Hjelp",
1174
1176
  more: "Flere valg",
1175
1177
  selectView: "Velg visning",
@@ -922,6 +922,7 @@ declare const messages: {
922
922
  sharedFolder: string;
923
923
  unShare: string;
924
924
  link: string;
925
+ savedLink: string;
925
926
  copyLink: string;
926
927
  header: {
927
928
  shared: string;
@@ -1153,6 +1154,7 @@ declare const messages: {
1153
1154
  examLockInfo: string;
1154
1155
  copyFolderDisclaimer: string;
1155
1156
  loginCopyFolderPitch: string;
1157
+ loginSaveFolderLinkPitch: string;
1156
1158
  help: string;
1157
1159
  more: string;
1158
1160
  selectView: string;
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _licenses = require("@ndla/licenses");
8
8
  var _model = _interopRequireDefault(require("../model"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  /**
11
11
  * Copyright (c) 2018-present, NDLA.
12
12
  *
@@ -939,6 +939,7 @@ const messages = {
939
939
  sharedFolder: "Delt mappe",
940
940
  unShare: "Delinga er avslutta. Mappa er ikkje lenger delt",
941
941
  link: "Lenka er kopiert",
942
+ savedLink: "Lenka til {{ name }} er lagt til i Mine mapper.",
942
943
  copyLink: "Kopier lenke til mappa",
943
944
  header: {
944
945
  shared: "Denne mappa er delt"
@@ -1170,6 +1171,7 @@ const messages = {
1170
1171
  examLockInfo: "Redigering av innhald på Min NDLA er deaktivert for elevar i eksamensperioden.",
1171
1172
  copyFolderDisclaimer: "Dette lagar ein kopi av mappa. Eventuelle endringar i originalmappa vil ikkje bli oppdatert her.",
1172
1173
  loginCopyFolderPitch: "Ønsker du å kopiere denne mappa?",
1174
+ loginSaveFolderLinkPitch: "Ønsker du å lagra lenka til denne delte mappa?",
1173
1175
  help: "Hjelp",
1174
1176
  more: "Fleire val",
1175
1177
  selectView: "Velg visning",
@@ -923,6 +923,7 @@ declare const messages: {
923
923
  unShare: string;
924
924
  copyLink: string;
925
925
  link: string;
926
+ savedLink: string;
926
927
  header: {
927
928
  shared: string;
928
929
  };
@@ -1153,6 +1154,7 @@ declare const messages: {
1153
1154
  examLockInfo: string;
1154
1155
  copyFolderDisclaimer: string;
1155
1156
  loginCopyFolderPitch: string;
1157
+ loginSaveFolderLinkPitch: string;
1156
1158
  help: string;
1157
1159
  more: string;
1158
1160
  selectView: string;
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _licenses = require("@ndla/licenses");
8
8
  var _model = _interopRequireDefault(require("../model"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  /**
11
11
  * Copyright (c) 2018-present, NDLA.
12
12
  *
@@ -940,6 +940,7 @@ const messages = {
940
940
  unShare: "Delingen er avsluttet. Mappen er ikke lenger delt.",
941
941
  copyLink: "Kopier lenke til mappa",
942
942
  link: "Lenken er kopiert",
943
+ savedLink: "Lenke til {{ name }} er lagt til i Mine mapper.",
943
944
  header: {
944
945
  shared: "Denne mappa er delt"
945
946
  },
@@ -1170,6 +1171,7 @@ const messages = {
1170
1171
  examLockInfo: "Redigering av innhold på Min NDLA er deaktivert for elever i eksamensperioden.",
1171
1172
  copyFolderDisclaimer: "Dette lager en kopi av mappen. Eventuelle endringer i originalmappen vil ikke bli oppdatert her.",
1172
1173
  loginCopyFolderPitch: "Ønsker du å kopiere denne mappen?",
1174
+ loginSaveFolderLinkPitch: "Ønsker du å lagre lenken til denne delte mappen?",
1173
1175
  help: "Hjelp",
1174
1176
  more: "Flere valg",
1175
1177
  selectView: "Velg visning",
@@ -923,6 +923,7 @@ declare const messages: {
923
923
  unShare: string;
924
924
  copyLink: string;
925
925
  link: string;
926
+ savedLink: string;
926
927
  header: {
927
928
  shared: string;
928
929
  };
@@ -1153,6 +1154,7 @@ declare const messages: {
1153
1154
  examLockInfo: string;
1154
1155
  copyFolderDisclaimer: string;
1155
1156
  loginCopyFolderPitch: string;
1157
+ loginSaveFolderLinkPitch: string;
1156
1158
  help: string;
1157
1159
  more: string;
1158
1160
  selectView: string;
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _licenses = require("@ndla/licenses");
8
8
  var _model = _interopRequireDefault(require("../model"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  /**
11
11
  * Copyright (c) 2018-present, NDLA.
12
12
  *
@@ -940,6 +940,7 @@ const messages = {
940
940
  unShare: "Delingen er avsluttet. Mappen er ikke lenger delt.",
941
941
  copyLink: "Kopier lenke til mappa",
942
942
  link: "Lenken er kopiert",
943
+ savedLink: "Lenke til {{ name }} er lagt til i Mine mapper.",
943
944
  header: {
944
945
  shared: "Denne mappa er delt"
945
946
  },
@@ -1170,6 +1171,7 @@ const messages = {
1170
1171
  examLockInfo: "Redigering av innhold på Min NDLA er deaktivert for elever i eksamensperioden.",
1171
1172
  copyFolderDisclaimer: "Dette lager en kopi av mappen. Eventuelle endringer i originalmappen vil ikke bli oppdatert her.",
1172
1173
  loginCopyFolderPitch: "Ønsker du å kopiere denne mappen?",
1174
+ loginSaveFolderLinkPitch: "Ønsker du å lagre lenken til denne delte mappen?",
1173
1175
  help: "Hjelp",
1174
1176
  more: "Flere valg",
1175
1177
  selectView: "Velg visning",
@@ -7,7 +7,7 @@ exports.resourceTypeColor = exports.default = void 0;
7
7
  var _core = require("@ndla/core");
8
8
  var _model = _interopRequireDefault(require("../model"));
9
9
  var _ContentType = require("../model/ContentType");
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
11
  /**
12
12
  * Copyright (c) 2022-present, NDLA.
13
13
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndla/ui",
3
- "version": "53.0.0",
3
+ "version": "54.0.0",
4
4
  "description": "UI component library for NDLA.",
5
5
  "license": "GPL-3.0",
6
6
  "main": "lib/index.js",
@@ -31,19 +31,19 @@
31
31
  "types"
32
32
  ],
33
33
  "dependencies": {
34
- "@ndla/accordion": "^4.0.0",
35
- "@ndla/button": "^13.0.0",
36
- "@ndla/core": "^5.0.0",
37
- "@ndla/dropdown-menu": "^1.0.37",
38
- "@ndla/forms": "^8.0.0",
34
+ "@ndla/accordion": "^4.0.2",
35
+ "@ndla/button": "^13.0.2",
36
+ "@ndla/core": "^5.0.1",
37
+ "@ndla/dropdown-menu": "^1.0.38",
38
+ "@ndla/forms": "^8.0.2",
39
39
  "@ndla/hooks": "^2.1.7",
40
- "@ndla/icons": "^6.1.4",
40
+ "@ndla/icons": "^6.1.5",
41
41
  "@ndla/licenses": "^7.2.6",
42
- "@ndla/modal": "^6.0.0",
43
- "@ndla/notion": "^7.0.0",
44
- "@ndla/safelink": "^5.1.3",
45
- "@ndla/tooltip": "^8.0.0",
46
- "@ndla/typography": "^0.4.20",
42
+ "@ndla/modal": "^6.0.1",
43
+ "@ndla/notion": "^7.0.1",
44
+ "@ndla/safelink": "^5.1.5",
45
+ "@ndla/tooltip": "^8.0.1",
46
+ "@ndla/typography": "^0.4.21",
47
47
  "@ndla/util": "^4.0.4",
48
48
  "@radix-ui/react-popover": "^1.0.7",
49
49
  "@radix-ui/react-slider": "^1.1.2",
@@ -51,6 +51,7 @@
51
51
  "html-react-parser": "^5.1.8",
52
52
  "i18next-browser-languagedetector": "^7.1.0",
53
53
  "lodash.throttle": "^4.1.1",
54
+ "punycode.js": "^2.3.1",
54
55
  "react-device-detect": "^2.2.3",
55
56
  "react-select": "^5.8.0",
56
57
  "react-swipeable": "^7.0.0"
@@ -65,8 +66,8 @@
65
66
  "react-router-dom": "> 6.0.0"
66
67
  },
67
68
  "devDependencies": {
68
- "@ndla/types-backend": "^0.2.64",
69
- "@ndla/types-embed": "^4.1.6",
69
+ "@ndla/types-backend": "^0.2.82",
70
+ "@ndla/types-embed": "^4.1.7",
70
71
  "css-loader": "^6.7.3",
71
72
  "mini-css-extract-plugin": "^2.7.5",
72
73
  "sass-loader": "^13.2.2",
@@ -76,5 +77,5 @@
76
77
  "publishConfig": {
77
78
  "access": "public"
78
79
  },
79
- "gitHead": "fe4060794eb3eafc6231ef802b7f44df65155467"
80
+ "gitHead": "c778ba48c327f14eaae3e2da21ed24b183719167"
80
81
  }
@@ -61,13 +61,11 @@ export default {
61
61
  argTypes: {
62
62
  actionButton: {
63
63
  table: {
64
+ disable: true,
64
65
  type: {
65
66
  detail: "Takes any ReactNode, but as the name implies: use a button component, preferably an icon-button",
66
67
  },
67
68
  },
68
- control: {
69
- type: null,
70
- },
71
69
  },
72
70
  },
73
71
  } as Meta<typeof CodeBlock>;
@@ -11,7 +11,7 @@ import { AudioEmbedData, AudioMeta } from "@ndla/types-embed";
11
11
  import AudioEmbed from "./AudioEmbed";
12
12
  import StoryFavoriteButton from "../../../../stories/StoryFavoriteButton";
13
13
  import { ArticleWrapper } from "../Article";
14
- import { OneColumn } from "../Layout";
14
+ import LayoutItem, { OneColumn } from "../Layout";
15
15
 
16
16
  const embedData: AudioEmbedData = {
17
17
  resource: "audio",
@@ -190,11 +190,11 @@ const meta: Meta<typeof AudioEmbed> = {
190
190
  (Story) => (
191
191
  <OneColumn>
192
192
  <ArticleWrapper modifier="clean">
193
- <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
193
+ <LayoutItem layout="center">
194
194
  <section>
195
195
  <Story />
196
196
  </section>
197
- </section>
197
+ </LayoutItem>
198
198
  </ArticleWrapper>
199
199
  </OneColumn>
200
200
  ),
@@ -11,7 +11,7 @@ import { BrightcoveData, BrightcoveEmbedData, BrightcoveMetaData } from "@ndla/t
11
11
  import BrightcoveEmbed from "./BrightcoveEmbed";
12
12
  import StoryFavoriteButton from "../../../../stories/StoryFavoriteButton";
13
13
  import { ArticleWrapper } from "../Article";
14
- import { OneColumn } from "../Layout";
14
+ import LayoutItem, { OneColumn } from "../Layout";
15
15
 
16
16
  const embedData: BrightcoveEmbedData = {
17
17
  resource: "brightcove",
@@ -163,11 +163,11 @@ const meta: Meta<typeof BrightcoveEmbed> = {
163
163
  (Story) => (
164
164
  <OneColumn>
165
165
  <ArticleWrapper modifier="clean">
166
- <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
166
+ <LayoutItem layout="center">
167
167
  <section>
168
168
  <Story />
169
169
  </section>
170
- </section>
170
+ </LayoutItem>
171
171
  </ArticleWrapper>
172
172
  </OneColumn>
173
173
  ),
@@ -11,7 +11,7 @@ import { ConceptData, ConceptEmbedData } from "@ndla/types-embed";
11
11
  import ConceptEmbed from "./ConceptEmbed";
12
12
  import StoryFavoriteButton from "../../../../stories/StoryFavoriteButton";
13
13
  import { ArticleWrapper } from "../Article";
14
- import { OneColumn } from "../Layout";
14
+ import LayoutItem, { OneColumn } from "../Layout";
15
15
 
16
16
  const blockEmbedData: ConceptEmbedData = {
17
17
  contentId: "35",
@@ -235,11 +235,11 @@ const meta: Meta<typeof ConceptEmbed> = {
235
235
  (Story) => (
236
236
  <OneColumn>
237
237
  <ArticleWrapper modifier="clean">
238
- <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
238
+ <LayoutItem layout="center">
239
239
  <section>
240
240
  <Story />
241
241
  </section>
242
- </section>
242
+ </LayoutItem>
243
243
  </ArticleWrapper>
244
244
  </OneColumn>
245
245
  ),
@@ -177,6 +177,7 @@ interface InlineConceptProps extends ConceptNotionData {
177
177
  conceptHeartButton?: ReactNode;
178
178
  exampleIds?: string;
179
179
  exampleLangs?: string;
180
+ setSelection?: (e: MouseEvent) => void;
180
181
  }
181
182
 
182
183
  const NotionButton = styled.span`
@@ -238,6 +239,7 @@ export const InlineConcept = forwardRef<HTMLSpanElement, InlineConceptProps>(
238
239
  lang,
239
240
  exampleIds,
240
241
  exampleLangs,
242
+ setSelection,
241
243
  ...rest
242
244
  },
243
245
  ref,
@@ -258,13 +260,29 @@ export const InlineConcept = forwardRef<HTMLSpanElement, InlineConceptProps>(
258
260
  }
259
261
  }, []);
260
262
 
263
+ const preventAutoFocusInEditor = useCallback(
264
+ (e: MouseEvent) => {
265
+ e.preventDefault();
266
+ e.stopPropagation();
267
+ setSelection?.(e);
268
+ },
269
+ [setSelection],
270
+ );
271
+
261
272
  return (
262
273
  <Root modal={isMobile} onOpenChange={onOpenChange}>
263
274
  <StyledAnchor ref={anchorRef} asChild>
264
275
  <StyledAnchorSpan contentEditable={false} />
265
276
  </StyledAnchor>
266
- <Trigger asChild type={undefined}>
267
- <NotionButton role="button" data-open={modalPos !== -9999} tabIndex={0} ref={ref} {...rest}>
277
+ <Trigger asChild>
278
+ <NotionButton
279
+ onMouseDown={(e) => (setSelection ? preventAutoFocusInEditor(e.nativeEvent) : undefined)}
280
+ data-open={modalPos !== -9999}
281
+ role="button"
282
+ tabIndex={0}
283
+ ref={ref}
284
+ {...rest}
285
+ >
268
286
  {linkText}
269
287
  </NotionButton>
270
288
  </Trigger>
@@ -10,7 +10,7 @@ import { Meta, StoryObj } from "@storybook/react";
10
10
  import { OembedEmbedData, OembedData } from "@ndla/types-embed";
11
11
  import ExternalEmbed from "./ExternalEmbed";
12
12
  import { ArticleWrapper } from "../Article";
13
- import { OneColumn } from "../Layout";
13
+ import LayoutItem, { OneColumn } from "../Layout";
14
14
 
15
15
  const embedData: OembedEmbedData = {
16
16
  resource: "external",
@@ -57,11 +57,11 @@ const meta: Meta<typeof ExternalEmbed> = {
57
57
  (Story) => (
58
58
  <OneColumn>
59
59
  <ArticleWrapper modifier="clean">
60
- <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
60
+ <LayoutItem layout="center">
61
61
  <section>
62
62
  <Story />
63
63
  </section>
64
- </section>
64
+ </LayoutItem>
65
65
  </ArticleWrapper>
66
66
  </OneColumn>
67
67
  ),
@@ -10,7 +10,7 @@ import { Meta, StoryObj } from "@storybook/react";
10
10
  import { H5pEmbedData, H5pData } from "@ndla/types-embed";
11
11
  import H5pEmbed from "./H5pEmbed";
12
12
  import { ArticleWrapper } from "../Article";
13
- import { OneColumn } from "../Layout";
13
+ import LayoutItem, { OneColumn } from "../Layout";
14
14
 
15
15
  const embedData: H5pEmbedData = {
16
16
  resource: "h5p",
@@ -54,11 +54,11 @@ const meta: Meta<typeof H5pEmbed> = {
54
54
  (Story) => (
55
55
  <OneColumn>
56
56
  <ArticleWrapper modifier="clean">
57
- <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
57
+ <LayoutItem layout="center">
58
58
  <section>
59
59
  <Story />
60
60
  </section>
61
- </section>
61
+ </LayoutItem>
62
62
  </ArticleWrapper>
63
63
  </OneColumn>
64
64
  ),
@@ -10,7 +10,7 @@ import { Meta, StoryObj } from "@storybook/react";
10
10
  import { IframeData, IframeEmbedData } from "@ndla/types-embed";
11
11
  import IframeEmbed from "./IframeEmbed";
12
12
  import { ArticleWrapper } from "../Article";
13
- import { OneColumn } from "../Layout";
13
+ import LayoutItem, { OneColumn } from "../Layout";
14
14
 
15
15
  const embedData: IframeEmbedData = {
16
16
  width: "708px",
@@ -29,11 +29,11 @@ const meta: Meta<typeof IframeEmbed> = {
29
29
  (Story) => (
30
30
  <OneColumn>
31
31
  <ArticleWrapper modifier="clean">
32
- <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
32
+ <LayoutItem layout="center">
33
33
  <section>
34
34
  <Story />
35
35
  </section>
36
- </section>
36
+ </LayoutItem>
37
37
  </ArticleWrapper>
38
38
  </OneColumn>
39
39
  ),
@@ -13,7 +13,7 @@ import { ImageEmbedData } from "@ndla/types-embed";
13
13
  import ImageEmbed from "./ImageEmbed";
14
14
  import StoryFavoriteButton from "../../../../stories/StoryFavoriteButton";
15
15
  import { ArticleWrapper } from "../Article";
16
- import { OneColumn } from "../Layout";
16
+ import LayoutItem, { OneColumn } from "../Layout";
17
17
 
18
18
  const embedData: ImageEmbedData = {
19
19
  resource: "image",
@@ -96,11 +96,11 @@ const meta: Meta<typeof ImageEmbed> = {
96
96
  (Story) => (
97
97
  <OneColumn>
98
98
  <ArticleWrapper modifier="clean">
99
- <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
99
+ <LayoutItem layout="center">
100
100
  <section>
101
101
  <Story />
102
102
  </section>
103
- </section>
103
+ </LayoutItem>
104
104
  </ArticleWrapper>
105
105
  </OneColumn>
106
106
  ),
@@ -161,6 +161,10 @@ const ImageEmbed = ({
161
161
 
162
162
  const { data, embedData } = embed;
163
163
 
164
+ // Full-size figures automatically get a margin of {spacing.normal} on its y-axis if a float is not set (or if float is an empty string).
165
+ // This adds some margin to normal figures within an article, but should not happen for figures in a grid.
166
+ const floatAttr = inGrid && !embedData.align ? {} : { "data-float": embedData.align };
167
+
164
168
  const altText = embedData.alt || "";
165
169
 
166
170
  const figureType = getFigureType(embedData.size, embedData.align);
@@ -172,7 +176,7 @@ const ImageEmbed = ({
172
176
  const isCopyrighted = data.copyright.license.license.toLowerCase() === COPYRIGHTED;
173
177
 
174
178
  return (
175
- <StyledFigure type={imageSizes ? undefined : figureType} data-float={embedData.align}>
179
+ <StyledFigure type={imageSizes ? undefined : figureType} {...floatAttr}>
176
180
  {children}
177
181
  <ImageWrapper
178
182
  src={!isCopyrighted ? canonicalUrl?.(data) : undefined}
@@ -10,7 +10,7 @@ import { Meta, StoryObj } from "@storybook/react";
10
10
  import { RelatedContentMetaData } from "@ndla/types-embed";
11
11
  import RelatedContentEmbed from "./RelatedContentEmbed";
12
12
  import { ArticleWrapper } from "../Article";
13
- import { OneColumn } from "../Layout";
13
+ import LayoutItem, { OneColumn } from "../Layout";
14
14
  import RelatedArticleList from "../RelatedArticleList";
15
15
 
16
16
  const filmResourceMeta: RelatedContentMetaData = {
@@ -369,11 +369,11 @@ const meta: Meta<typeof RelatedContentEmbed> = {
369
369
  (Story) => (
370
370
  <OneColumn>
371
371
  <ArticleWrapper modifier="clean">
372
- <section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
372
+ <LayoutItem layout="center">
373
373
  <section>
374
374
  <Story />
375
375
  </section>
376
- </section>
376
+ </LayoutItem>
377
377
  </ArticleWrapper>
378
378
  </OneColumn>
379
379
  ),
@@ -404,6 +404,17 @@ const linkEmbed2: RelatedContentMetaData = {
404
404
  status: "success",
405
405
  };
406
406
 
407
+ const linkEmbed3: RelatedContentMetaData = {
408
+ resource: "related-content",
409
+ embedData: {
410
+ resource: "related-content",
411
+ title: "Valg av tillitselev fra klassen",
412
+ url: "https://xn--elevrd-mua.no",
413
+ },
414
+ data: undefined,
415
+ status: "success",
416
+ };
417
+
407
418
  export const RelatedContentStory: StoryObj<typeof RelatedContentEmbed> = {
408
419
  render: () => (
409
420
  <RelatedArticleList>
@@ -429,6 +440,7 @@ export const WithLinks: StoryObj<typeof RelatedContentEmbed> = {
429
440
  <RelatedArticleList>
430
441
  <RelatedContentEmbed embed={linkEmbed1} />
431
442
  <RelatedContentEmbed embed={linkEmbed2} />
443
+ <RelatedContentEmbed embed={linkEmbed3} />
432
444
  </RelatedArticleList>
433
445
  ),
434
446
  };
@@ -6,6 +6,7 @@
6
6
  *
7
7
  */
8
8
 
9
+ import punycode from "punycode/";
9
10
  import { useTranslation } from "react-i18next";
10
11
  import { RelatedContentMetaData } from "@ndla/types-embed";
11
12
  import { contentTypeMapping } from "../model/ContentType";
@@ -53,7 +54,9 @@ const RelatedContentEmbed = ({ embed, isOembed, subject, ndlaFrontendDomain }: P
53
54
  type={"external"}
54
55
  linkInfo={`${t("related.linkInfo")} ${
55
56
  // Get domain name only from url
56
- embedData.url.match(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:/\n]+)/im)?.[1] || embedData.url
57
+ punycode.toUnicode(
58
+ embedData.url.match(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:/\n]+)/im)?.[1] || embedData.url,
59
+ )
57
60
  }`}
58
61
  />
59
62
  );