@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
@@ -1,80 +0,0 @@
1
- /**
2
- * Copyright (c) 2019-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 styled from '@emotion/styled';
10
- import React from 'react';
11
- import { useTranslation } from 'react-i18next';
12
- import { colors } from '@ndla/core';
13
-
14
- type Props = {
15
- currentLanguage: string;
16
- setInfoLocale(arg: string): void;
17
- infoLocale: string;
18
- close: () => void;
19
- };
20
-
21
- const LanguageSelectorContent = ({ setInfoLocale, infoLocale, close }: Props) => {
22
- const { t, i18n } = useTranslation();
23
- const currentLang = i18n.language;
24
- const languages = (i18n.options.supportedLngs as string[]).filter((l) => !l.includes('cimode'));
25
-
26
- const StyledSelectedButton = styled.button`
27
- background: ${colors.brand.primary};
28
- color: #fff;
29
- width: 100%;
30
- display: flex;
31
- flex-direction: column;
32
- align-items: center;
33
- justify-content: center;
34
- `;
35
-
36
- const StyledButton = styled.button`
37
- background: transparent;
38
- color: ${colors.brand.dark};
39
- width: 100%;
40
- display: block;
41
- cursor: pointer;
42
- box-shadow: none;
43
- transition: background 200ms ease;
44
- &:hover,
45
- &:focus {
46
- background: ${colors.brand.tertiary};
47
- }
48
- `;
49
-
50
- return (
51
- <nav>
52
- <ul>
53
- {languages.map((key: string) => (
54
- <li key={key}>
55
- {key === currentLang ? (
56
- <StyledSelectedButton>{t(`languages.${key}`)}</StyledSelectedButton>
57
- ) : (
58
- <StyledButton
59
- onClick={() => {
60
- i18n.changeLanguage(key);
61
- close();
62
- }}
63
- onMouseOver={() => {
64
- setInfoLocale(key);
65
- }}
66
- onMouseOut={() => {
67
- setInfoLocale(currentLang);
68
- }}
69
- aria-label={t(`changeLanguage.${key}`)}>
70
- {t(`languages.${key}`)}
71
- </StyledButton>
72
- )}
73
- </li>
74
- ))}
75
- </ul>
76
- <p>{t(`currentLanguageText.${infoLocale}`)}</p>
77
- </nav>
78
- );
79
- };
80
- export default LanguageSelectorContent;
@@ -1,105 +0,0 @@
1
- @mixin set-animations() {
2
- @for $i from 1 through 20 {
3
- > div:nth-child(#{$i + 1}) {
4
- animation-delay: #{$i * 50}ms;
5
- }
6
- }
7
- }
8
-
9
- .c-film-movielist {
10
- &__carousel-wrapper-buttons {
11
- > div {
12
- @include set-animations();
13
- > div {
14
- opacity: 0;
15
- animation-fill-mode: forwards;
16
- animation-name: fadeIn;
17
- animation-duration: 300ms;
18
- }
19
- }
20
- &:hover {
21
- .c-film-movielist__carousel-buttons {
22
- background: #091a2a80;
23
- .c-icon {
24
- opacity: 0.7;
25
- }
26
- @include mq(wide) {
27
- &:first-child {
28
- .c-icon {
29
- transform: translate(-$spacing--small / 2, -$spacing);
30
- }
31
- }
32
- &:nth-child(2) {
33
- .c-icon {
34
- transform: translate($spacing--small / 2, -$spacing);
35
- }
36
- }
37
- }
38
- }
39
- }
40
- .c-film-movielist__carousel-buttons {
41
- @include mq($until: tabletWide) {
42
- &:first-child {
43
- transform: translate($spacing--small / 2, 0);
44
- }
45
- &:nth-child(2) {
46
- transform: translate(-$spacing--small / 2, 0);
47
- }
48
- }
49
- @include mq(tabletWide) {
50
- &:first-child {
51
- .c-icon {
52
- transform: translate(0, -$spacing);
53
- }
54
- }
55
- &:nth-child(2) {
56
- .c-icon {
57
- transform: translate(0, -$spacing);
58
- }
59
- }
60
- }
61
- }
62
- }
63
-
64
- &__carousel-buttons {
65
- cursor: pointer;
66
- display: flex;
67
- background: rgba(9, 26, 42, 0.501);
68
- border: 0;
69
- outline: 0;
70
- bottom: 0;
71
- top: 0;
72
- align-items: center;
73
- justify-content: center;
74
- width: $spacing * 2;
75
- transition: background 200ms ease;
76
- @include mq(wide) {
77
- width: $spacing * 3.5;
78
- }
79
- @include mq($until: tabletWide) {
80
- top: $spacing;
81
- bottom: auto;
82
- width: $spacing * 2;
83
- height: $spacing * 2;
84
- background: none;
85
- border-radius: 100%;
86
- }
87
- .c-icon {
88
- fill: #fff;
89
- opacity: 0;
90
- width: $spacing * 1.5;
91
- height: $spacing * 1.5;
92
- transition: transform 400ms ease, opacity 400ms ease;
93
- @include mq(wide) {
94
- width: $spacing * 3;
95
- height: $spacing * 3;
96
- }
97
- }
98
- &:focus, &:hover {
99
- background: rgba(9, 26, 42, 0.76) !important;
100
- .c-icon {
101
- opacity: 1 !important;
102
- }
103
- }
104
- }
105
- }
@@ -1,162 +0,0 @@
1
- import React from 'react';
2
- import styled from '@emotion/styled';
3
- import { css } from '@emotion/react';
4
- import { Carousel, CarouselAutosize } from '@ndla/carousel';
5
- import { useTranslation } from 'react-i18next';
6
- import { breakpoints, mq, spacing, spacingUnit } from '@ndla/core';
7
- import { SafeLinkProps } from '@ndla/safelink';
8
- import { ContentCard } from '../index';
9
- import { SubjectSectionTitle } from './Subject';
10
- import { HeadingLevel } from '../types';
11
-
12
- interface Props {
13
- subjects?: {
14
- id: string;
15
- title: string;
16
- text: string;
17
- type?: string | undefined | null;
18
- image?: string | undefined | null;
19
- toLinkProps: () => SafeLinkProps;
20
- }[];
21
- headingLevel: HeadingLevel;
22
- title?: string;
23
- narrowScreen?: boolean;
24
- wideScreen?: boolean;
25
- }
26
-
27
- interface StyledSectionProps {
28
- narrowScreen: boolean;
29
- wideScreen: boolean;
30
- }
31
-
32
- const StyledSection = styled.section<StyledSectionProps>`
33
- margin-bottom: ${spacing.large};
34
- ${mq.range({ from: breakpoints.tablet })} {
35
- margin-bottom: 100px;
36
- }
37
- ${(p) =>
38
- p.narrowScreen &&
39
- css`
40
- display: none;
41
- ${mq.range({ from: breakpoints.tablet })} {
42
- display: block;
43
- }
44
- `};
45
- ${(p) =>
46
- p.narrowScreen &&
47
- css`
48
- ${mq.range({ from: breakpoints.tablet })} {
49
- display: block;
50
- }
51
- `};
52
- `;
53
-
54
- const StyledSubjectSectionTitle = styled(SubjectSectionTitle)`
55
- ${mq.range({ from: breakpoints.tablet })} {
56
- margin-left: ${spacing.medium} !important;
57
- }
58
-
59
- ${mq.range({ from: breakpoints.desktop })} {
60
- margin-left: ${spacingUnit * 3}px !important;
61
- }
62
- `;
63
-
64
- const SubjectCarousel = ({
65
- subjects = [],
66
- title = '',
67
- narrowScreen = false,
68
- wideScreen = false,
69
- headingLevel,
70
- }: Props) => {
71
- const { t } = useTranslation();
72
- return (
73
- <StyledSection narrowScreen={narrowScreen} wideScreen={wideScreen}>
74
- <CarouselAutosize
75
- breakpoints={[
76
- {
77
- until: 'mobile',
78
- columnsPrSlide: 1,
79
- distanceBetweenItems: 26,
80
- arrowOffset: 26,
81
- },
82
- {
83
- until: 'mobileWide',
84
- columnsPrSlide: 2,
85
- distanceBetweenItems: 26,
86
- arrowOffset: 26,
87
- },
88
- {
89
- until: 'tablet',
90
- columnsPrSlide: 2.25,
91
- distanceBetweenItems: 26,
92
- arrowOffset: 26,
93
- margin: spacingUnit,
94
- },
95
- {
96
- until: 'tabletWide',
97
- columnsPrSlide: 3.25,
98
- distanceBetweenItems: 26,
99
- arrowOffset: 26,
100
- margin: spacingUnit * 1.25,
101
- },
102
- {
103
- until: 'desktop',
104
- columnsPrSlide: 4.25,
105
- distanceBetweenItems: 26,
106
- arrowOffset: 26,
107
- margin: spacingUnit * 1.25,
108
- },
109
- {
110
- until: 'wide',
111
- columnsPrSlide: 4,
112
- distanceBetweenItems: 26,
113
- arrowOffset: 26,
114
- margin: spacingUnit * 2.5,
115
- },
116
- {
117
- until: 'ultraWide',
118
- columnsPrSlide: 5,
119
- distanceBetweenItems: 26,
120
- arrowOffset: 26,
121
- margin: spacingUnit * 2.5,
122
- },
123
- {
124
- columnsPrSlide: 7,
125
- distanceBetweenItems: 26,
126
- arrowOffset: 26,
127
- margin: spacingUnit * 2.5,
128
- maxColumnWidth: 200,
129
- },
130
- ]}
131
- centered
132
- itemsLength={subjects?.length ?? 0}>
133
- {(autoSizedProps) => (
134
- <>
135
- <StyledSubjectSectionTitle headingLevel={headingLevel}>{title}</StyledSubjectSectionTitle>
136
- <Carousel
137
- {...autoSizedProps}
138
- disableScroll={(autoSizedProps?.columnsPrSlide ?? 0) >= subjects.length}
139
- slideBackwardsLabel={t('carousel.back')}
140
- slideForwardsLabel={t('carousel.forward')}
141
- buttonClass="c-carousel__arrow"
142
- wrapperClass="c-carousel__wrapper"
143
- columnWidth={autoSizedProps?.columnWidth ?? 0}
144
- columnsPrSlide={autoSizedProps?.columnsPrSlide ?? 0}
145
- items={subjects.map((subject) => (
146
- <ContentCard
147
- {...subject}
148
- columnWidth={autoSizedProps?.columnWidth ?? 0}
149
- type={subject.type ?? ''}
150
- image={subject.image ?? ''}
151
- key={subject.id}
152
- />
153
- ))}
154
- />
155
- </>
156
- )}
157
- </CarouselAutosize>
158
- </StyledSection>
159
- );
160
- };
161
-
162
- export default SubjectCarousel;