@ndla/ui 3.2.1-alpha.5 → 3.2.3

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 (188) hide show
  1. package/es/Article/ArticleAuthorContent.js +1 -2
  2. package/es/Article/ArticleSideBar.js +42 -14
  3. package/es/AuthorInfo/AuthorInfo.js +1 -2
  4. package/es/BackgroundImage/BackgroundImage.js +5 -15
  5. package/es/ContentLoader/index.js +14 -27
  6. package/es/Dialog/Dialog.js +10 -28
  7. package/es/FactBox/FactBox.js +7 -11
  8. package/es/Figure/Figure.js +13 -41
  9. package/es/Figure/FigureExpandButton.js +2 -11
  10. package/es/Figure/FigureLicense.js +4 -24
  11. package/es/Figure/FigureLicenseDialog.js +2 -20
  12. package/es/FileList/File.js +0 -13
  13. package/es/FileList/FileList.js +0 -13
  14. package/es/Hero/Hero.js +0 -6
  15. package/es/Image/Image.js +4 -27
  16. package/es/Image/ImageLink.js +3 -12
  17. package/es/Image/LazyLoadImage.js +4 -13
  18. package/es/InfoBox/InfoBox.js +0 -4
  19. package/es/InfoWidget/InfoWidget.js +2 -21
  20. package/es/Logo/Logo.js +6 -22
  21. package/es/Logo/SvgLogo.js +4 -12
  22. package/es/Masthead/Masthead.js +12 -33
  23. package/es/NoContentBox/NoContentBox.js +2 -11
  24. package/es/Portrait/Portrait.js +0 -11
  25. package/es/RelatedArticleList/RelatedArticleList.js +4 -23
  26. package/es/ResourcesWrapper/ResourcesTitle.js +0 -4
  27. package/es/ResourcesWrapper/ResourcesTopicTitle.js +12 -25
  28. package/es/ResourcesWrapper/ResourcesWrapper.js +2 -11
  29. package/es/Topic/Topic.js +21 -22
  30. package/es/Translation/Translation.js +0 -5
  31. package/es/Translation/TranslationBox.js +7 -3
  32. package/es/Translation/TranslationLine.js +4 -15
  33. package/es/index-javascript.js +1 -19
  34. package/es/index.js +18 -0
  35. package/es/locale/messages-en.js +4 -0
  36. package/es/locale/messages-nb.js +5 -1
  37. package/es/locale/messages-nn.js +5 -1
  38. package/lib/Article/ArticleSideBar.d.ts +2 -1
  39. package/lib/Article/ArticleSideBar.js +43 -14
  40. package/lib/BackgroundImage/BackgroundImage.d.ts +11 -0
  41. package/lib/BackgroundImage/BackgroundImage.js +5 -17
  42. package/lib/BackgroundImage/index.d.ts +2 -0
  43. package/lib/ContentLoader/index.d.ts +20 -0
  44. package/lib/ContentLoader/index.js +14 -28
  45. package/lib/Dialog/Dialog.d.ts +23 -0
  46. package/lib/Dialog/Dialog.js +9 -29
  47. package/lib/Dialog/index.d.ts +10 -0
  48. package/lib/FactBox/FactBox.d.ts +16 -0
  49. package/lib/FactBox/FactBox.js +5 -11
  50. package/lib/FactBox/index.d.ts +2 -0
  51. package/lib/Figure/Figure.d.ts +49 -0
  52. package/lib/Figure/Figure.js +11 -41
  53. package/lib/Figure/FigureExpandButton.d.ts +16 -0
  54. package/lib/Figure/FigureExpandButton.js +2 -13
  55. package/lib/Figure/FigureLicense.d.ts +33 -0
  56. package/lib/Figure/FigureLicense.js +5 -27
  57. package/lib/Figure/FigureLicenseDialog.d.ts +29 -0
  58. package/lib/Figure/FigureLicenseDialog.js +1 -22
  59. package/lib/Figure/index.d.ts +12 -0
  60. package/lib/FileList/File.d.ts +7 -0
  61. package/lib/FileList/File.js +0 -14
  62. package/lib/FileList/FileList.d.ts +17 -0
  63. package/lib/FileList/FileList.js +0 -14
  64. package/lib/FileList/index.d.ts +3 -0
  65. package/lib/Hero/Hero.d.ts +27 -0
  66. package/lib/Hero/Hero.js +0 -8
  67. package/lib/Hero/index.d.ts +9 -0
  68. package/lib/Image/Image.d.ts +34 -0
  69. package/lib/Image/Image.js +4 -28
  70. package/lib/Image/ImageLink.d.ts +18 -0
  71. package/lib/Image/ImageLink.js +3 -15
  72. package/lib/Image/LazyLoadImage.d.ts +17 -0
  73. package/lib/Image/LazyLoadImage.js +3 -13
  74. package/lib/Image/index.d.ts +12 -0
  75. package/lib/InfoBox/InfoBox.d.ts +6 -0
  76. package/lib/InfoBox/InfoBox.js +0 -5
  77. package/{src/InfoBox/index.js → lib/InfoBox/index.d.ts} +0 -0
  78. package/lib/InfoWidget/InfoWidget.d.ts +19 -0
  79. package/lib/InfoWidget/InfoWidget.js +2 -22
  80. package/lib/InfoWidget/index.d.ts +2 -0
  81. package/lib/Logo/Logo.d.ts +24 -0
  82. package/lib/Logo/Logo.js +6 -29
  83. package/lib/Logo/SvgLogo.d.ts +14 -0
  84. package/lib/Logo/SvgLogo.js +4 -13
  85. package/lib/Logo/index.d.ts +9 -0
  86. package/lib/Masthead/Masthead.d.ts +27 -0
  87. package/lib/Masthead/Masthead.js +10 -34
  88. package/lib/Masthead/index.d.ts +10 -0
  89. package/lib/NoContentBox/NoContentBox.d.ts +14 -0
  90. package/lib/NoContentBox/NoContentBox.js +1 -11
  91. package/lib/NoContentBox/index.d.ts +9 -0
  92. package/lib/Portrait/Portrait.d.ts +15 -0
  93. package/lib/Portrait/Portrait.js +0 -12
  94. package/lib/Portrait/index.d.ts +9 -0
  95. package/lib/RelatedArticleList/RelatedArticleList.d.ts +25 -0
  96. package/lib/RelatedArticleList/RelatedArticleList.js +2 -23
  97. package/lib/RelatedArticleList/index.d.ts +10 -0
  98. package/lib/ResourcesWrapper/ResourcesTitle.d.ts +13 -0
  99. package/lib/ResourcesWrapper/ResourcesTitle.js +0 -5
  100. package/lib/ResourcesWrapper/ResourcesTopicTitle.d.ts +13 -0
  101. package/lib/ResourcesWrapper/ResourcesTopicTitle.js +11 -26
  102. package/lib/ResourcesWrapper/ResourcesWrapper.d.ts +18 -0
  103. package/lib/ResourcesWrapper/ResourcesWrapper.js +2 -12
  104. package/lib/ResourcesWrapper/index.d.ts +11 -0
  105. package/lib/Topic/Topic.d.ts +3 -2
  106. package/lib/Topic/Topic.js +20 -20
  107. package/lib/Translation/Translation.d.ts +14 -0
  108. package/lib/Translation/Translation.js +0 -6
  109. package/lib/Translation/TranslationBox.d.ts +10 -0
  110. package/lib/Translation/TranslationBox.js +6 -2
  111. package/lib/Translation/TranslationLine.d.ts +16 -0
  112. package/lib/Translation/TranslationLine.js +4 -22
  113. package/{src/Translation/index.js → lib/Translation/index.d.ts} +0 -0
  114. package/lib/index-javascript.js +0 -250
  115. package/lib/index.d.ts +18 -0
  116. package/lib/index.js +286 -0
  117. package/lib/locale/messages-en.d.ts +4 -0
  118. package/lib/locale/messages-en.js +4 -0
  119. package/lib/locale/messages-nb.d.ts +4 -0
  120. package/lib/locale/messages-nb.js +5 -1
  121. package/lib/locale/messages-nn.d.ts +4 -0
  122. package/lib/locale/messages-nn.js +5 -1
  123. package/lib/utils/createUniversalPortal.d.ts +9 -0
  124. package/package.json +6 -6
  125. package/src/Article/ArticleAuthorContent.tsx +0 -1
  126. package/src/Article/ArticleSideBar.tsx +31 -3
  127. package/src/AuthorInfo/AuthorInfo.tsx +0 -1
  128. package/src/BackgroundImage/BackgroundImage.tsx +32 -0
  129. package/src/BackgroundImage/{index.js → index.ts} +0 -0
  130. package/src/ContentLoader/{index.js → index.tsx} +20 -30
  131. package/src/Dialog/{Dialog.jsx → Dialog.tsx} +20 -32
  132. package/src/Dialog/{index.js → index.ts} +0 -0
  133. package/src/FactBox/{FactBox.jsx → FactBox.tsx} +12 -14
  134. package/src/FactBox/{index.js → index.ts} +0 -0
  135. package/src/Figure/{Figure.js → Figure.tsx} +46 -53
  136. package/src/Figure/{FigureExpandButton.js → FigureExpandButton.tsx} +8 -9
  137. package/src/Figure/{FigureLicense.js → FigureLicense.tsx} +32 -30
  138. package/src/Figure/{FigureLicenseDialog.js → FigureLicenseDialog.tsx} +22 -22
  139. package/src/Figure/{index.js → index.ts} +0 -0
  140. package/src/FileList/{File.jsx → File.tsx} +8 -18
  141. package/src/FileList/FileList.tsx +36 -0
  142. package/src/FileList/{index.js → index.ts} +0 -0
  143. package/src/Hero/Hero.tsx +58 -0
  144. package/src/Hero/{index.js → index.ts} +2 -0
  145. package/src/Image/{Image.jsx → Image.tsx} +40 -30
  146. package/src/Image/{ImageLink.js → ImageLink.tsx} +11 -12
  147. package/src/Image/LazyLoadImage.tsx +40 -0
  148. package/src/Image/__tests__/__snapshots__/Image-test.jsx.snap +4 -3
  149. package/src/Image/{index.js → index.ts} +1 -0
  150. package/src/InfoBox/InfoBox.tsx +11 -0
  151. package/src/InfoBox/index.ts +1 -0
  152. package/src/InfoWidget/{InfoWidget.jsx → InfoWidget.tsx} +19 -26
  153. package/src/InfoWidget/{index.js → index.ts} +0 -0
  154. package/src/Logo/{Logo.jsx → Logo.tsx} +21 -28
  155. package/src/Logo/{SvgLogo.jsx → SvgLogo.tsx} +8 -14
  156. package/src/Logo/{index.js → index.ts} +0 -0
  157. package/src/Masthead/{Masthead.jsx → Masthead.tsx} +33 -35
  158. package/src/Masthead/{index.js → index.ts} +0 -0
  159. package/src/NoContentBox/{NoContentBox.jsx → NoContentBox.tsx} +7 -13
  160. package/src/NoContentBox/{index.js → index.ts} +0 -0
  161. package/src/Portrait/{Portrait.jsx → Portrait.tsx} +8 -14
  162. package/src/Portrait/{index.js → index.ts} +0 -0
  163. package/src/RelatedArticleList/{RelatedArticleList.jsx → RelatedArticleList.tsx} +43 -30
  164. package/src/RelatedArticleList/{index.js → index.ts} +0 -0
  165. package/src/ResourcesWrapper/{ResourcesTitle.jsx → ResourcesTitle.tsx} +5 -7
  166. package/src/ResourcesWrapper/{ResourcesTopicTitle.jsx → ResourcesTopicTitle.tsx} +23 -22
  167. package/src/ResourcesWrapper/{ResourcesWrapper.jsx → ResourcesWrapper.tsx} +9 -14
  168. package/src/ResourcesWrapper/{index.js → index.ts} +0 -0
  169. package/src/Topic/Topic.tsx +3 -4
  170. package/src/Translation/{Translation.jsx → Translation.tsx} +7 -8
  171. package/src/Translation/TranslationBox.tsx +20 -0
  172. package/src/Translation/{TranslationLine.jsx → TranslationLine.tsx} +11 -18
  173. package/src/Translation/index.ts +3 -0
  174. package/src/index-javascript.js +0 -33
  175. package/src/index.ts +43 -0
  176. package/src/locale/messages-en.ts +4 -0
  177. package/src/locale/messages-nb.ts +5 -1
  178. package/src/locale/messages-nn.ts +5 -1
  179. package/src/utils/{createUniversalPortal.jsx → createUniversalPortal.tsx} +3 -3
  180. package/es/Image/shapes.js +0 -18
  181. package/lib/Image/shapes.js +0 -33
  182. package/src/BackgroundImage/BackgroundImage.jsx +0 -39
  183. package/src/FileList/FileList.jsx +0 -36
  184. package/src/Hero/Hero.jsx +0 -38
  185. package/src/Image/LazyLoadImage.jsx +0 -39
  186. package/src/Image/shapes.js +0 -21
  187. package/src/InfoBox/InfoBox.jsx +0 -13
  188. package/src/Translation/TranslationBox.jsx +0 -12
@@ -1,6 +1,6 @@
1
- import React, { cloneElement } from 'react';
2
- import PropTypes from 'prop-types';
1
+ import React, { cloneElement, ReactElement } from 'react';
3
2
  import BEMHelper from 'react-bem-helper';
3
+ //@ts-ignore
4
4
  import Button from '@ndla/button';
5
5
  import SafeLink from '@ndla/safelink';
6
6
  import SectionHeading from '../SectionHeading';
@@ -10,14 +10,32 @@ const classes = new BEMHelper({
10
10
  prefix: 'c-',
11
11
  });
12
12
 
13
- export const RelatedArticle = ({ title, introduction, icon, modifier, to, linkInfo = '', target = '' }) => {
13
+ interface RelatedArticleProps {
14
+ icon: ReactElement;
15
+ title: string;
16
+ modifier?: string;
17
+ introduction: string;
18
+ to: string;
19
+ linkInfo?: string;
20
+ target?: string;
21
+ }
22
+
23
+ export const RelatedArticle = ({
24
+ title,
25
+ introduction,
26
+ icon,
27
+ modifier,
28
+ to,
29
+ linkInfo = '',
30
+ target = '',
31
+ }: RelatedArticleProps) => {
14
32
  const iconWithClass = cloneElement(icon, { className: 'c-icon--medium' });
15
33
  return (
16
34
  <article {...classes('item', modifier)}>
17
35
  <h1 {...classes('title')}>
18
36
  {iconWithClass}
19
37
  <span {...classes('link-wrapper')}>
20
- <SafeLink to={to} {...classes('link')} target={target} rel={linkInfo ? 'noopener noreferrer' : null}>
38
+ <SafeLink to={to} {...classes('link')} target={target} rel={linkInfo ? 'noopener noreferrer' : undefined}>
21
39
  {title}
22
40
  </SafeLink>
23
41
  </span>
@@ -28,24 +46,27 @@ export const RelatedArticle = ({ title, introduction, icon, modifier, to, linkIn
28
46
  );
29
47
  };
30
48
 
31
- RelatedArticle.propTypes = {
32
- icon: PropTypes.node.isRequired,
33
- title: PropTypes.string.isRequired,
34
- modifier: PropTypes.string,
35
- introduction: PropTypes.string.isRequired,
36
- to: PropTypes.string.isRequired,
37
- linkInfo: PropTypes.string,
38
- target: PropTypes.string,
39
- };
40
-
41
- const RelatedArticleList = ({ messages, children, articleCount, dangerouslySetInnerHTML }) => {
42
- const clonedChildren = !dangerouslySetInnerHTML
43
- ? React.Children.map(children, (article, i) =>
44
- React.cloneElement(article, {
45
- modifier: i >= 2 ? `${article.props.modifier} hidden` : article.props.modifier,
46
- }),
47
- )
48
- : null;
49
+ interface Props {
50
+ messages: {
51
+ title: string;
52
+ showMore: string;
53
+ showLess: string;
54
+ };
55
+ children?: ReactElement;
56
+ dangerouslySetInnerHTML?: {
57
+ __html: string;
58
+ };
59
+ articleCount?: number;
60
+ }
61
+ const RelatedArticleList = ({ messages, children, articleCount, dangerouslySetInnerHTML }: Props) => {
62
+ const clonedChildren =
63
+ !dangerouslySetInnerHTML && children
64
+ ? React.Children.map(children, (article, i) =>
65
+ React.cloneElement(article, {
66
+ modifier: i >= 2 ? `${article.props.modifier} hidden` : article.props.modifier,
67
+ }),
68
+ )
69
+ : null;
49
70
  const childrenCount = articleCount || React.Children.count(children);
50
71
 
51
72
  return (
@@ -67,12 +88,4 @@ const RelatedArticleList = ({ messages, children, articleCount, dangerouslySetIn
67
88
  );
68
89
  };
69
90
 
70
- RelatedArticleList.propTypes = {
71
- children: PropTypes.node,
72
- messages: PropTypes.shape({ title: PropTypes.string.isRequired }),
73
- dangerouslySetInnerHTML: PropTypes.shape({
74
- __html: PropTypes.string.isRequired,
75
- }),
76
- articleCount: PropTypes.number,
77
- };
78
91
  export default RelatedArticleList;
File without changes
@@ -6,20 +6,18 @@
6
6
  *
7
7
  */
8
8
 
9
- import React from 'react';
10
- import PropTypes from 'prop-types';
9
+ import React, { ReactNode } from 'react';
11
10
  import { classes } from './ResourcesWrapper';
12
11
  import { SubjectBadge } from '../ContentTypeBadge';
13
12
 
14
- const ResourceTitle = ({ children }) => (
13
+ interface Props {
14
+ children: ReactNode;
15
+ }
16
+ const ResourceTitle = ({ children }: Props) => (
15
17
  <div {...classes('title-wrapper')}>
16
18
  <SubjectBadge size="large" background />
17
19
  <h1 {...classes('title')}>{children}</h1>
18
20
  </div>
19
21
  );
20
22
 
21
- ResourceTitle.propTypes = {
22
- children: PropTypes.node.isRequired,
23
- };
24
-
25
23
  export default ResourceTitle;
@@ -1,9 +1,9 @@
1
- import React, { Fragment } from 'react';
2
- import PropTypes from 'prop-types';
1
+ import React, { Fragment, ReactNode } from 'react';
3
2
  import { css } from '@emotion/core';
4
3
  import styled from '@emotion/styled';
5
4
  import { spacing } from '@ndla/core';
6
5
  import { HelpCircleDual } from '@ndla/icons/common';
6
+ //@ts-ignore
7
7
  import Modal, { ModalBody, ModalHeader, ModalCloseButton } from '@ndla/modal';
8
8
  import Tooltip from '@ndla/tooltip';
9
9
  import { Switch } from '@ndla/switch';
@@ -11,7 +11,10 @@ import { useTranslation } from 'react-i18next';
11
11
 
12
12
  import { classes } from './ResourcesWrapper';
13
13
 
14
- const HelpIcon = ({ invertedStyle }) => (
14
+ interface HelpIconProps {
15
+ invertedStyle: boolean;
16
+ }
17
+ const HelpIcon = ({ invertedStyle }: HelpIconProps) => (
15
18
  <div {...classes('topic-title-icon', { invertedStyle })}>
16
19
  <HelpCircleDual className={`c-icon--22 u-margin-left-tiny ${classes('icon').className}`} />
17
20
  </div>
@@ -37,14 +40,25 @@ const TooltipButton = styled.button`
37
40
  cursor: pointer;
38
41
  `;
39
42
 
43
+ interface Props {
44
+ title?: string;
45
+ toggleAdditionalResources: () => void;
46
+ hasAdditionalResources: boolean;
47
+ showAdditionalResources: boolean;
48
+ invertedStyle?: boolean;
49
+ messages: {
50
+ label: string;
51
+ additionalFilterLabel: string;
52
+ };
53
+ }
40
54
  const ResourcesTopicTitle = ({
41
55
  title,
42
56
  hasAdditionalResources,
43
57
  toggleAdditionalResources,
44
58
  showAdditionalResources,
45
59
  messages,
46
- invertedStyle,
47
- }) => {
60
+ invertedStyle = false,
61
+ }: Props) => {
48
62
  const { t } = useTranslation();
49
63
  // Fix for heading while title not required when ready.
50
64
  let heading;
@@ -70,7 +84,7 @@ const ResourcesTopicTitle = ({
70
84
  />
71
85
  <Modal
72
86
  narrow
73
- wrapperFunctionForButton={(activateButton) => (
87
+ wrapperFunctionForButton={(activateButton: ReactNode) => (
74
88
  <TooltipWrapper>
75
89
  <Tooltip tooltip={t('resource.dialogTooltip')}>{activateButton}</Tooltip>
76
90
  </TooltipWrapper>
@@ -80,8 +94,8 @@ const ResourcesTopicTitle = ({
80
94
  <HelpIcon invertedStyle={invertedStyle} />
81
95
  </TooltipButton>
82
96
  }>
83
- {(onClose) => (
84
- <Fragment>
97
+ {(onClose: () => void) => (
98
+ <>
85
99
  <ModalHeader>
86
100
  <ModalCloseButton title={t('modal.closeModal')} onClick={onClose} />
87
101
  </ModalHeader>
@@ -91,7 +105,7 @@ const ResourcesTopicTitle = ({
91
105
  <p>{t('resource.dialogText1')}</p>
92
106
  <p>{t('resource.dialogText2')}</p>
93
107
  </ModalBody>
94
- </Fragment>
108
+ </>
95
109
  )}
96
110
  </Modal>
97
111
  </div>
@@ -100,17 +114,4 @@ const ResourcesTopicTitle = ({
100
114
  );
101
115
  };
102
116
 
103
- /* eslint-disable no-console */
104
- ResourcesTopicTitle.propTypes = {
105
- title: PropTypes.string, // Should be required
106
- toggleAdditionalResources: PropTypes.func.isRequired,
107
- hasAdditionalResources: PropTypes.bool.isRequired,
108
- showAdditionalResources: PropTypes.bool.isRequired,
109
- invertedStyle: PropTypes.bool,
110
- messages: PropTypes.shape({
111
- label: PropTypes.string.isRequired,
112
- additionalFilterLabel: PropTypes.string.isRequired,
113
- }).isRequired,
114
- };
115
-
116
117
  export default ResourcesTopicTitle;
@@ -6,8 +6,7 @@
6
6
  *
7
7
  */
8
8
 
9
- import React from 'react';
10
- import PropTypes from 'prop-types';
9
+ import React, { ReactNode } from 'react';
11
10
  import BEMHelper from 'react-bem-helper';
12
11
 
13
12
  export const classes = new BEMHelper({
@@ -15,22 +14,18 @@ export const classes = new BEMHelper({
15
14
  prefix: 'c-',
16
15
  });
17
16
 
18
- const ResourcesWrapper = ({ children, header, subjectPage, id }) => (
17
+ interface Props {
18
+ header?: ReactNode;
19
+ children: ReactNode;
20
+ subjectPage?: boolean;
21
+ id?: string;
22
+ }
23
+
24
+ const ResourcesWrapper = ({ children, header, subjectPage = false, id }: Props) => (
19
25
  <section {...classes('', { subjectPage })} id={id}>
20
26
  {header}
21
27
  <div {...classes('content')}>{children}</div>
22
28
  </section>
23
29
  );
24
30
 
25
- ResourcesWrapper.propTypes = {
26
- header: PropTypes.node,
27
- children: PropTypes.node.isRequired,
28
- subjectPage: PropTypes.bool,
29
- id: PropTypes.string,
30
- };
31
-
32
- ResourcesWrapper.defaultProps = {
33
- subjectPage: false,
34
- };
35
-
36
31
  export default ResourcesWrapper;
File without changes
@@ -22,8 +22,7 @@ import { useTranslation } from 'react-i18next';
22
22
  import Loader from './Loader';
23
23
  import { ItemProps } from '../Navigation/NavigationBox';
24
24
  import { NavigationBox } from '../Navigation';
25
- // @ts-ignore
26
- import { makeSrcQueryString } from '../Image';
25
+ import { makeSrcQueryString, ImageCrop, ImageFocalPoint } from '../Image';
27
26
 
28
27
  type InvertItProps = {
29
28
  invertedStyle?: boolean;
@@ -223,8 +222,8 @@ export type TopicProps = {
223
222
  image?: {
224
223
  url: string;
225
224
  alt: string;
226
- crop?: object;
227
- focalPoint?: object;
225
+ crop?: ImageCrop;
226
+ focalPoint?: ImageFocalPoint;
228
227
  };
229
228
  visualElement?: VisualElementProps;
230
229
  resources?: React.ReactNode;
@@ -6,8 +6,7 @@
6
6
  *
7
7
  */
8
8
 
9
- import React from 'react';
10
- import PropTypes from 'prop-types';
9
+ import React, { ReactNode } from 'react';
11
10
  import BEMHelper from 'react-bem-helper';
12
11
 
13
12
  const classes = new BEMHelper({
@@ -15,16 +14,16 @@ const classes = new BEMHelper({
15
14
  prefix: 'c-',
16
15
  });
17
16
 
18
- const Translation = ({ children, index }) => (
17
+ interface Props {
18
+ children: ReactNode;
19
+ index: number;
20
+ }
21
+
22
+ const Translation = ({ children, index }: Props) => (
19
23
  <div {...classes('')}>
20
24
  <div {...classes('index')}>{index}</div>
21
25
  <dl {...classes('wrapper')}>{children}</dl>
22
26
  </div>
23
27
  );
24
28
 
25
- Translation.propTypes = {
26
- index: PropTypes.number.isRequired,
27
- children: PropTypes.node.isRequired,
28
- };
29
-
30
29
  export default Translation;
@@ -0,0 +1,20 @@
1
+ import React, { ReactNode } from 'react';
2
+ //@ts-ignore
3
+ import { ArticleTabs } from '@ndla/tabs';
4
+
5
+ interface Props {
6
+ tabs: {
7
+ id: string;
8
+ title: string;
9
+ content: () => ReactNode | ReactNode;
10
+ }[];
11
+ }
12
+ const TranslationBox = ({ tabs }: Props) => (
13
+ <div className="c-translation-box">
14
+ <div className="c-bodybox c-bodybox--translation">
15
+ <ArticleTabs tabs={tabs} />
16
+ </div>
17
+ </div>
18
+ );
19
+
20
+ export default TranslationBox;
@@ -6,8 +6,7 @@
6
6
  *
7
7
  */
8
8
 
9
- import React, { Fragment } from 'react';
10
- import PropTypes from 'prop-types';
9
+ import React, { ReactNode } from 'react';
11
10
  import BEMHelper from 'react-bem-helper';
12
11
 
13
12
  const classes = new BEMHelper({
@@ -15,15 +14,22 @@ const classes = new BEMHelper({
15
14
  prefix: 'c-',
16
15
  });
17
16
 
18
- const TranslationLine = ({ children, lang, langName, isTerm }) => {
17
+ interface Props {
18
+ isTerm?: boolean;
19
+ children: ReactNode;
20
+ lang?: string;
21
+ langName?: string;
22
+ }
23
+
24
+ const TranslationLine = ({ children, lang, langName, isTerm = false }: Props) => {
19
25
  const hasLang = langName && lang;
20
26
  const content = (
21
- <Fragment>
27
+ <>
22
28
  <div {...classes('line-body')} lang={lang}>
23
29
  {children}
24
30
  </div>
25
31
  {hasLang && <div {...classes('line-lang')}>{langName}</div>}
26
- </Fragment>
32
+ </>
27
33
  );
28
34
 
29
35
  if (isTerm) {
@@ -33,17 +39,4 @@ const TranslationLine = ({ children, lang, langName, isTerm }) => {
33
39
  return <dd {...classes('line', hasLang ? 'lang' : '')}>{content}</dd>;
34
40
  };
35
41
 
36
- TranslationLine.propTypes = {
37
- isTerm: PropTypes.bool,
38
- children: PropTypes.node.isRequired,
39
- lang: PropTypes.string,
40
- langName: PropTypes.string,
41
- };
42
-
43
- TranslationLine.defaultProps = {
44
- isTerm: false,
45
- lang: undefined,
46
- langName: undefined,
47
- };
48
-
49
42
  export default TranslationLine;
@@ -0,0 +1,3 @@
1
+ export { default as Translation } from './Translation';
2
+ export { default as TranslationBox } from './TranslationBox';
3
+ export { default as TranslationLine } from './TranslationLine';
@@ -6,13 +6,8 @@
6
6
  *
7
7
  */
8
8
 
9
- export { InfoBox } from './InfoBox';
10
-
11
- export { default as Logo } from './Logo';
12
9
  export { default as Table } from './Table';
13
10
  export { FilterList, FilterListPhone, FilterButtons } from './Filter';
14
- export { default as FactBox } from './FactBox';
15
- export { default as FileList, File } from './FileList';
16
11
 
17
12
  export {
18
13
  SearchOverlay,
@@ -39,10 +34,8 @@ export {
39
34
  ExternalLearningResourcesBadge,
40
35
  SourceMaterialBadge,
41
36
  } from './ContentTypeBadge';
42
- export { createUniversalPortal } from './utils/createUniversalPortal';
43
37
  export { default as TopicIntroductionList } from './TopicIntroductionList';
44
38
  export { default as TopicMenu, TopicMenuButton } from './TopicMenu';
45
- export { default as RelatedArticleList, RelatedArticle } from './RelatedArticleList';
46
39
  export {
47
40
  default as CompetenceGoals,
48
41
  CompetenceGoalList,
@@ -51,21 +44,6 @@ export {
51
44
  CompetenceGoalsDialog,
52
45
  } from './CompetenceGoals';
53
46
 
54
- export { default as NoContentBox } from './NoContentBox';
55
-
56
- export { default as ResourcesWrapper, ResourcesTitle, ResourcesTopicTitle } from './ResourcesWrapper';
57
- export {
58
- SubjectMaterialHero,
59
- TasksAndActivitiesHero,
60
- AssessmentResourcesHero,
61
- SubjectHero,
62
- ExternalLearningResourcesHero,
63
- SourceMaterialHero,
64
- Hero,
65
- NdlaFilmHero,
66
- } from './Hero';
67
- export { default as Masthead, MastheadItem } from './Masthead';
68
- export { Figure, FigureCaption, FigureLicenseDialog, FigureExpandButton } from './Figure';
69
47
  export {
70
48
  MediaList,
71
49
  MediaListItem,
@@ -77,17 +55,8 @@ export {
77
55
 
78
56
  export { EmbeddedTwitter, EmbeddedFacebook, EmbeddedFacebookPage } from './Embedded';
79
57
 
80
- export { default as Image, ImageLink } from './Image';
81
- export { makeSrcQueryString } from './Image';
82
- export { default as Portrait } from './Portrait';
83
- export { Translation, TranslationLine, TranslationBox } from './Translation';
84
-
85
- export { default as ContentLoader } from './ContentLoader';
86
-
87
58
  export { DisplayOnPageYOffset } from './Animation';
88
59
 
89
- export { default as InfoWidget } from './InfoWidget';
90
-
91
60
  export {
92
61
  FilmSlideshow,
93
62
  MovieGrid,
@@ -96,5 +65,3 @@ export {
96
65
  FilmMovieList,
97
66
  AllMoviesAlphabetically,
98
67
  } from './NDLAFilm';
99
-
100
- export { default as Spinner } from './Spinner';
package/src/index.ts CHANGED
@@ -24,10 +24,32 @@ export {
24
24
  default as Article,
25
25
  } from './Article';
26
26
 
27
+ export { default as ResourcesWrapper, ResourcesTitle, ResourcesTopicTitle } from './ResourcesWrapper';
28
+
29
+ export { createUniversalPortal } from './utils/createUniversalPortal';
30
+
31
+ export { default as NoContentBox } from './NoContentBox';
32
+
33
+ export { default as Masthead, MastheadItem } from './Masthead';
34
+
35
+ export { default as Portrait } from './Portrait';
36
+
37
+ export { default as ContentLoader } from './ContentLoader';
38
+
39
+ export { default as RelatedArticleList, RelatedArticle } from './RelatedArticleList';
40
+
27
41
  export { ErrorResourceAccessDenied, default as ErrorMessage } from './ErrorMessage';
28
42
 
43
+ export { default as FileList, File } from './FileList';
44
+
29
45
  export { BlogPost, BlogPostWrapper } from './BlogPosts';
30
46
 
47
+ export { default as Logo } from './Logo';
48
+
49
+ export { InfoBox } from './InfoBox';
50
+
51
+ export { default as InfoWidget } from './InfoWidget';
52
+
31
53
  export {
32
54
  FrontpageInfo,
33
55
  FrontpageFilm,
@@ -39,8 +61,26 @@ export {
39
61
  FrontpageProgramMenu,
40
62
  } from './Frontpage';
41
63
 
64
+ export { default as FactBox } from './FactBox';
65
+
66
+ export { default as Image, ImageLink } from './Image';
67
+ export { makeSrcQueryString } from './Image';
68
+
69
+ export {
70
+ SubjectMaterialHero,
71
+ TasksAndActivitiesHero,
72
+ AssessmentResourcesHero,
73
+ SubjectHero,
74
+ ExternalLearningResourcesHero,
75
+ SourceMaterialHero,
76
+ Hero,
77
+ NdlaFilmHero,
78
+ } from './Hero';
79
+
42
80
  export { Footer, EditorName, FooterText, FooterAuth } from './Footer';
43
81
 
82
+ export { Figure, FigureCaption, FigureLicenseDialog, FigureExpandButton } from './Figure';
83
+
44
84
  export { LanguageSelector } from './LanguageSelector';
45
85
 
46
86
  export {
@@ -55,6 +95,9 @@ export {
55
95
  LearningPathMobileStepInfo,
56
96
  LearningPathMobileHeader,
57
97
  } from './LearningPaths';
98
+ export { Translation, TranslationLine, TranslationBox } from './Translation';
99
+
100
+ export { default as Spinner } from './Spinner';
58
101
 
59
102
  export { default as SearchResultSleeve } from './Search/SearchResultSleeve';
60
103
 
@@ -808,6 +808,10 @@ const messages = {
808
808
  reuse: 'Use video',
809
809
  error: 'Sorry, an error occurred while loading the video or metadata about the video.',
810
810
  },
811
+ other: {
812
+ download: 'Download content',
813
+ reuse: 'Use content',
814
+ },
811
815
  concept: {
812
816
  showDescription: 'Show concept description',
813
817
  error: {
@@ -538,7 +538,7 @@ const messages = {
538
538
  es: 'Spansk',
539
539
  zh: 'Kinesisk',
540
540
  unknown: 'Ukjent',
541
- prefixChangeLanguage: 'Velg målform',
541
+ prefixChangeLanguage: 'Velg språk',
542
542
  },
543
543
  changeLanguage: {
544
544
  nb: 'Endre språk til bokmål',
@@ -807,6 +807,10 @@ const messages = {
807
807
  reuse: 'Bruk video',
808
808
  error: 'Beklager, en feil oppstod ved lasting av videoen eller metadata om videoen.',
809
809
  },
810
+ other: {
811
+ download: 'Last ned innhold',
812
+ reuse: 'Bruk innhold',
813
+ },
810
814
  concept: {
811
815
  showDescription: 'Vis beskrivelsen av forklaringen.',
812
816
  error: {
@@ -539,7 +539,7 @@ const messages = {
539
539
  es: 'Spansk',
540
540
  zh: 'Kinesisk',
541
541
  unknown: 'Ukjent',
542
- prefixChangeLanguage: 'Vel målform',
542
+ prefixChangeLanguage: 'Vel språk',
543
543
  },
544
544
  changeLanguage: {
545
545
  nb: 'Endre språk til bokmål',
@@ -808,6 +808,10 @@ const messages = {
808
808
  reuse: 'Bruk video',
809
809
  error: 'Orsak, ein feil oppstod ved lasting av videoen eller metadata om videoen.',
810
810
  },
811
+ other: {
812
+ download: 'Last ned innhald',
813
+ reuse: 'Bruk innhald',
814
+ },
811
815
  concept: {
812
816
  showDescription: 'Vis skildring av forklaringa',
813
817
  error: {
@@ -8,7 +8,7 @@
8
8
 
9
9
  // N.B This helper is intended to be used in https://github.com/ndlano/article-converter. It is not a general soultion for using portals in SSR applications.
10
10
 
11
- import React from 'react';
11
+ import React, { ReactNode } from 'react';
12
12
  import ReactDOM from 'react-dom';
13
13
 
14
14
  function canUseDOM() {
@@ -20,9 +20,9 @@ function canUseDOM() {
20
20
  ); // window.document.hidden === jsdom check
21
21
  }
22
22
 
23
- export function createUniversalPortal(children, selector) {
23
+ export function createUniversalPortal(children: ReactNode, selector: string) {
24
24
  if (!canUseDOM()) {
25
25
  return <div data-react-universal-portal>{children}</div>;
26
26
  }
27
- return ReactDOM.createPortal(children, document.querySelector(selector));
27
+ return ReactDOM.createPortal(children, document.querySelector(selector) as Element);
28
28
  }
@@ -1,18 +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
- import PropTypes from 'prop-types';
9
- export var CropShape = PropTypes.shape({
10
- startX: PropTypes.number.isRequired,
11
- startY: PropTypes.number.isRequired,
12
- endX: PropTypes.number.isRequired,
13
- endY: PropTypes.number.isRequired
14
- });
15
- export var FocalPointShape = PropTypes.shape({
16
- x: PropTypes.number.isRequired,
17
- y: PropTypes.number.isRequired
18
- });
@@ -1,33 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.FocalPointShape = exports.CropShape = void 0;
7
-
8
- var _propTypes = _interopRequireDefault(require("prop-types"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
11
-
12
- /**
13
- * Copyright (c) 2019-present, NDLA.
14
- *
15
- * This source code is licensed under the GPLv3 license found in the
16
- * LICENSE file in the root directory of this source tree.
17
- *
18
- */
19
- var CropShape = _propTypes["default"].shape({
20
- startX: _propTypes["default"].number.isRequired,
21
- startY: _propTypes["default"].number.isRequired,
22
- endX: _propTypes["default"].number.isRequired,
23
- endY: _propTypes["default"].number.isRequired
24
- });
25
-
26
- exports.CropShape = CropShape;
27
-
28
- var FocalPointShape = _propTypes["default"].shape({
29
- x: _propTypes["default"].number.isRequired,
30
- y: _propTypes["default"].number.isRequired
31
- });
32
-
33
- exports.FocalPointShape = FocalPointShape;