@ndla/ui 33.3.2 → 33.4.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.
@@ -440,6 +440,11 @@ declare const messages: {
440
440
  archived: string;
441
441
  };
442
442
  subjectsPage: {
443
+ filterSubjects: string;
444
+ scrollToGroup: string;
445
+ goToTop: string;
446
+ alphabeticSort: string;
447
+ subjectGroup: string;
443
448
  allSubjects: string;
444
449
  chooseSubject: string;
445
450
  errorDescription: string;
@@ -787,6 +792,7 @@ declare const messages: {
787
792
  };
788
793
  footer: {
789
794
  aboutNDLA: string;
795
+ socialMedia: string;
790
796
  selectLanguage: string;
791
797
  info: string;
792
798
  editorInChief: string;
@@ -244,6 +244,11 @@ var messages = _objectSpread(_objectSpread({
244
244
  archived: 'This is an expired and unmaintained subject.'
245
245
  },
246
246
  subjectsPage: {
247
+ filterSubjects: 'Filter subjects',
248
+ scrollToGroup: 'Scroll to group',
249
+ goToTop: 'Scroll to top',
250
+ alphabeticSort: 'Subjects grouped alphabetically',
251
+ subjectGroup: 'Group "{{ category }}"',
247
252
  allSubjects: 'All subjects',
248
253
  chooseSubject: 'Choose subject',
249
254
  errorDescription: 'Sorry, an error occurred while loading the subjects.',
@@ -582,6 +587,7 @@ var messages = _objectSpread(_objectSpread({
582
587
  },
583
588
  footer: {
584
589
  aboutNDLA: 'About NDLA',
590
+ socialMedia: 'Social media',
585
591
  selectLanguage: 'Choose language (språk): ',
586
592
  info: 'This webapplication is developed by NDLA as Open Source code.',
587
593
  editorInChief: 'Editor in chief: ',
@@ -440,6 +440,11 @@ declare const messages: {
440
440
  archived: string;
441
441
  };
442
442
  subjectsPage: {
443
+ filterSubjects: string;
444
+ scrollToGroup: string;
445
+ goToTop: string;
446
+ alphabeticSort: string;
447
+ subjectGroup: string;
443
448
  allSubjects: string;
444
449
  errorDescription: string;
445
450
  chooseSubject: string;
@@ -787,6 +792,7 @@ declare const messages: {
787
792
  };
788
793
  footer: {
789
794
  aboutNDLA: string;
795
+ socialMedia: string;
790
796
  selectLanguage: string;
791
797
  vision: string;
792
798
  linksHeader: string;
@@ -244,6 +244,11 @@ var messages = _objectSpread(_objectSpread({
244
244
  archived: 'Dette er et utgått fag som ikke vedlikeholdes.'
245
245
  },
246
246
  subjectsPage: {
247
+ filterSubjects: 'Filtrer fag',
248
+ scrollToGroup: 'Hopp til gruppe',
249
+ goToTop: 'Gå til toppen',
250
+ alphabeticSort: 'Fag gruppert alfabetisk',
251
+ subjectGroup: 'Gruppe "{{ category }}"',
247
252
  allSubjects: 'Alle fag',
248
253
  errorDescription: 'Beklager, en feil oppstod under lasting av fagene.',
249
254
  chooseSubject: 'Velg fag',
@@ -582,6 +587,7 @@ var messages = _objectSpread(_objectSpread({
582
587
  },
583
588
  footer: {
584
589
  aboutNDLA: 'Om NDLA',
590
+ socialMedia: 'Sosiale medier',
585
591
  selectLanguage: 'Velg språk (language): ',
586
592
  vision: 'Sammen skaper vi framtidas læring',
587
593
  linksHeader: 'Andre NDLA-nettsteder',
@@ -440,6 +440,11 @@ declare const messages: {
440
440
  archived: string;
441
441
  };
442
442
  subjectsPage: {
443
+ filterSubjects: string;
444
+ scrollToGroup: string;
445
+ goToTop: string;
446
+ alphabeticSort: string;
447
+ subjectGroup: string;
443
448
  allSubjects: string;
444
449
  errorDescription: string;
445
450
  chooseSubject: string;
@@ -787,6 +792,7 @@ declare const messages: {
787
792
  };
788
793
  footer: {
789
794
  aboutNDLA: string;
795
+ socialMedia: string;
790
796
  selectLanguage: string;
791
797
  vision: string;
792
798
  linksHeader: string;
@@ -244,6 +244,11 @@ var messages = _objectSpread(_objectSpread({
244
244
  archived: 'Dette er eit utgått fag som ikkje blir halde ved like.'
245
245
  },
246
246
  subjectsPage: {
247
+ filterSubjects: 'Filtrer fag',
248
+ scrollToGroup: 'Hopp til gruppe',
249
+ goToTop: 'Gå til toppen',
250
+ alphabeticSort: 'Fag gruppert alfabetisk',
251
+ subjectGroup: 'Gruppe "{{ category }}"',
247
252
  allSubjects: 'Alle fag',
248
253
  errorDescription: 'Orsak, ein feil oppstod under lasting av faga.',
249
254
  chooseSubject: 'Vel fag',
@@ -582,6 +587,7 @@ var messages = _objectSpread(_objectSpread({
582
587
  },
583
588
  footer: {
584
589
  aboutNDLA: 'Om NDLA',
590
+ socialMedia: 'Sosiale media',
585
591
  selectLanguage: 'Vel språk (language): ',
586
592
  vision: 'Saman skapar vi framtidas læring',
587
593
  linksHeader: 'Andre NDLA-nettstader',
@@ -440,6 +440,11 @@ declare const messages: {
440
440
  archived: string;
441
441
  };
442
442
  subjectsPage: {
443
+ filterSubjects: string;
444
+ scrollToGroup: string;
445
+ goToTop: string;
446
+ alphabeticSort: string;
447
+ subjectGroup: string;
443
448
  allSubjects: string;
444
449
  errorDescription: string;
445
450
  chooseSubject: string;
@@ -787,6 +792,7 @@ declare const messages: {
787
792
  };
788
793
  footer: {
789
794
  aboutNDLA: string;
795
+ socialMedia: string;
790
796
  selectLanguage: string;
791
797
  vision: string;
792
798
  linksHeader: string;
@@ -244,6 +244,11 @@ var messages = _objectSpread(_objectSpread({
244
244
  archived: 'Dát leat heaittihuvvon fága mii ii ođasmahttojuvvo.'
245
245
  },
246
246
  subjectsPage: {
247
+ filterSubjects: 'Filtrer fag',
248
+ scrollToGroup: 'Hopp til gruppe',
249
+ goToTop: 'Gå til toppen',
250
+ alphabeticSort: 'Fag gruppert alfabetisk',
251
+ subjectGroup: 'Gruppe "{{ category }}"',
247
252
  allSubjects: 'Buot fágat',
248
253
  errorDescription: 'Šállošat, boasttuvuohta čuožžilii fágaid viežžamis.',
249
254
  chooseSubject: 'Vállje fága',
@@ -582,6 +587,7 @@ var messages = _objectSpread(_objectSpread({
582
587
  },
583
588
  footer: {
584
589
  aboutNDLA: 'NDLA birra',
590
+ socialMedia: 'Sosiale medier',
585
591
  selectLanguage: 'Vállje giela (language): ',
586
592
  vision: 'Ovttas hábmet boahtteáiggi oahppama',
587
593
  linksHeader: 'Eará NDLA neahttabáikkit',
@@ -440,6 +440,11 @@ declare const messages: {
440
440
  archived: string;
441
441
  };
442
442
  subjectsPage: {
443
+ filterSubjects: string;
444
+ scrollToGroup: string;
445
+ goToTop: string;
446
+ alphabeticSort: string;
447
+ subjectGroup: string;
443
448
  allSubjects: string;
444
449
  errorDescription: string;
445
450
  chooseSubject: string;
@@ -787,6 +792,7 @@ declare const messages: {
787
792
  };
788
793
  footer: {
789
794
  aboutNDLA: string;
795
+ socialMedia: string;
790
796
  selectLanguage: string;
791
797
  vision: string;
792
798
  linksHeader: string;
@@ -244,6 +244,11 @@ var messages = _objectSpread(_objectSpread({
244
244
  archived: 'Dette er et utgått fag som ikke vedlikeholdes.'
245
245
  },
246
246
  subjectsPage: {
247
+ filterSubjects: 'Filtrer fag',
248
+ scrollToGroup: 'Hopp til gruppe',
249
+ goToTop: 'Gå til toppen',
250
+ alphabeticSort: 'Fag gruppert alfabetisk',
251
+ subjectGroup: 'Gruppe "{{ category }}"',
247
252
  allSubjects: 'Alle fag',
248
253
  errorDescription: 'Beklager, en feil oppstod under lasting av fagene.',
249
254
  chooseSubject: 'Velg fag',
@@ -582,6 +587,7 @@ var messages = _objectSpread(_objectSpread({
582
587
  },
583
588
  footer: {
584
589
  aboutNDLA: 'Om NDLA',
590
+ socialMedia: 'Sosiale medier',
585
591
  selectLanguage: 'Velg språk (language): ',
586
592
  vision: 'Sammen skaper vi framtidas læring',
587
593
  linksHeader: 'Andre NDLA-nettsteder',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndla/ui",
3
- "version": "33.3.2",
3
+ "version": "33.4.0",
4
4
  "description": "UI component library for NDLA.",
5
5
  "license": "GPL-3.0",
6
6
  "main": "lib/index.js",
@@ -82,5 +82,5 @@
82
82
  "publishConfig": {
83
83
  "access": "public"
84
84
  },
85
- "gitHead": "2cbff26d49ef6ed78bb1d789d6cca7b69461b269"
85
+ "gitHead": "71660738efc896fc54a66aa024262947cdd4cf3f"
86
86
  }
@@ -30,7 +30,7 @@ type StyledFooterProps = {
30
30
  addMargin?: boolean;
31
31
  };
32
32
 
33
- const StyledFooter = styled.footer<StyledFooterProps>`
33
+ const StyledDiv = styled.div<StyledFooterProps>`
34
34
  color: #fff;
35
35
  position: relative;
36
36
  background: ${colors.brand.dark};
@@ -159,11 +159,13 @@ const Footer = ({ children, links, languageSelector, auth, privacyLinks }: Props
159
159
  return (
160
160
  <>
161
161
  {languageSelector && <StyledLanguageWrapper>{languageSelector}</StyledLanguageWrapper>}
162
- <StyledFooter addMargin={!languageSelector}>
163
- <OneColumn cssModifier="large">{footerContent}</OneColumn>
164
- <StyledBackground />
165
- </StyledFooter>
166
- {auth}
162
+ <footer>
163
+ <StyledDiv addMargin={!languageSelector}>
164
+ <OneColumn cssModifier="large">{footerContent}</OneColumn>
165
+ <StyledBackground />
166
+ </StyledDiv>
167
+ {auth}
168
+ </footer>
167
169
  </>
168
170
  );
169
171
  };
@@ -8,17 +8,18 @@ import { useTranslation } from 'react-i18next';
8
8
  const StyledLinksWrapper = styled.div`
9
9
  display: flex;
10
10
  align-items: flex-start;
11
- section:first-of-type {
11
+ gap: ${spacing.normal};
12
+ div:first-of-type {
12
13
  margin-right: ${spacing.large};
13
14
  }
14
15
  ${mq.range({ from: breakpoints.desktop })} {
15
- section:first-of-type {
16
+ div:first-of-type {
16
17
  margin-right: ${spacingUnit * 4}px;
17
18
  }
18
19
  }
19
20
  ${mq.range({ until: breakpoints.tabletWide })} {
20
21
  flex-direction: column;
21
- > section {
22
+ > div {
22
23
  margin-top: ${spacing.large};
23
24
  }
24
25
  }
@@ -86,7 +87,7 @@ const StyledSocialMediaLinkWrapper = styled.div`
86
87
  align-items: center;
87
88
  `;
88
89
 
89
- const StyledHeaderLinks = styled.h1`
90
+ const StyledHeaderLinks = styled.h3`
90
91
  ${fonts.sizes(16, 1.5)};
91
92
  font-weight: ${fonts.weight.semibold};
92
93
  margin: ${spacing.xsmall} 0;
@@ -97,11 +98,11 @@ const FooterLinks = ({ links }: FooterLinksProps) => {
97
98
  return (
98
99
  <>
99
100
  <StyledLinksWrapper>
100
- <section>
101
- <StyledHeaderLinks>
101
+ <div>
102
+ <StyledHeaderLinks id="otherLinks">
102
103
  {t('footer.linksHeader')} <Launch />
103
104
  </StyledHeaderLinks>
104
- <StyledNav>
105
+ <StyledNav aria-labelledby="otherLinks">
105
106
  {commonLinks.map((link) => (
106
107
  <div key={link.url}>
107
108
  <StyledSafeLink
@@ -115,20 +116,18 @@ const FooterLinks = ({ links }: FooterLinksProps) => {
115
116
  </div>
116
117
  ))}
117
118
  </StyledNav>
118
- </section>
119
- <section>
120
- <StyledNav>
121
- {links.map((link) => (
122
- <StyledSocialMediaLinkWrapper key={link.to}>
123
- <StyledSocialMediaIcon>{link.icon}</StyledSocialMediaIcon>
124
- <StyledSafeLink to={link.to}>
125
- {link.text}
126
- <Forward />
127
- </StyledSafeLink>
128
- </StyledSocialMediaLinkWrapper>
129
- ))}
130
- </StyledNav>
131
- </section>
119
+ </div>
120
+ <StyledNav aria-label={t('footer.socialMedia')}>
121
+ {links.map((link) => (
122
+ <StyledSocialMediaLinkWrapper key={link.to}>
123
+ <StyledSocialMediaIcon>{link.icon}</StyledSocialMediaIcon>
124
+ <StyledSafeLink to={link.to}>
125
+ {link.text}
126
+ <Forward />
127
+ </StyledSafeLink>
128
+ </StyledSocialMediaLinkWrapper>
129
+ ))}
130
+ </StyledNav>
132
131
  </StyledLinksWrapper>
133
132
  </>
134
133
  );
@@ -8,35 +8,33 @@
8
8
 
9
9
  import React, { ReactNode } from 'react';
10
10
  import styled from '@emotion/styled';
11
- import { fonts, spacing } from '@ndla/core';
11
+ import { css } from '@emotion/react';
12
+ import { colors, fonts, spacing } from '@ndla/core';
12
13
 
13
14
  import ResourceList, { ResourceListProps } from './ResourceList';
15
+ import { HeadingLevel } from '../types';
14
16
 
15
17
  const Wrapper = styled.section`
16
18
  margin-bottom: ${spacing.large};
17
19
  `;
18
20
 
19
- type StyledHeaderProps = {
20
- invertedStyle?: boolean;
21
- };
22
-
23
- const StyledHeader = styled.header<StyledHeaderProps>`
24
- margin: ${spacing.small} 0 ${spacing.xsmall};
25
- ${(props) => props.invertedStyle && `color: #fff`};
26
- `;
27
-
28
- const StyledHeading = styled.h1`
21
+ const headingStyle = css`
29
22
  ${fonts.sizes('16px', '18px')};
30
23
  font-weight: ${fonts.weight.bold};
31
24
  text-transform: uppercase;
32
25
  letter-spacing: 0.05em;
33
- margin: 0;
26
+ margin: ${spacing.small} 0 ${spacing.xsmall};
27
+ `;
28
+
29
+ const invertedStyle = css`
30
+ color: ${colors.white};
34
31
  `;
35
32
 
36
33
  type Props = {
37
34
  invertedStyle?: boolean;
38
35
  toggleAdditionalResources: () => void;
39
36
  heartButton?: (path: string) => ReactNode;
37
+ headingLevel?: HeadingLevel;
40
38
  };
41
39
 
42
40
  const ResourceGroup = ({
@@ -45,15 +43,12 @@ const ResourceGroup = ({
45
43
  showAdditionalResources,
46
44
  toggleAdditionalResources,
47
45
  contentType,
48
- invertedStyle,
46
+ invertedStyle: invertedStyleProp,
47
+ headingLevel: Heading = 'h1',
49
48
  heartButton,
50
49
  }: Props & ResourceListProps) => (
51
50
  <Wrapper>
52
- {title && (
53
- <StyledHeader invertedStyle={invertedStyle}>
54
- <StyledHeading>{title}</StyledHeading>
55
- </StyledHeader>
56
- )}
51
+ {title && <Heading css={[headingStyle, invertedStyleProp ? invertedStyle : undefined]}>{title}</Heading>}
57
52
  {resources.length > 0 ? (
58
53
  <ResourceList
59
54
  title={title}
@@ -80,9 +80,9 @@ const ListElement = styled.li<ListElementProps>`
80
80
  props.additional &&
81
81
  css`
82
82
  border-style: dashed;
83
- animation-name: ${fadeInAdditionalsKeyframe};
84
83
  animation-duration: 0.8s;
85
84
  animation-fill-mode: forwards;
85
+ animation: ${fadeInAdditionalsKeyframe};
86
86
  `}
87
87
  ${(props) => props.extraBottomMargin && `margin-bottom: ${spacing.large};`}
88
88
 
@@ -143,10 +143,7 @@ const ResourceLink = styled(SafeLink)`
143
143
  }
144
144
  `;
145
145
 
146
- type ActiveProps = {
147
- active?: boolean;
148
- };
149
- const Heading = styled.h2<ActiveProps>`
146
+ const headingStyle = css`
150
147
  font-weight: ${fonts.weight.semibold};
151
148
  transform: translateY(-1px);
152
149
  text-transform: none;
@@ -161,28 +158,21 @@ const Heading = styled.h2<ActiveProps>`
161
158
  ${fonts.sizes('20px', '26px')};
162
159
  }
163
160
 
164
- span {
165
- box-shadow: ${colors.link};
166
- }
161
+ box-shadow: ${colors.link};
167
162
 
168
163
  ${ResourceLink}:hover &,
169
164
  ${ResourceLink}:focus & {
170
- span {
171
- box-shadow: ${colors.linkHover};
172
- }
165
+ box-shadow: ${colors.linkHover};
166
+ }
167
+ `;
168
+
169
+ const activeHeadingStyle = css`
170
+ color: ${colors.brand.greyDark};
171
+ box-shadow: none;
172
+ small {
173
+ padding-left: ${spacing.small};
174
+ font-weight: ${fonts.weight.normal};
173
175
  }
174
- ${(props) =>
175
- props.active &&
176
- css`
177
- color: ${colors.brand.greyDark};
178
- span {
179
- box-shadow: none;
180
- }
181
- small {
182
- padding-left: ${spacing.small};
183
- font-weight: ${fonts.weight.normal};
184
- }
185
- `}
186
176
  `;
187
177
 
188
178
  const IconWrapper = styled.div`
@@ -247,6 +237,7 @@ const ResourceItem = ({
247
237
  const hidden = additional ? !showAdditionalResources : false;
248
238
  return (
249
239
  <ListElement
240
+ aria-current={active ? 'page' : undefined}
250
241
  contentType={contentType}
251
242
  hidden={hidden && !active}
252
243
  active={active}
@@ -257,21 +248,17 @@ const ResourceItem = ({
257
248
  <IconWrapper>
258
249
  <ContentTypeBadge type={contentType ?? ''} background border={false} />
259
250
  </IconWrapper>
260
- <Heading active>
261
- <span>
262
- {name}
263
- <small>{t('resource.youAreHere')}</small>
264
- </span>
265
- </Heading>
251
+ <span css={[headingStyle, activeHeadingStyle]}>
252
+ {name}
253
+ <small>{t('resource.youAreHere')}</small>
254
+ </span>
266
255
  </ActiveWrapper>
267
256
  ) : (
268
257
  <ResourceLink to={path}>
269
258
  <IconWrapper>
270
259
  <ContentTypeBadge type={contentType ?? ''} background border={false} />
271
260
  </IconWrapper>
272
- <Heading>
273
- <span>{name}</span>
274
- </Heading>
261
+ <span css={headingStyle}>{name}</span>
275
262
  </ResourceLink>
276
263
  )}
277
264
  <TypeWrapper>
@@ -288,18 +275,22 @@ const ResourceItem = ({
288
275
  <>
289
276
  {additional && (
290
277
  <Tooltip tooltip={contentTypeDescription}>
291
- <Additional
292
- className="c-icon--20 u-margin-left-tiny c-topic-resource__list__additional-icons"
293
- aria-label={contentTypeDescription}
294
- />
278
+ <div>
279
+ <Additional
280
+ className="c-icon--20 u-margin-left-tiny c-topic-resource__list__additional-icons"
281
+ aria-label={contentTypeDescription}
282
+ />
283
+ </div>
295
284
  </Tooltip>
296
285
  )}
297
286
  {!additional && (
298
287
  <Tooltip tooltip={contentTypeDescription}>
299
- <Core
300
- className="c-icon--20 u-margin-left-tiny c-topic-resource__list__additional-icons"
301
- aria-label={contentTypeDescription}
302
- />
288
+ <div>
289
+ <Core
290
+ className="c-icon--20 u-margin-left-tiny c-topic-resource__list__additional-icons"
291
+ aria-label={contentTypeDescription}
292
+ />
293
+ </div>
303
294
  </Tooltip>
304
295
  )}
305
296
  </>
@@ -253,6 +253,11 @@ const messages = {
253
253
  archived: 'This is an expired and unmaintained subject.',
254
254
  },
255
255
  subjectsPage: {
256
+ filterSubjects: 'Filter subjects',
257
+ scrollToGroup: 'Scroll to group',
258
+ goToTop: 'Scroll to top',
259
+ alphabeticSort: 'Subjects grouped alphabetically',
260
+ subjectGroup: 'Group "{{ category }}"',
256
261
  allSubjects: 'All subjects',
257
262
  chooseSubject: 'Choose subject',
258
263
  errorDescription: 'Sorry, an error occurred while loading the subjects.',
@@ -624,6 +629,7 @@ const messages = {
624
629
  },
625
630
  footer: {
626
631
  aboutNDLA: 'About NDLA',
632
+ socialMedia: 'Social media',
627
633
  selectLanguage: 'Choose language (språk): ',
628
634
  info: 'This webapplication is developed by NDLA as Open Source code.',
629
635
  editorInChief: 'Editor in chief: ',
@@ -252,6 +252,11 @@ const messages = {
252
252
  archived: 'Dette er et utgått fag som ikke vedlikeholdes.',
253
253
  },
254
254
  subjectsPage: {
255
+ filterSubjects: 'Filtrer fag',
256
+ scrollToGroup: 'Hopp til gruppe',
257
+ goToTop: 'Gå til toppen',
258
+ alphabeticSort: 'Fag gruppert alfabetisk',
259
+ subjectGroup: 'Gruppe "{{ category }}"',
255
260
  allSubjects: 'Alle fag',
256
261
  errorDescription: 'Beklager, en feil oppstod under lasting av fagene.',
257
262
  chooseSubject: 'Velg fag',
@@ -623,6 +628,7 @@ const messages = {
623
628
  },
624
629
  footer: {
625
630
  aboutNDLA: 'Om NDLA',
631
+ socialMedia: 'Sosiale medier',
626
632
  selectLanguage: 'Velg språk (language): ',
627
633
  vision: 'Sammen skaper vi framtidas læring',
628
634
  linksHeader: 'Andre NDLA-nettsteder',
@@ -252,6 +252,11 @@ const messages = {
252
252
  archived: 'Dette er eit utgått fag som ikkje blir halde ved like.',
253
253
  },
254
254
  subjectsPage: {
255
+ filterSubjects: 'Filtrer fag',
256
+ scrollToGroup: 'Hopp til gruppe',
257
+ goToTop: 'Gå til toppen',
258
+ alphabeticSort: 'Fag gruppert alfabetisk',
259
+ subjectGroup: 'Gruppe "{{ category }}"',
255
260
  allSubjects: 'Alle fag',
256
261
  errorDescription: 'Orsak, ein feil oppstod under lasting av faga.',
257
262
  chooseSubject: 'Vel fag',
@@ -624,6 +629,7 @@ const messages = {
624
629
  },
625
630
  footer: {
626
631
  aboutNDLA: 'Om NDLA',
632
+ socialMedia: 'Sosiale media',
627
633
  selectLanguage: 'Vel språk (language): ',
628
634
  vision: 'Saman skapar vi framtidas læring',
629
635
  linksHeader: 'Andre NDLA-nettstader',
@@ -252,6 +252,11 @@ const messages = {
252
252
  archived: 'Dát leat heaittihuvvon fága mii ii ođasmahttojuvvo.',
253
253
  },
254
254
  subjectsPage: {
255
+ filterSubjects: 'Filtrer fag',
256
+ scrollToGroup: 'Hopp til gruppe',
257
+ goToTop: 'Gå til toppen',
258
+ alphabeticSort: 'Fag gruppert alfabetisk',
259
+ subjectGroup: 'Gruppe "{{ category }}"',
255
260
  allSubjects: 'Buot fágat',
256
261
  errorDescription: 'Šállošat, boasttuvuohta čuožžilii fágaid viežžamis.',
257
262
  chooseSubject: 'Vállje fága',
@@ -624,6 +629,7 @@ const messages = {
624
629
  },
625
630
  footer: {
626
631
  aboutNDLA: 'NDLA birra',
632
+ socialMedia: 'Sosiale medier',
627
633
  selectLanguage: 'Vállje giela (language): ',
628
634
  vision: 'Ovttas hábmet boahtteáiggi oahppama',
629
635
  linksHeader: 'Eará NDLA neahttabáikkit',
@@ -252,6 +252,11 @@ const messages = {
252
252
  archived: 'Dette er et utgått fag som ikke vedlikeholdes.',
253
253
  },
254
254
  subjectsPage: {
255
+ filterSubjects: 'Filtrer fag',
256
+ scrollToGroup: 'Hopp til gruppe',
257
+ goToTop: 'Gå til toppen',
258
+ alphabeticSort: 'Fag gruppert alfabetisk',
259
+ subjectGroup: 'Gruppe "{{ category }}"',
255
260
  allSubjects: 'Alle fag',
256
261
  errorDescription: 'Beklager, en feil oppstod under lasting av fagene.',
257
262
  chooseSubject: 'Velg fag',
@@ -624,6 +629,7 @@ const messages = {
624
629
  },
625
630
  footer: {
626
631
  aboutNDLA: 'Om NDLA',
632
+ socialMedia: 'Sosiale medier',
627
633
  selectLanguage: 'Velg språk (language): ',
628
634
  vision: 'Sammen skaper vi framtidas læring',
629
635
  linksHeader: 'Andre NDLA-nettsteder',