@ndla/ui 34.0.1 → 34.1.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 (91) hide show
  1. package/es/Figure/Figure.js +3 -2
  2. package/es/FileList/File.js +6 -6
  3. package/es/LanguageSelector/LanguageSelector.js +67 -99
  4. package/es/NDLAFilm/AboutNdlaFilm.js +13 -12
  5. package/es/NDLAFilm/AllMoviesAlphabetically.js +79 -144
  6. package/es/NDLAFilm/FilmContentCard.js +41 -26
  7. package/es/NDLAFilm/FilmContentCardTags.js +5 -3
  8. package/es/NDLAFilm/FilmMovieList.js +13 -8
  9. package/es/NDLAFilm/FilmMovieSearch.js +6 -5
  10. package/es/NDLAFilm/FilmSlideshow.js +44 -20
  11. package/es/NDLAFilm/filmStyles.js +2 -2
  12. package/es/ResourceGroup/ResourceItem.js +72 -48
  13. package/es/Search/ActiveFilterContent.js +6 -5
  14. package/es/Search/ContentTypeResult.js +6 -3
  15. package/es/SearchTypeResult/ActiveFilterContent.js +9 -10
  16. package/es/Topic/Topic.js +171 -213
  17. package/es/all.css +1 -1
  18. package/es/locale/messages-en.js +3 -1
  19. package/es/locale/messages-nb.js +3 -1
  20. package/es/locale/messages-nn.js +7 -5
  21. package/es/locale/messages-se.js +2 -0
  22. package/es/locale/messages-sma.js +3 -1
  23. package/lib/Figure/Figure.d.ts +2 -1
  24. package/lib/Figure/Figure.js +3 -2
  25. package/lib/FileList/File.js +6 -6
  26. package/lib/LanguageSelector/LanguageSelector.d.ts +6 -15
  27. package/lib/LanguageSelector/LanguageSelector.js +64 -99
  28. package/lib/NDLAFilm/AboutNdlaFilm.js +11 -14
  29. package/lib/NDLAFilm/AllMoviesAlphabetically.d.ts +1 -2
  30. package/lib/NDLAFilm/AllMoviesAlphabetically.js +77 -142
  31. package/lib/NDLAFilm/FilmContentCard.d.ts +7 -0
  32. package/lib/NDLAFilm/FilmContentCard.js +41 -26
  33. package/lib/NDLAFilm/FilmContentCardTags.d.ts +2 -1
  34. package/lib/NDLAFilm/FilmContentCardTags.js +5 -3
  35. package/lib/NDLAFilm/FilmMovieList.js +12 -7
  36. package/lib/NDLAFilm/FilmMovieSearch.js +5 -4
  37. package/lib/NDLAFilm/FilmSlideshow.js +44 -20
  38. package/lib/NDLAFilm/filmStyles.js +2 -2
  39. package/lib/Resource/resourceComponents.d.ts +1 -1
  40. package/lib/ResourceGroup/ResourceItem.d.ts +2 -2
  41. package/lib/ResourceGroup/ResourceItem.js +72 -48
  42. package/lib/Search/ActiveFilterContent.d.ts +1 -1
  43. package/lib/Search/ActiveFilterContent.js +9 -5
  44. package/lib/Search/ContentTypeResult.js +6 -3
  45. package/lib/SearchTypeResult/ActiveFilterContent.d.ts +1 -1
  46. package/lib/SearchTypeResult/ActiveFilterContent.js +12 -10
  47. package/lib/Topic/Topic.js +170 -215
  48. package/lib/all.css +1 -1
  49. package/lib/locale/messages-en.d.ts +2 -0
  50. package/lib/locale/messages-en.js +3 -1
  51. package/lib/locale/messages-nb.d.ts +2 -0
  52. package/lib/locale/messages-nb.js +3 -1
  53. package/lib/locale/messages-nn.d.ts +4 -2
  54. package/lib/locale/messages-nn.js +7 -5
  55. package/lib/locale/messages-se.d.ts +2 -0
  56. package/lib/locale/messages-se.js +2 -0
  57. package/lib/locale/messages-sma.d.ts +2 -0
  58. package/lib/locale/messages-sma.js +3 -1
  59. package/package.json +15 -14
  60. package/src/Figure/Figure.tsx +6 -2
  61. package/src/FileList/File.tsx +4 -4
  62. package/src/LanguageSelector/LanguageSelector.stories.tsx +48 -0
  63. package/src/LanguageSelector/LanguageSelector.tsx +70 -149
  64. package/src/NDLAFilm/AboutNdlaFilm.tsx +11 -14
  65. package/src/NDLAFilm/AllMoviesAlphabetically.tsx +44 -160
  66. package/src/NDLAFilm/FilmContentCard.tsx +40 -21
  67. package/src/NDLAFilm/FilmContentCardTags.tsx +3 -2
  68. package/src/NDLAFilm/FilmMovieList.tsx +14 -7
  69. package/src/NDLAFilm/FilmMovieSearch.tsx +2 -2
  70. package/src/NDLAFilm/FilmSlideshow.tsx +49 -40
  71. package/src/NDLAFilm/filmStyles.ts +1 -1
  72. package/src/ResourceGroup/ResourceItem.tsx +79 -94
  73. package/src/Search/ActiveFilterContent.tsx +4 -3
  74. package/src/Search/ContentTypeResult.tsx +3 -1
  75. package/src/SearchTypeResult/ActiveFilterContent.tsx +7 -8
  76. package/src/Topic/Topic.tsx +166 -193
  77. package/src/locale/messages-en.ts +3 -1
  78. package/src/locale/messages-nb.ts +3 -1
  79. package/src/locale/messages-nn.ts +5 -4
  80. package/src/locale/messages-se.ts +2 -0
  81. package/src/locale/messages-sma.ts +3 -1
  82. package/src/main.scss +0 -1
  83. package/es/LanguageSelector/LanguageSelectorContent.js +0 -61
  84. package/es/Subject/SubjectCarousel.js +0 -133
  85. package/lib/LanguageSelector/LanguageSelectorContent.d.ts +0 -15
  86. package/lib/LanguageSelector/LanguageSelectorContent.js +0 -68
  87. package/lib/Subject/SubjectCarousel.d.ts +0 -18
  88. package/lib/Subject/SubjectCarousel.js +0 -138
  89. package/src/LanguageSelector/LanguageSelectorContent.tsx +0 -80
  90. package/src/NDLAFilm/component.film-movielist.scss +0 -105
  91. package/src/Subject/SubjectCarousel.tsx +0 -162
@@ -934,6 +934,7 @@ declare const messages: {
934
934
  copyCode: string;
935
935
  };
936
936
  ndlaFilm: {
937
+ heading: string;
937
938
  slideBackwardsLabel: string;
938
939
  slideForwardsLabel: string;
939
940
  movieMatchInCategory: string;
@@ -980,6 +981,7 @@ declare const messages: {
980
981
  shortFilm: string;
981
982
  all: string;
982
983
  };
984
+ allMovieGroupTitleLabel: string;
983
985
  moreAboutNdlaFilm: {
984
986
  header: string;
985
987
  firstParagraph: string;
@@ -399,7 +399,7 @@ var messages = _objectSpread(_objectSpread({
399
399
  article: {
400
400
  edition: 'Edition',
401
401
  publisher: 'Publisher',
402
- lastUpdated: 'Last updated',
402
+ lastUpdated: 'Last revised date',
403
403
  closeLabel: 'Close',
404
404
  useContent: 'Cite or use',
405
405
  additionalLabel: 'Additional content',
@@ -729,6 +729,7 @@ var messages = _objectSpread(_objectSpread({
729
729
  copyCode: 'Copy code'
730
730
  },
731
731
  ndlaFilm: {
732
+ heading: 'NDLA film',
732
733
  slideBackwardsLabel: 'Scroll backwards',
733
734
  slideForwardsLabel: 'Scroll forwards',
734
735
  movieMatchInCategory: 'Matches',
@@ -775,6 +776,7 @@ var messages = _objectSpread(_objectSpread({
775
776
  shortFilm: 'Short film',
776
777
  all: 'All movies A-Z'
777
778
  },
779
+ allMovieGroupTitleLabel: 'Movies starting with {{letter}}',
778
780
  moreAboutNdlaFilm: {
779
781
  header: 'NDLA Film',
780
782
  firstParagraph: "The films in the film service are taken from Norwegian and international film heritage and are linked to curricula in several subjects. They have been selected by NDLA's editors in collaboration with Norgesfilm AS.",
@@ -934,6 +934,7 @@ declare const messages: {
934
934
  copyCode: string;
935
935
  };
936
936
  ndlaFilm: {
937
+ heading: string;
937
938
  slideBackwardsLabel: string;
938
939
  slideForwardsLabel: string;
939
940
  movieMatchInCategory: string;
@@ -980,6 +981,7 @@ declare const messages: {
980
981
  shortFilm: string;
981
982
  all: string;
982
983
  };
984
+ allMovieGroupTitleLabel: string;
983
985
  moreAboutNdlaFilm: {
984
986
  header: string;
985
987
  firstParagraph: string;
@@ -397,7 +397,7 @@ var messages = _objectSpread(_objectSpread({
397
397
  frontPageExpired: 'Utgåtte fag undervises det ikke i lenger, men det kan fortsatt være mulig å ta eksamen i faga som privatist.'
398
398
  },
399
399
  article: {
400
- lastUpdated: 'Sist oppdatert',
400
+ lastUpdated: 'Sist faglig oppdatert',
401
401
  edition: 'Utgave',
402
402
  publisher: 'Utgiver',
403
403
  useContent: 'Regler for bruk',
@@ -729,6 +729,7 @@ var messages = _objectSpread(_objectSpread({
729
729
  copyCode: 'Kopier kode til utklippstavle'
730
730
  },
731
731
  ndlaFilm: {
732
+ heading: 'NDLA film',
732
733
  slideBackwardsLabel: 'Scroll bakover',
733
734
  slideForwardsLabel: 'Scroll fremover',
734
735
  movieMatchInCategory: 'Treff',
@@ -775,6 +776,7 @@ var messages = _objectSpread(_objectSpread({
775
776
  shortFilm: 'Kortfilm',
776
777
  all: 'Alle filmer A-Å'
777
778
  },
779
+ allMovieGroupTitleLabel: 'Filmer som starter på {{letter}}',
778
780
  moreAboutNdlaFilm: {
779
781
  header: 'NDLA Film',
780
782
  firstParagraph: 'Filmene i filmtjenesten er hentet fra norsk og internasjonal filmarv og kobles mot læreplaner i flere fag. De er valgt ut av NDLAs redaksjoner i samarbeid med Norgesfilm AS.',
@@ -491,6 +491,7 @@ declare const messages: {
491
491
  name: string;
492
492
  };
493
493
  };
494
+ errorDescription: string;
494
495
  film: {
495
496
  header: string;
496
497
  text: string;
@@ -498,7 +499,6 @@ declare const messages: {
498
499
  linkLabel: string;
499
500
  };
500
501
  blog: string;
501
- errorDescription: string;
502
502
  };
503
503
  toolboxPage: {
504
504
  introduction: string;
@@ -567,8 +567,8 @@ declare const messages: {
567
567
  error: string;
568
568
  noCoreResourcesAvailableUnspecific: string;
569
569
  noCoreResourcesAvailable: string;
570
- toggleFilterLabel: string;
571
570
  activateAdditionalResources: string;
571
+ toggleFilterLabel: string;
572
572
  label: string;
573
573
  allResources: string;
574
574
  shortcutButtonText: string;
@@ -934,6 +934,7 @@ declare const messages: {
934
934
  copyCode: string;
935
935
  };
936
936
  ndlaFilm: {
937
+ heading: string;
937
938
  slideBackwardsLabel: string;
938
939
  slideForwardsLabel: string;
939
940
  movieMatchInCategory: string;
@@ -980,6 +981,7 @@ declare const messages: {
980
981
  shortFilm: string;
981
982
  all: string;
982
983
  };
984
+ allMovieGroupTitleLabel: string;
983
985
  moreAboutNdlaFilm: {
984
986
  header: string;
985
987
  firstParagraph: string;
@@ -295,14 +295,14 @@ var messages = _objectSpread(_objectSpread({
295
295
  name: 'Følg oss'
296
296
  }
297
297
  },
298
+ errorDescription: 'Orsak, ein feil oppstod under lasting av faga.',
298
299
  film: {
299
300
  header: 'NDLA film',
300
301
  text: 'NDLA film er ei teneste i samarbeid med Norgesfilm. Denne tenesta lar deg sjå ei rekkje spelefilmar, kortfilmar, dokumentarar og seriar. Du kan òg sjå undervisningsfilm og filmklipp. Velkomen inn i filmen si verd!',
301
302
  textShort: 'Velkomen inn i filmen si verd!',
302
303
  linkLabel: 'Gå til NDLA film'
303
304
  },
304
- blog: 'Frå bloggen',
305
- errorDescription: 'Orsak, ein feil oppstod under lasting av faga.'
305
+ blog: 'Frå bloggen'
306
306
  },
307
307
  toolboxPage: {
308
308
  introduction: 'Kva vil det seie å arbeide utforskande? Korleis kan du lære betre? Kva skal til for å få gruppearbeid til å fungere? I Verktøykassa finn både elevar og lærerar ressursar som er aktuelle for alle fag, og som støtter opp under læringsarbeid og utvikling av kunnskap, ferdigheter og forståing.'
@@ -350,7 +350,7 @@ var messages = _objectSpread(_objectSpread({
350
350
  back: 'Tilbake',
351
351
  additionalFilterLabel: 'Tilleggsressursar',
352
352
  contentTypeResultsShowMore: (_contentTypeResultsSh = {}, _defineProperty(_contentTypeResultsSh, contentTypes.SUBJECT_MATERIAL, 'Vis meir fagstoff'), _defineProperty(_contentTypeResultsSh, contentTypes.TASKS_AND_ACTIVITIES, 'Vis fleire oppgåver og aktivitetar'), _defineProperty(_contentTypeResultsSh, contentTypes.LEARNING_PATH, 'Vis fleire læringsstiar'), _defineProperty(_contentTypeResultsSh, contentTypes.ASSESSMENT_RESOURCES, 'Vis fleire vurderingsressursar'), _defineProperty(_contentTypeResultsSh, contentTypes.SOURCE_MATERIAL, 'Vis fleire kjeldemateriale'), _defineProperty(_contentTypeResultsSh, contentTypes.EXTERNAL_LEARNING_RESOURCES, 'Vis fleire eksterne læringsressursar'), _defineProperty(_contentTypeResultsSh, "unGrouped", 'Vis fleire ressursar'), _contentTypeResultsSh),
353
- contentTypeResultsShowLess: (_contentTypeResultsSh2 = {}, _defineProperty(_contentTypeResultsSh2, contentTypes.SUBJECT_MATERIAL, 'Vis mindre fagstoff'), _defineProperty(_contentTypeResultsSh2, contentTypes.TASKS_AND_ACTIVITIES, 'Vis færre oppgåver og aktivitetar'), _defineProperty(_contentTypeResultsSh2, contentTypes.LEARNING_PATH, 'Vis færre læringsstiar'), _defineProperty(_contentTypeResultsSh2, contentTypes.LEARNING_PATH, 'Vis færre læringsstiar'), _defineProperty(_contentTypeResultsSh2, contentTypes.ASSESSMENT_RESOURCES, 'Vis færre vurderingsressursar'), _defineProperty(_contentTypeResultsSh2, contentTypes.SOURCE_MATERIAL, 'Vis færre kjeldemateriale'), _defineProperty(_contentTypeResultsSh2, contentTypes.EXTERNAL_LEARNING_RESOURCES, 'Vis færre eksterne læringsressursar'), _defineProperty(_contentTypeResultsSh2, "unGrouped", 'Vis færre ressursar'), _contentTypeResultsSh2),
353
+ contentTypeResultsShowLess: (_contentTypeResultsSh2 = {}, _defineProperty(_contentTypeResultsSh2, contentTypes.SUBJECT_MATERIAL, 'Vis mindre fagstoff'), _defineProperty(_contentTypeResultsSh2, contentTypes.TASKS_AND_ACTIVITIES, 'Vis færre oppgåver og aktivitetar'), _defineProperty(_contentTypeResultsSh2, contentTypes.LEARNING_PATH, 'Vis færre læringsstiar'), _defineProperty(_contentTypeResultsSh2, contentTypes.ASSESSMENT_RESOURCES, 'Vis færre vurderingsressursar'), _defineProperty(_contentTypeResultsSh2, contentTypes.SOURCE_MATERIAL, 'Vis færre kjeldemateriale'), _defineProperty(_contentTypeResultsSh2, contentTypes.EXTERNAL_LEARNING_RESOURCES, 'Vis færre eksterne læringsressursar'), _defineProperty(_contentTypeResultsSh2, "unGrouped", 'Vis færre ressursar'), _contentTypeResultsSh2),
354
354
  contentTypeResultsNoHit: (_contentTypeResultsNo = {}, _defineProperty(_contentTypeResultsNo, contentTypes.SUBJECT_MATERIAL, 'Ikkje noko fagstoff'), _defineProperty(_contentTypeResultsNo, contentTypes.TASKS_AND_ACTIVITIES, 'Ingen oppgåver'), _defineProperty(_contentTypeResultsNo, contentTypes.LEARNING_PATH, 'Ingen læringsstiar'), _defineProperty(_contentTypeResultsNo, contentTypes.ASSESSMENT_RESOURCES, 'Ingen vurderingsressursar'), _defineProperty(_contentTypeResultsNo, contentTypes.SOURCE_MATERIAL, 'Ingen kjeldemateriale'), _defineProperty(_contentTypeResultsNo, contentTypes.EXTERNAL_LEARNING_RESOURCES, 'Ingen eksterne læringsressursar'), _defineProperty(_contentTypeResultsNo, "unGrouped", 'Ingen ressursar'), _contentTypeResultsNo)
355
355
  }
356
356
  },
@@ -362,8 +362,8 @@ var messages = _objectSpread(_objectSpread({
362
362
  error: 'Orsak, ein del av innhaldet kunne ikkje visast.',
363
363
  noCoreResourcesAvailableUnspecific: 'Det er ikkje noko kjernestoff tilgjengeleg.',
364
364
  noCoreResourcesAvailable: 'Det er ikkje noko kjernestoff tilgjengeleg for {{name}}.',
365
- toggleFilterLabel: 'Tilleggsressursar',
366
365
  activateAdditionalResources: 'Tilleggsressursar',
366
+ toggleFilterLabel: 'Tilleggsressursar',
367
367
  label: 'Læringsressursar',
368
368
  allResources: 'Ressursar',
369
369
  shortcutButtonText: 'Lærestoff',
@@ -397,7 +397,7 @@ var messages = _objectSpread(_objectSpread({
397
397
  frontPageExpired: 'Utgåtte fag blir det ikkje undervist i lenger, men det kan framleis vere mogleg å ta eksamen i faget som privatist.'
398
398
  },
399
399
  article: {
400
- lastUpdated: 'Sist oppdatert',
400
+ lastUpdated: 'Sist faglig oppdatert',
401
401
  edition: 'Utgåve',
402
402
  publisher: 'Utgjevar',
403
403
  closeLabel: 'Lukk',
@@ -729,6 +729,7 @@ var messages = _objectSpread(_objectSpread({
729
729
  copyCode: 'Kopier kode til utklippstavle'
730
730
  },
731
731
  ndlaFilm: {
732
+ heading: 'NDLA film',
732
733
  slideBackwardsLabel: 'Scroll bakover',
733
734
  slideForwardsLabel: 'Scroll framover',
734
735
  movieMatchInCategory: 'Treff',
@@ -775,6 +776,7 @@ var messages = _objectSpread(_objectSpread({
775
776
  shortFilm: 'Kortfilm',
776
777
  all: 'Alle filmar A-Å'
777
778
  },
779
+ allMovieGroupTitleLabel: 'Filmar som startar på {{letter}}',
778
780
  moreAboutNdlaFilm: {
779
781
  header: 'NDLA Film',
780
782
  firstParagraph: 'Filmane i filmtenesta er henta frå norsk og internasjonal filmarv og er kopla mot læreplanar i fleire fag. Dei er valde av redaksjonane til NDLA i samarbeid med Norgesfilm AS.',
@@ -934,6 +934,7 @@ declare const messages: {
934
934
  copyCode: string;
935
935
  };
936
936
  ndlaFilm: {
937
+ heading: string;
937
938
  slideBackwardsLabel: string;
938
939
  slideForwardsLabel: string;
939
940
  movieMatchInCategory: string;
@@ -980,6 +981,7 @@ declare const messages: {
980
981
  shortFilm: string;
981
982
  all: string;
982
983
  };
984
+ allMovieGroupTitleLabel: string;
983
985
  moreAboutNdlaFilm: {
984
986
  header: string;
985
987
  firstParagraph: string;
@@ -729,6 +729,7 @@ var messages = _objectSpread(_objectSpread({
729
729
  copyCode: 'Máŋge koda vuorkátávvalii'
730
730
  },
731
731
  ndlaFilm: {
732
+ heading: 'NDLA film',
732
733
  slideBackwardsLabel: 'Rulle maŋos',
733
734
  slideForwardsLabel: 'Rulle ovddas',
734
735
  movieMatchInCategory: 'Deaivan',
@@ -775,6 +776,7 @@ var messages = _objectSpread(_objectSpread({
775
776
  shortFilm: 'Oanehis filbma',
776
777
  all: 'Buot filmmat A-Å'
777
778
  },
779
+ allMovieGroupTitleLabel: 'Filmar som startar på {{letter}}',
778
780
  moreAboutNdlaFilm: {
779
781
  header: 'NDLA Filbma',
780
782
  firstParagraph: 'Filmmat filbmabálvalusas leat vižžouvvon norgga ja riikkaidgaskasaš filbmaárbbis ja leat čadnon oahppoplánaide máŋgga fágas. Dat leat válljejuvvon NDLA doaimmahusgottiin ovttasráđiid Norgesfilm AS:ain.',
@@ -934,6 +934,7 @@ declare const messages: {
934
934
  copyCode: string;
935
935
  };
936
936
  ndlaFilm: {
937
+ heading: string;
937
938
  slideBackwardsLabel: string;
938
939
  slideForwardsLabel: string;
939
940
  movieMatchInCategory: string;
@@ -980,6 +981,7 @@ declare const messages: {
980
981
  shortFilm: string;
981
982
  all: string;
982
983
  };
984
+ allMovieGroupTitleLabel: string;
983
985
  moreAboutNdlaFilm: {
984
986
  header: string;
985
987
  firstParagraph: string;
@@ -397,7 +397,7 @@ var messages = _objectSpread(_objectSpread({
397
397
  frontPageExpired: 'Utgåtte fag undervises det ikke i lenger, men det kan fortsatt være mulig å ta eksamen i faga som privatist.'
398
398
  },
399
399
  article: {
400
- lastUpdated: 'Sist oppdatert',
400
+ lastUpdated: 'Sist faglig oppdatert',
401
401
  edition: 'Utgave',
402
402
  publisher: 'Utgiver',
403
403
  useContent: 'Regler for bruk',
@@ -729,6 +729,7 @@ var messages = _objectSpread(_objectSpread({
729
729
  copyCode: 'Kopier kode til utklippstavle'
730
730
  },
731
731
  ndlaFilm: {
732
+ heading: 'NDLA film',
732
733
  slideBackwardsLabel: 'Scroll bakover',
733
734
  slideForwardsLabel: 'Scroll fremover',
734
735
  movieMatchInCategory: 'Treff',
@@ -775,6 +776,7 @@ var messages = _objectSpread(_objectSpread({
775
776
  shortFilm: 'Kortfilm',
776
777
  all: 'Alle filmer A-Å'
777
778
  },
779
+ allMovieGroupTitleLabel: 'Filmar som startar på {{letter}}',
778
780
  moreAboutNdlaFilm: {
779
781
  header: 'NDLA Film',
780
782
  firstParagraph: 'Filmene i filmtjenesten er hentet fra norsk og internasjonal filmarv og kobles mot læreplaner i flere fag. De er valgt ut av NDLAs redaksjoner i samarbeid med Norgesfilm AS.',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndla/ui",
3
- "version": "34.0.1",
3
+ "version": "34.1.0",
4
4
  "description": "UI component library for NDLA.",
5
5
  "license": "GPL-3.0",
6
6
  "main": "lib/index.js",
@@ -32,21 +32,22 @@
32
32
  ],
33
33
  "dependencies": {
34
34
  "@ndla/article-scripts": "^3.0.14",
35
- "@ndla/button": "^9.0.0",
36
- "@ndla/carousel": "^2.1.1",
37
- "@ndla/core": "^3.0.3",
38
- "@ndla/forms": "^4.1.11",
35
+ "@ndla/button": "^9.0.1",
36
+ "@ndla/carousel": "^3.0.0",
37
+ "@ndla/core": "^3.1.0",
38
+ "@ndla/forms": "^4.2.0",
39
39
  "@ndla/hooks": "^1.2.0",
40
- "@ndla/icons": "^2.1.1",
41
- "@ndla/licenses": "^6.1.6",
42
- "@ndla/modal": "^2.2.2",
43
- "@ndla/notion": "^4.1.13",
44
- "@ndla/safelink": "^4.0.2",
45
- "@ndla/switch": "^1.0.3",
46
- "@ndla/tabs": "^2.1.1",
47
- "@ndla/tooltip": "^4.0.4",
40
+ "@ndla/icons": "^2.2.0",
41
+ "@ndla/licenses": "^6.1.7",
42
+ "@ndla/modal": "^2.2.3",
43
+ "@ndla/notion": "^4.1.14",
44
+ "@ndla/safelink": "^4.0.3",
45
+ "@ndla/switch": "^1.0.4",
46
+ "@ndla/tabs": "^2.1.2",
47
+ "@ndla/tooltip": "^4.0.5",
48
48
  "@ndla/types-learningpath-api": "^0.0.17",
49
49
  "@ndla/util": "^3.1.9",
50
+ "@radix-ui/react-dropdown-menu": "2.0.2",
50
51
  "@reach/menu-button": "^0.16.2",
51
52
  "@reach/slider": "^0.16.0",
52
53
  "focus-trap-react": "^8.9.2",
@@ -82,5 +83,5 @@
82
83
  "publishConfig": {
83
84
  "access": "public"
84
85
  },
85
- "gitHead": "8ee9076418bd570ec0ba1a7adb6bf66e8ed01f2f"
86
+ "gitHead": "4d0730c32a5a72e492a281daf6447cd42c45f629"
86
87
  }
@@ -126,11 +126,14 @@ interface FigureCaptionProps {
126
126
  };
127
127
  }
128
128
 
129
- const Figure = ({ children, type = 'full', resizeIframe, ...rest }: Props) => {
129
+ const Figure = ({ children, type = 'full', resizeIframe, className, ...rest }: Props) => {
130
130
  const typeClass = type === 'full-column' ? 'c-figure--full-column' : `u-float-${type}`;
131
131
  const right = ['small-right', 'xsmall-right'].includes(type);
132
132
  return (
133
- <figure data-sizetype={type} {...classes('', { resize: !!resizeIframe, right }, typeClass)} {...rest}>
133
+ <figure
134
+ data-sizetype={type}
135
+ {...classes('', { resize: !!resizeIframe, right }, `${typeClass} ${className ?? ''}`)}
136
+ {...rest}>
134
137
  {isFunction(children) ? children({ typeClass }) : children}
135
138
  </figure>
136
139
  );
@@ -156,6 +159,7 @@ interface Props {
156
159
  type?: FigureType;
157
160
  resizeIframe?: boolean;
158
161
  noFigcaption?: boolean;
162
+ className?: string;
159
163
  }
160
164
 
161
165
  export default Figure;
@@ -6,7 +6,7 @@ import Tooltip from '@ndla/tooltip';
6
6
  import React from 'react';
7
7
  import { FileFormat, FileType } from './FileList';
8
8
 
9
- const LinkText = styled.span`
9
+ const LinkTextWrapper = styled.div`
10
10
  & > span {
11
11
  box-shadow: inset 0 -1px;
12
12
  }
@@ -26,7 +26,7 @@ const FileLink = styled(SafeLink)`
26
26
  &:hover,
27
27
  &:focus,
28
28
  &:active {
29
- ${LinkText} {
29
+ ${LinkTextWrapper} {
30
30
  box-shadow: none;
31
31
  }
32
32
  }
@@ -50,9 +50,9 @@ const renderFormat = (format: FileFormat, title: string, isPrimary: boolean, id:
50
50
  <FileLink key={format.url} to={format.url} target="_blank" aria-label={titleWithFormat} aria-describedby={formatId}>
51
51
  <Download />
52
52
  <Tooltip tooltip={format.tooltip}>
53
- <LinkText>
53
+ <LinkTextWrapper>
54
54
  <span>{isPrimary ? titleWithFormat : `(${format.fileType.toUpperCase()})`}</span>
55
- </LinkText>
55
+ </LinkTextWrapper>
56
56
  </Tooltip>
57
57
  </FileLink>
58
58
  );
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Copyright (c) 2022-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 React from 'react';
10
+ import { ComponentStory, ComponentMeta } from '@storybook/react';
11
+ import { LanguageSelector } from '@ndla/ui';
12
+ import styled from '@emotion/styled';
13
+ import { colors, spacing } from '@ndla/core';
14
+ import { defaultParameters } from '../../../../stories/defaults';
15
+ export default {
16
+ title: 'Enkle komponenter/LanguageSelector',
17
+ component: LanguageSelector,
18
+ parameters: {
19
+ ...defaultParameters,
20
+ },
21
+ args: {
22
+ locales: ['en', 'nb', 'nn'],
23
+ inverted: false,
24
+ // eslint-disable-next-line no-console
25
+ onSelect: (locale) => console.log(`selected ${locale}`),
26
+ },
27
+ } as ComponentMeta<typeof LanguageSelector>;
28
+
29
+ interface ButtonWrapperProps {
30
+ inverted?: boolean;
31
+ }
32
+
33
+ const shouldForwardProp = (p: string) => p !== 'inverted';
34
+
35
+ const ButtonWrapper = styled('div', { shouldForwardProp })<ButtonWrapperProps>`
36
+ background-color: ${(p) => p.inverted && colors.brand.primary};
37
+ padding: ${spacing.normal};
38
+ `;
39
+
40
+ export const LanguageSelectorStory: ComponentStory<typeof LanguageSelector> = (args) => {
41
+ return (
42
+ <ButtonWrapper inverted={args.inverted}>
43
+ <LanguageSelector {...args} />
44
+ </ButtonWrapper>
45
+ );
46
+ };
47
+
48
+ LanguageSelectorStory.storyName = 'LanguageSelector';
@@ -1,175 +1,96 @@
1
1
  /**
2
- * Copyright (c) 2019-present, NDLA.
2
+ * Copyright (c) 2022-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 React, { useState } from 'react';
10
- import styled from '@emotion/styled';
11
- import { css } from '@emotion/react';
12
- import FocusTrapReact from 'focus-trap-react';
13
- import { ButtonV2 as Button } from '@ndla/button';
14
- import { spacing, misc, colors, mq, breakpoints, animations, fonts, spacingUnit } from '@ndla/core';
15
- import { ChevronDown } from '@ndla/icons/common';
9
+ import React from 'react';
10
+ import { Root, Trigger, Item, Content, Portal, Arrow } from '@radix-ui/react-dropdown-menu';
11
+ import { ButtonV2 } from '@ndla/button';
16
12
  import { useTranslation } from 'react-i18next';
17
- import LanguageSelectorContent from './LanguageSelectorContent';
18
-
19
- type StyledWrapperProps = {
20
- alwaysVisible?: boolean;
21
- };
22
-
23
- const StyledWrapper = styled.div<StyledWrapperProps>`
24
- position: relative;
25
- ${(props) =>
26
- !props.alwaysVisible &&
27
- css`
28
- ${mq.range({ until: breakpoints.wide })} {
29
- display: none;
30
- }
31
- `}
32
- `;
13
+ import { ChevronDown } from '@ndla/icons/common';
14
+ import styled from '@emotion/styled';
15
+ import { colors, fonts, spacing } from '@ndla/core';
33
16
 
34
- type StyledModalProps = {
35
- animateIn: boolean;
36
- centered?: boolean;
37
- };
17
+ interface Props<T extends string> {
18
+ locales: T[];
19
+ onSelect: (locale: T) => void;
20
+ inverted?: boolean;
21
+ }
38
22
 
39
- const StyledModal = styled.div<StyledModalProps>`
40
- background: ${colors.brand.light};
41
- position: absolute;
23
+ const PopoverContent = styled(Content)`
42
24
  z-index: 9999;
43
- right: 0;
44
- top: ${-spacingUnit * 0.75}px;
45
- padding: ${spacingUnit * 0.75}px ${spacing.normal} ${spacing.normal};
46
- box-shadow: 0 0 6px rgba(0, 0, 0, 0.5);
47
- border-radius: ${misc.borderRadius};
48
25
  display: flex;
49
26
  flex-direction: column;
50
- align-items: flex-end;
51
- ${(props) =>
52
- props.animateIn &&
53
- css`
54
- ${animations.fadeInTop(animations.durations.superFast)}
55
- `};
56
- ${(props) =>
57
- props.centered &&
58
- css`
59
- right: calc(50% - 225px);
60
- left: calc(50% - 225px);
61
- ${mq.range({ until: breakpoints.mobileWide })} {
62
- right: calc(50% - 150px);
63
- left: calc(50% - 150px);
64
- }
65
- `};
66
- nav {
67
- width: 100%;
68
- padding: ${spacing.medium} ${spacing.large} ${spacing.small};
69
- display: flex;
70
- flex-direction: column;
71
- align-items: center;
72
- justify-content: center;
73
- ul {
74
- margin: 0 ${spacing.large};
75
- padding: 0;
76
- list-style: none;
77
- li {
78
- margin: 0 0 ${spacing.xsmall};
79
- padding: 0;
80
- }
81
- button {
82
- border: none;
83
- width: 100%;
84
- padding: ${spacingUnit / 2 + 5}px ${spacingUnit * 2.5}px;
85
- display: flex;
86
- align-items: center;
87
- justify-content: center;
88
- border-radius: ${misc.borderRadius};
89
- }
90
- }
91
- }
27
+ overflow: hidden;
28
+ background-color: ${colors.brand.greyLightest};
29
+ border-radius: ${spacing.small};
30
+ border: 1px solid ${colors.brand.tertiary};
31
+ fill: ${colors.brand.tertiary};
92
32
  `;
93
33
 
94
- const StyledSpan = styled.span`
95
- font-weight: ${fonts.weight.semibold};
34
+ const LanguageChoice = styled(ButtonV2)`
35
+ padding: ${spacing.small};
36
+ border-radius: 0;
37
+ gap: ${spacing.normal};
38
+ justify-content: space-between;
39
+ border: 0;
40
+ :not(:last-of-type) {
41
+ border-bottom: 1px solid ${colors.brand.tertiary};
42
+ }
96
43
  `;
97
44
 
98
- type Props = {
99
- options: {
100
- [key: string]: {
101
- name: string;
102
- url: string;
103
- };
104
- };
105
- currentLanguage: string;
106
- inverted?: boolean;
107
- invertedOutlineLargeScreensOnly?: boolean;
108
- outline?: boolean;
109
- center?: boolean;
110
- alwaysVisible?: boolean;
111
- };
112
-
113
- interface StyledButtonProps {
114
- outline?: boolean;
115
- inverted?: boolean;
116
- }
45
+ const ActivityIndicator = styled.div`
46
+ width: ${spacing.normal};
47
+ height: ${spacing.normal};
48
+ border: 1.5px solid currentColor;
49
+ border-radius: 100%;
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: center;
53
+ `;
117
54
 
118
- const shouldForwardProp = (name: string) => name !== 'outline';
55
+ const ActiveIndicator = styled.div`
56
+ width: 50%;
57
+ height: 50%;
58
+ background-color: currentColor;
59
+ border-radius: 100%;
60
+ `;
119
61
 
120
- const StyledButton = styled(Button, { shouldForwardProp })<StyledButtonProps>`
121
- border-color: ${({ inverted, outline }) =>
122
- outline ? (inverted ? colors.white : colors.brand.primary) : 'transparent'};
62
+ const Text = styled.span`
63
+ ${fonts.sizes('20px', '24px')};
64
+ font-weight: ${fonts.weight.semibold};
123
65
  `;
124
66
 
125
- const LanguageSelector = ({ currentLanguage, outline, center, inverted, alwaysVisible }: Props) => {
67
+ const LanguageSelector = <T extends string>({ locales, onSelect, inverted }: Props<T>) => {
126
68
  const { t, i18n } = useTranslation();
127
- const [infoLocale, setInfoLocale] = useState(i18n.language);
128
- const [isOpen, setIsOpen] = useState(false);
129
69
  return (
130
- <StyledWrapper alwaysVisible={alwaysVisible}>
131
- <StyledButton
132
- outline={outline}
133
- inverted={inverted}
134
- shape="pill"
135
- size="medium"
136
- colorTheme="lighter"
137
- variant="ghost"
138
- onClick={() => setIsOpen(true)}>
139
- <StyledSpan>
140
- {t(`languages.prefixChangeLanguage`)}: {t(`languages.${infoLocale}`)}
141
- </StyledSpan>
142
- <ChevronDown />
143
- </StyledButton>
144
-
145
- {isOpen && (
146
- <FocusTrapReact
147
- active
148
- focusTrapOptions={{
149
- onDeactivate: () => {
150
- setIsOpen(false);
151
- },
152
- clickOutsideDeactivates: true,
153
- escapeDeactivates: true,
154
- }}>
155
- <StyledModal animateIn={isOpen} centered={center}>
156
- <Button
157
- variant="link"
158
- onClick={() => {
159
- setIsOpen(false);
160
- }}>
161
- {t('masthead.menu.close')}
162
- </Button>
163
- <LanguageSelectorContent
164
- currentLanguage={currentLanguage}
165
- setInfoLocale={setInfoLocale}
166
- infoLocale={infoLocale}
167
- close={() => setIsOpen(false)}
168
- />
169
- </StyledModal>
170
- </FocusTrapReact>
171
- )}
172
- </StyledWrapper>
70
+ <Root>
71
+ <Trigger asChild>
72
+ <ButtonV2 variant="outline" shape="pill" inverted={inverted} aria-label={t('footer.selectLanguage')}>
73
+ {t(`languages.prefixChangeLanguage`)} <ChevronDown />
74
+ </ButtonV2>
75
+ </Trigger>
76
+ <Portal>
77
+ <PopoverContent>
78
+ <Arrow aria-hidden />
79
+ {locales.map((locale) => (
80
+ <Item asChild key={locale}>
81
+ <LanguageChoice
82
+ role="link"
83
+ variant="ghost"
84
+ aria-label={t(`changeLanguage.${locale}`)}
85
+ onClick={() => onSelect(locale)}>
86
+ <Text>{t(`languages.${locale}`)}</Text>
87
+ <ActivityIndicator>{i18n.language === locale && <ActiveIndicator />}</ActivityIndicator>
88
+ </LanguageChoice>
89
+ </Item>
90
+ ))}
91
+ </PopoverContent>
92
+ </Portal>
93
+ </Root>
173
94
  );
174
95
  };
175
96