@ndla/ui 56.0.18-alpha.0 → 56.0.20-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 (115) hide show
  1. package/dist/panda.buildinfo.json +10 -8
  2. package/dist/styles.css +35 -29
  3. package/es/Article/Article.js +3 -3
  4. package/es/Article/ArticleByline.js +5 -4
  5. package/es/Article/index.js +1 -2
  6. package/es/AudioPlayer/AudioPlayer.js +1 -1
  7. package/es/CampaignBlock/CampaignBlock.js +25 -13
  8. package/es/Concept/Concept.js +7 -1
  9. package/es/ContactBlock/ContactBlock.js +0 -1
  10. package/es/ContentTypeBadge/ContentTypeBadgeNew.js +0 -3
  11. package/es/ContentTypeHero/ContentTypeHero.js +2 -8
  12. package/es/Embed/AudioEmbed.js +3 -0
  13. package/es/Embed/BrightcoveEmbed.js +5 -1
  14. package/es/Embed/ConceptEmbed.js +23 -11
  15. package/es/Embed/ConceptListEmbed.js +2 -1
  16. package/es/Embed/ImageEmbed.js +3 -0
  17. package/es/Embed/index.js +1 -0
  18. package/es/FileList/FileList.js +5 -1
  19. package/es/FileList/PdfFile.js +6 -1
  20. package/es/FileList/index.js +1 -1
  21. package/es/Grid/Grid.js +0 -1
  22. package/es/LicenseByline/EmbedByline.js +4 -1
  23. package/es/TreeStructure/TreeStructure.js +0 -2
  24. package/es/i18n/index.js +1 -1
  25. package/es/i18n/useComponentTranslations.js +62 -0
  26. package/es/index.js +7 -5
  27. package/es/locale/messages-en.js +31 -5
  28. package/es/locale/messages-nb.js +31 -5
  29. package/es/locale/messages-nn.js +79 -53
  30. package/es/locale/messages-se.js +31 -5
  31. package/es/locale/messages-sma.js +31 -5
  32. package/es/styles.css +35 -29
  33. package/es/utils/licenseAttributes.js +18 -0
  34. package/lib/Article/Article.js +3 -3
  35. package/lib/Article/ArticleByline.js +5 -4
  36. package/lib/Article/index.d.ts +0 -1
  37. package/lib/Article/index.js +1 -8
  38. package/lib/AudioPlayer/AudioPlayer.js +1 -1
  39. package/lib/CampaignBlock/CampaignBlock.js +25 -13
  40. package/lib/Concept/Concept.d.ts +2 -0
  41. package/lib/Concept/Concept.js +7 -1
  42. package/lib/ContactBlock/ContactBlock.js +0 -1
  43. package/lib/ContentTypeBadge/ContentTypeBadgeNew.js +0 -3
  44. package/lib/ContentTypeHero/ContentTypeHero.js +2 -7
  45. package/lib/Embed/AudioEmbed.js +3 -0
  46. package/lib/Embed/BrightcoveEmbed.d.ts +2 -1
  47. package/lib/Embed/BrightcoveEmbed.js +5 -1
  48. package/lib/Embed/ConceptEmbed.d.ts +3 -1
  49. package/lib/Embed/ConceptEmbed.js +23 -11
  50. package/lib/Embed/ConceptListEmbed.js +2 -1
  51. package/lib/Embed/ImageEmbed.js +3 -0
  52. package/lib/Embed/index.d.ts +1 -0
  53. package/lib/Embed/index.js +7 -0
  54. package/lib/FileList/FileList.d.ts +3 -1
  55. package/lib/FileList/FileList.js +5 -1
  56. package/lib/FileList/PdfFile.js +6 -1
  57. package/lib/FileList/index.d.ts +1 -1
  58. package/lib/FileList/index.js +6 -0
  59. package/lib/Grid/Grid.js +0 -1
  60. package/lib/LicenseByline/EmbedByline.js +4 -1
  61. package/lib/TreeStructure/TreeStructure.js +0 -2
  62. package/lib/i18n/index.d.ts +1 -1
  63. package/lib/i18n/index.js +12 -0
  64. package/lib/i18n/useComponentTranslations.d.ts +31 -0
  65. package/lib/i18n/useComponentTranslations.js +65 -2
  66. package/lib/index.d.ts +6 -4
  67. package/lib/index.js +38 -6
  68. package/lib/locale/messages-en.d.ts +26 -0
  69. package/lib/locale/messages-en.js +31 -5
  70. package/lib/locale/messages-nb.d.ts +26 -0
  71. package/lib/locale/messages-nb.js +31 -5
  72. package/lib/locale/messages-nn.d.ts +26 -0
  73. package/lib/locale/messages-nn.js +79 -53
  74. package/lib/locale/messages-se.d.ts +26 -0
  75. package/lib/locale/messages-se.js +31 -5
  76. package/lib/locale/messages-sma.d.ts +26 -0
  77. package/lib/locale/messages-sma.js +31 -5
  78. package/lib/styles.css +35 -29
  79. package/lib/utils/licenseAttributes.d.ts +16 -0
  80. package/lib/utils/licenseAttributes.js +25 -0
  81. package/package.json +8 -8
  82. package/src/Article/Article.tsx +7 -6
  83. package/src/Article/ArticleByline.tsx +2 -3
  84. package/src/Article/index.ts +0 -2
  85. package/src/AudioPlayer/AudioPlayer.tsx +5 -3
  86. package/src/CampaignBlock/CampaignBlock.tsx +23 -12
  87. package/src/Concept/Concept.tsx +8 -3
  88. package/src/ContactBlock/ContactBlock.tsx +0 -1
  89. package/src/ContentTypeBadge/ContentTypeBadgeNew.tsx +0 -3
  90. package/src/ContentTypeHero/ContentTypeHero.tsx +2 -7
  91. package/src/Embed/AudioEmbed.tsx +4 -1
  92. package/src/Embed/BrightcoveEmbed.tsx +6 -3
  93. package/src/Embed/ConceptEmbed.tsx +21 -11
  94. package/src/Embed/ConceptListEmbed.tsx +1 -0
  95. package/src/Embed/ImageEmbed.tsx +4 -0
  96. package/src/Embed/index.ts +1 -0
  97. package/src/FileList/FileList.tsx +16 -10
  98. package/src/FileList/PdfFile.tsx +8 -2
  99. package/src/FileList/index.ts +1 -1
  100. package/src/Grid/Grid.tsx +0 -1
  101. package/src/LicenseByline/EmbedByline.tsx +2 -1
  102. package/src/TreeStructure/TreeStructure.tsx +0 -1
  103. package/src/i18n/index.ts +2 -0
  104. package/src/i18n/useComponentTranslations.ts +79 -0
  105. package/src/index.ts +8 -2
  106. package/src/locale/messages-en.ts +30 -3
  107. package/src/locale/messages-nb.ts +30 -3
  108. package/src/locale/messages-nn.ts +78 -51
  109. package/src/locale/messages-se.ts +30 -3
  110. package/src/locale/messages-sma.ts +30 -3
  111. package/src/utils/licenseAttributes.ts +23 -0
  112. package/es/Article/ArticleParagraph.js +0 -23
  113. package/lib/Article/ArticleParagraph.d.ts +0 -13
  114. package/lib/Article/ArticleParagraph.js +0 -30
  115. package/src/Article/ArticleParagraph.tsx +0 -27
@@ -8,6 +8,7 @@
8
8
 
9
9
  import { ComponentPropsWithoutRef } from "react";
10
10
  import { useTranslation } from "react-i18next";
11
+ import { ark } from "@ark-ui/react";
11
12
  import { Heading } from "@ndla/primitives";
12
13
  import { styled } from "@ndla/styled-system/jsx";
13
14
 
@@ -21,19 +22,24 @@ export const FileListWrapper = styled("div", {
21
22
  },
22
23
  });
23
24
 
24
- export const FileListItem = styled("li", {
25
- base: {
26
- background: "surface.infoSubtle",
27
- borderBlockEnd: "1px solid",
28
- borderColor: "stroke.default",
29
- display: "flex",
30
- justifyContent: "space-between",
25
+ export const FileListItem = styled(
26
+ ark.li,
27
+ {
28
+ base: {
29
+ listStyle: "none",
30
+ background: "surface.infoSubtle",
31
+ borderBlockEnd: "1px solid",
32
+ borderColor: "stroke.default",
33
+ display: "flex",
34
+ justifyContent: "space-between",
31
35
 
32
- _hover: {
33
- backgroundColor: "surface.infoSubtle.hover",
36
+ _hover: {
37
+ backgroundColor: "surface.infoSubtle.hover",
38
+ },
34
39
  },
35
40
  },
36
- });
41
+ { baseComponent: true },
42
+ );
37
43
 
38
44
  export const FileListEmbed = ({ children, ...rest }: Props) => {
39
45
  const { t } = useTranslation();
@@ -20,6 +20,12 @@ const StyledIframe = styled("iframe", {
20
20
  },
21
21
  });
22
22
 
23
+ const StyledListElement = styled("li", {
24
+ base: {
25
+ listStyle: "none",
26
+ },
27
+ });
28
+
23
29
  const StyledFigure = styled(Figure, {
24
30
  base: {
25
31
  display: "flex",
@@ -30,13 +36,13 @@ const StyledFigure = styled(Figure, {
30
36
 
31
37
  export const PdfFile = ({ title, url }: Props) => {
32
38
  return (
33
- <li>
39
+ <StyledListElement>
34
40
  <StyledFigure>
35
41
  <Heading asChild consumeCss textStyle="title.medium">
36
42
  <h4>{title}</h4>
37
43
  </Heading>
38
44
  <StyledIframe title={title} height="1050" src={url} />
39
45
  </StyledFigure>
40
- </li>
46
+ </StyledListElement>
41
47
  );
42
48
  };
@@ -6,6 +6,6 @@
6
6
  *
7
7
  */
8
8
 
9
- export { FileListEmbed, FileListItem } from "./FileList";
9
+ export { FileListEmbed, FileListItem, FileListWrapper } from "./FileList";
10
10
  export { File, FileListElement } from "./File";
11
11
  export { PdfFile } from "./PdfFile";
package/src/Grid/Grid.tsx CHANGED
@@ -18,7 +18,6 @@ const GridContainer = styled("div", {
18
18
  gridColumnGap: "medium",
19
19
  width: "100%",
20
20
  backgroundColor: "background.subtle",
21
- maxWidth: "surface.4xlarge",
22
21
  minWidth: "surface.xxsmall",
23
22
  gridTemplateColumns: "repeat(2, minmax(0, 1fr))",
24
23
  tabletDown: {
@@ -233,7 +233,8 @@ export const LicenseContainerContent = ({ children, copyright, type }: LicenseCo
233
233
  <>
234
234
  {children}
235
235
  {` ${t(`embed.type.${type}`)}${captionAuthors.length ? ": " : ""}`}
236
- {captionAuthors.map((author) => author.name).join(", ")}
236
+ {/*eslint-disable-next-line react/no-unknown-property */}
237
+ <span property="cc:attributionName">{captionAuthors.map((author) => author.name).join(", ")}</span>
237
238
  {license ? (
238
239
  <>
239
240
  {" / "}
@@ -293,7 +293,6 @@ const TreeStructureItem = ({ folder, targetResource }: TreeStructureItemProps) =
293
293
 
294
294
  const FolderIcon = folder.status === "shared" ? StyledFolderUserLine : StyledFolderLine;
295
295
 
296
- // TODO: Pressing enter selects the item and closes the popover immediately. Do we actually want this? Old behavior.
297
296
  const onKeyDown = useCallback(
298
297
  (e: KeyboardEvent<HTMLElement>) => {
299
298
  if (e.key === "Enter") {
package/src/i18n/index.ts CHANGED
@@ -13,4 +13,6 @@ export {
13
13
  useTagSelectorTranslations,
14
14
  useTagsInputTranslations,
15
15
  usePaginationTranslations,
16
+ useAudioSearchTranslations,
17
+ useImageSearchTranslations,
16
18
  } from "./useComponentTranslations";
@@ -11,6 +11,10 @@ import type { ComboboxCollectionItem } from "@ark-ui/react";
11
11
  import type { ComboboxRootProps, PaginationRootProps, TagsInputRootProps } from "@ndla/primitives";
12
12
  import { TagSelectorRootProps } from "../TagSelector/TagSelector";
13
13
 
14
+ type DeepPartial<T> = {
15
+ [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
16
+ };
17
+
14
18
  export const useTagsInputTranslations = (
15
19
  translations?: Partial<TagsInputRootProps["translations"]>,
16
20
  ): TagsInputRootProps["translations"] => {
@@ -70,3 +74,78 @@ export const usePaginationTranslations = (
70
74
  ...translations,
71
75
  };
72
76
  };
77
+
78
+ // TODO: Deduplicate this and place it somewhere smart. Maybe core?
79
+ interface AudioSearchTranslations {
80
+ searchPlaceholder: string;
81
+ searchButtonTitle: string;
82
+ useAudio: string;
83
+ noResults: string;
84
+ paginationTranslations: PaginationRootProps["translations"];
85
+ }
86
+
87
+ export interface PreviewTranslations {
88
+ creatorsLabel: string;
89
+ license: string;
90
+ caption: string;
91
+ altText: string;
92
+ modelRelease: string;
93
+ tags: string;
94
+ close: string;
95
+ checkboxLabel?: string;
96
+ missingTitleFallback?: string;
97
+ useImageTitle: string;
98
+ }
99
+
100
+ export interface ImageSearchTranslations {
101
+ searchPlaceholder: string;
102
+ searchButtonTitle: string;
103
+ imagePreview: PreviewTranslations;
104
+ paginationTranslations: PaginationRootProps["translations"];
105
+ }
106
+
107
+ export const useImageSearchTranslations = (
108
+ translations: DeepPartial<ImageSearchTranslations> = {},
109
+ ): ImageSearchTranslations => {
110
+ const { t } = useTranslation("translation", { keyPrefix: "component.imageSearch" });
111
+ const paginationTranslations = usePaginationTranslations();
112
+
113
+ const { imagePreview, paginationTranslations: fallbackPaginationTranslations, ...remaining } = translations;
114
+
115
+ return {
116
+ searchPlaceholder: t("searchPlaceholder"),
117
+ searchButtonTitle: t("searchButtonTitle"),
118
+ imagePreview: {
119
+ creatorsLabel: t("imagePreview.creatorsLabel"),
120
+ license: t("imagePreview.license"),
121
+ caption: t("imagePreview.caption"),
122
+ altText: t("imagePreview.altText"),
123
+ modelRelease: t("imagePreview.modelRelease"),
124
+ tags: t("imagePreview.tags"),
125
+ close: t("close"),
126
+ checkboxLabel: t("imagePreview.checkboxLabel"),
127
+ useImageTitle: t("imagePreview.useImageTitle"),
128
+ ...imagePreview,
129
+ },
130
+ paginationTranslations: { ...paginationTranslations, ...fallbackPaginationTranslations },
131
+ ...remaining,
132
+ };
133
+ };
134
+
135
+ export const useAudioSearchTranslations = (
136
+ translations: DeepPartial<AudioSearchTranslations> = {},
137
+ ): AudioSearchTranslations => {
138
+ const { t } = useTranslation("translation", { keyPrefix: "component.audioSearch" });
139
+ const paginationTranslations = usePaginationTranslations();
140
+
141
+ const { paginationTranslations: fallbackPaginationTranslations, ...remaining } = translations;
142
+
143
+ return {
144
+ searchPlaceholder: t("searchPlaceholder"),
145
+ searchButtonTitle: t("searchButtonTitle"),
146
+ useAudio: t("useAudio"),
147
+ noResults: t("noResults"),
148
+ paginationTranslations: { ...paginationTranslations, ...fallbackPaginationTranslations },
149
+ ...remaining,
150
+ };
151
+ };
package/src/index.ts CHANGED
@@ -9,6 +9,8 @@
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 { Concept } from "./Concept/Concept";
13
+
12
14
  export {
13
15
  ImageEmbed,
14
16
  getCrop,
@@ -29,6 +31,7 @@ export {
29
31
  UuDisclaimerEmbed,
30
32
  CopyrightEmbed,
31
33
  CodeEmbed,
34
+ InlineTriggerButton,
32
35
  } from "./Embed";
33
36
 
34
37
  export { LicenseLink, EmbedByline } from "./LicenseByline";
@@ -39,7 +42,6 @@ export {
39
42
  ArticleFootNotes,
40
43
  ArticleWrapper,
41
44
  Article,
42
- ArticleParagraph,
43
45
  ArticleFooter,
44
46
  ArticleHeader,
45
47
  ArticleContent,
@@ -55,7 +57,7 @@ export { default as RelatedArticleList, RelatedArticle } from "./RelatedArticleL
55
57
 
56
58
  export { ErrorResourceAccessDenied, default as ErrorMessage } from "./ErrorMessage";
57
59
 
58
- export { FileListEmbed, File, PdfFile, FileListItem, FileListElement } from "./FileList";
60
+ export { FileListEmbed, File, PdfFile, FileListItem, FileListElement, FileListWrapper } from "./FileList";
59
61
 
60
62
  export { default as FactBox } from "./FactBox";
61
63
 
@@ -84,6 +86,8 @@ export {
84
86
  useTagSelectorTranslations,
85
87
  useComboboxTranslations,
86
88
  usePaginationTranslations,
89
+ useAudioSearchTranslations,
90
+ useImageSearchTranslations,
87
91
  } from "./i18n";
88
92
 
89
93
  export { default as LayoutItem, OneColumn, PageContainer } from "./Layout";
@@ -141,3 +145,5 @@ export { CodeBlock, codeLanguageOptions } from "./CodeBlock";
141
145
  export { ZendeskButton } from "./ZendeskButton/ZendeskButton";
142
146
 
143
147
  export type { ZendeskButtonProps } from "./ZendeskButton/ZendeskButton";
148
+
149
+ export { licenseAttributes } from "./utils/licenseAttributes";
@@ -922,6 +922,8 @@ const messages = {
922
922
  close: "Close fact box",
923
923
  },
924
924
  myNdla: {
925
+ description:
926
+ "My NDLA: Organize the content your way! Use NDLA’s chat robot (AI). Save and share with colleagues and students.",
925
927
  mainMenu: "Main menu",
926
928
  myNDLA: "My NDLA",
927
929
  myNDLAMenu: "My NDLA menu",
@@ -1012,6 +1014,8 @@ const messages = {
1012
1014
  posts: "post",
1013
1015
  posts_plural: "posts",
1014
1016
  subcategory: "Subcategories",
1017
+ votes: "reaction",
1018
+ votes_plural: "reactions",
1015
1019
  },
1016
1020
  cancel: {
1017
1021
  title: {
@@ -1075,6 +1079,8 @@ const messages = {
1075
1079
  unlock: "Unlock topic",
1076
1080
  lockDescription: "Do you want do lock this topic? This will prevent this topic from getting more posts.",
1077
1081
  unlockDescription: "Do you want do unlock this topic? This will prevent this topic from getting more posts.",
1082
+ votes: "reaction",
1083
+ votes_plural: "reactions",
1078
1084
  },
1079
1085
  posts: {
1080
1086
  title: "Posts",
@@ -1105,13 +1111,13 @@ const messages = {
1105
1111
  maxLength: "The maximum length for the text field is reached",
1106
1112
  error: "The field is required",
1107
1113
  },
1108
- bottomText: "Are you missing a category? Let our moderator know at ",
1114
+ bottomText: "Are you missing a category? You can request new categories. Use 'Ask NDLA' or send an email to ",
1109
1115
  moderatorEmail: "moderator@ndla.no",
1110
1116
  notification: {
1111
1117
  title: "Notifications",
1112
1118
  showAll: "View all notifications",
1113
1119
  description:
1114
- "Welcome to the arena for teachers in upper secondary education. This is <em>your</em> arena: a professional meeting place for discussion, inspiration, sharing, development, and collaboration.",
1120
+ "Welcome to NDLAs Arena. Here, you can discuss, share and cooperate with other teachers from all over Norway.",
1115
1121
  myNotification: "My notifications",
1116
1122
  markAll: "Mark all as read",
1117
1123
  subscribe: "You will now be notified of new replies to this topic",
@@ -1369,7 +1375,7 @@ const messages = {
1369
1375
  dragHandle: "Drag the category {{name}}",
1370
1376
  },
1371
1377
  favoriteSubjects: {
1372
- title: "My favorite subjects",
1378
+ title: "My subjects",
1373
1379
  subjects: "{{count}} subject",
1374
1380
  subjects_0: "{{count}} subjects",
1375
1381
  subjects_plural: "{{count}} subjects",
@@ -1499,6 +1505,27 @@ const messages = {
1499
1505
  lastPage: "Last page, page {{page}}",
1500
1506
  page: "Page {{page}}",
1501
1507
  },
1508
+ imageSearch: {
1509
+ searchPlaceholder: "Search images",
1510
+ searchButtonTitle: "Search",
1511
+ imagePreview: {
1512
+ creatorsLabel: "Image",
1513
+ license: "License",
1514
+ caption: "Caption",
1515
+ altText: "Alt-text",
1516
+ modelRelease: "Model released",
1517
+ tags: "Tags",
1518
+ checkboxLabel: "Set as meta image",
1519
+ close: "Close",
1520
+ useImageTitle: "Use image",
1521
+ },
1522
+ },
1523
+ audioSearch: {
1524
+ searchPlaceholder: "Search in audio files",
1525
+ searchButtonTitle: "Search",
1526
+ useAudio: "Chose audio",
1527
+ noResults: "No audio files found",
1528
+ },
1502
1529
  },
1503
1530
  };
1504
1531
 
@@ -922,6 +922,8 @@ const messages = {
922
922
  close: "Lukk faktaboks",
923
923
  },
924
924
  myNdla: {
925
+ description:
926
+ "Min NDLA: Organiser fagstoffet på din måte! Bruk NDLAs praterobot (AI/KI). Lagre og del med kolleger og elever.",
925
927
  mainMenu: "Hovedmeny",
926
928
  myNDLA: "Min NDLA",
927
929
  myNDLAMenu: "Min NDLA meny",
@@ -1012,6 +1014,8 @@ const messages = {
1012
1014
  posts: "innlegg",
1013
1015
  posts_plural: "innlegg",
1014
1016
  subcategory: "Tema",
1017
+ votes: "reaksjon",
1018
+ votes_plural: "reaksjoner",
1015
1019
  },
1016
1020
  publish: "Publiser",
1017
1021
  cancel: {
@@ -1076,6 +1080,8 @@ const messages = {
1076
1080
  lockDescription:
1077
1081
  "Vil du låse dette innlegget? Dette vil gjøre at innlegget ikke kan få flere kommentarer, og vil vises som låst.",
1078
1082
  unlockDescription: "Vil du låse opp dette innlegget? Dette vil gjøre at innlegget kan få flere kommentarer.",
1083
+ votes: "reaksjon",
1084
+ votes_plural: "reaksjoner",
1079
1085
  },
1080
1086
  posts: {
1081
1087
  title: "Innlegg",
@@ -1106,13 +1112,13 @@ const messages = {
1106
1112
  maxLength: "Maksimal lengde for tekstfeltet er nådd",
1107
1113
  error: "Feltet er påkrevd",
1108
1114
  },
1109
- bottomText: "Savner du en kategori? Gi vår moderator beskjed ",
1115
+ bottomText: "Savner du en kategori? Du kan be om nye kategorier. Bruk 'Spør NDLA' eller send en epost til ",
1110
1116
  moderatorEmail: "moderator@ndla.no",
1111
1117
  notification: {
1112
1118
  title: "Varslinger",
1113
1119
  showAll: "Se alle varslinger",
1114
1120
  description:
1115
- "Velkommen inn i arenaen for lærere i videregående opplæring! Dette er <em>din</em> arena: et faglig møtested for diskusjon, inspirasjon, deling og utviklende samarbeid.",
1121
+ "Velkommen til NDLAs Arena. Her kan du diskutere, dele og samarbeide med andre lærere fra hele Norge.",
1116
1122
  myNotification: "Mine varsler",
1117
1123
  markAll: "Merk alle som lest",
1118
1124
  subscribe: "Du får nå varsling om nye svar på dette innlegget",
@@ -1369,7 +1375,7 @@ const messages = {
1369
1375
  dragHandle: "Sorter kategorien {{name}}",
1370
1376
  },
1371
1377
  favoriteSubjects: {
1372
- title: "Mine favorittfag",
1378
+ title: "Mine fag",
1373
1379
  subjects: "{{count}} fag",
1374
1380
  subjects_0: "{{count}} fag",
1375
1381
  subjects_plural: "{{count}} fag",
@@ -1499,6 +1505,27 @@ const messages = {
1499
1505
  lastPage: "Siste side, side {{page}}",
1500
1506
  page: "Side {{page}}",
1501
1507
  },
1508
+ imageSearch: {
1509
+ searchPlaceholder: "Søk i bilder",
1510
+ searchButtonTitle: "Søk",
1511
+ imagePreview: {
1512
+ creatorsLabel: "Bilde",
1513
+ license: "Lisens",
1514
+ caption: "Bildetekst",
1515
+ altText: "Alt-tekst",
1516
+ modelRelease: "Modellklarert",
1517
+ tags: "Emneknagger",
1518
+ checkboxLabel: "Sett som metabilde",
1519
+ close: "Lukk",
1520
+ useImageTitle: "Bruk bildet",
1521
+ },
1522
+ },
1523
+ audioSearch: {
1524
+ searchPlaceholder: "Søk i lydfiler",
1525
+ searchButtonTitle: "Søk",
1526
+ useAudio: "Velg lyd",
1527
+ noResults: "Ingen resultater funnet",
1528
+ },
1502
1529
  },
1503
1530
  };
1504
1531