@ndla/ui 55.0.13-alpha.0 → 55.0.14-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/dist/panda.buildinfo.json +120 -1
  2. package/dist/styles.css +511 -0
  3. package/es/Article/ArticleParagraph.js +11 -13
  4. package/es/CampaignBlock/CampaignBlock.js +103 -68
  5. package/es/Concept/Concept.js +69 -0
  6. package/es/ContentTypeBadge/ContentTypeBadgeNew.js +48 -0
  7. package/es/Embed/AudioEmbed.js +1 -2
  8. package/es/Embed/BrightcoveEmbed.js +13 -24
  9. package/es/Embed/ConceptEmbed.js +57 -301
  10. package/es/Embed/ConceptListEmbed.js +18 -24
  11. package/es/Embed/ContentLinkEmbed.js +10 -10
  12. package/es/Embed/CopyrightEmbed.js +4 -21
  13. package/es/Embed/ExternalEmbed.js +10 -18
  14. package/es/Embed/FootnoteEmbed.js +11 -8
  15. package/es/Embed/GlossEmbed.js +68 -0
  16. package/es/Embed/H5pEmbed.js +19 -19
  17. package/es/Embed/IframeEmbed.js +9 -6
  18. package/es/Embed/InlineTriggerButton.js +70 -0
  19. package/es/Embed/UnknownEmbed.js +9 -9
  20. package/es/Embed/UuDisclaimerEmbed.js +14 -25
  21. package/es/Embed/index.js +1 -3
  22. package/es/ErrorMessage/ErrorMessage.js +41 -22
  23. package/es/ErrorMessage/ErrorResourceAccessDenied.js +8 -6
  24. package/es/FactBox/FactBox.js +118 -47
  25. package/es/FileList/PdfFile.js +23 -5
  26. package/es/Gloss/Gloss.js +116 -86
  27. package/es/Gloss/GlossExample.js +49 -51
  28. package/es/LinkBlock/LinkBlock.js +61 -33
  29. package/es/LinkBlock/LinkBlockSection.js +9 -6
  30. package/es/Logo/Logo.js +1 -30
  31. package/es/RelatedArticleList/RelatedArticleList.js +70 -87
  32. package/es/ResourceBox/ResourceBox.js +65 -37
  33. package/es/TagSelector/TagSelector.js +124 -131
  34. package/es/i18n/index.js +2 -1
  35. package/es/i18n/useComponentTranslations.js +83 -0
  36. package/es/index.js +4 -11
  37. package/es/locale/messages-en.js +30 -4
  38. package/es/locale/messages-nb.js +30 -4
  39. package/es/locale/messages-nn.js +30 -4
  40. package/es/locale/messages-se.js +30 -4
  41. package/es/locale/messages-sma.js +30 -4
  42. package/es/model/ContentType.js +3 -0
  43. package/es/styles.css +511 -0
  44. package/lib/Article/ArticleParagraph.js +12 -14
  45. package/lib/CampaignBlock/CampaignBlock.d.ts +2 -2
  46. package/lib/CampaignBlock/CampaignBlock.js +106 -68
  47. package/lib/Concept/Concept.d.ts +18 -0
  48. package/lib/Concept/Concept.js +75 -0
  49. package/lib/ContentTypeBadge/ContentTypeBadgeNew.d.ts +17 -0
  50. package/lib/ContentTypeBadge/ContentTypeBadgeNew.js +56 -0
  51. package/lib/Embed/AudioEmbed.js +2 -3
  52. package/lib/Embed/BrightcoveEmbed.d.ts +1 -2
  53. package/lib/Embed/BrightcoveEmbed.js +16 -25
  54. package/lib/Embed/ConceptEmbed.d.ts +15 -21
  55. package/lib/Embed/ConceptEmbed.js +58 -301
  56. package/lib/Embed/ConceptListEmbed.js +21 -26
  57. package/lib/Embed/ContentLinkEmbed.js +10 -11
  58. package/lib/Embed/CopyrightEmbed.js +6 -22
  59. package/lib/Embed/ExternalEmbed.d.ts +1 -2
  60. package/lib/Embed/ExternalEmbed.js +13 -19
  61. package/lib/Embed/FootnoteEmbed.js +11 -9
  62. package/lib/Embed/GlossEmbed.d.ts +13 -0
  63. package/lib/Embed/GlossEmbed.js +76 -0
  64. package/lib/Embed/H5pEmbed.d.ts +1 -2
  65. package/lib/Embed/H5pEmbed.js +21 -19
  66. package/lib/Embed/IframeEmbed.d.ts +1 -2
  67. package/lib/Embed/IframeEmbed.js +11 -8
  68. package/lib/Embed/InlineTriggerButton.d.ts +11 -0
  69. package/lib/Embed/InlineTriggerButton.js +76 -0
  70. package/lib/Embed/UnknownEmbed.js +9 -10
  71. package/lib/Embed/UuDisclaimerEmbed.js +16 -26
  72. package/lib/Embed/index.d.ts +2 -3
  73. package/lib/Embed/index.js +2 -9
  74. package/lib/ErrorMessage/ErrorMessage.js +40 -23
  75. package/lib/ErrorMessage/ErrorResourceAccessDenied.js +7 -6
  76. package/lib/FactBox/FactBox.d.ts +0 -1
  77. package/lib/FactBox/FactBox.js +119 -46
  78. package/lib/FileList/PdfFile.js +23 -5
  79. package/lib/Gloss/Gloss.d.ts +10 -2
  80. package/lib/Gloss/Gloss.js +116 -85
  81. package/lib/Gloss/GlossExample.d.ts +3 -5
  82. package/lib/Gloss/GlossExample.js +49 -52
  83. package/lib/LinkBlock/LinkBlock.js +62 -34
  84. package/lib/LinkBlock/LinkBlockSection.js +9 -7
  85. package/lib/Logo/Logo.d.ts +1 -3
  86. package/lib/Logo/Logo.js +2 -30
  87. package/lib/RelatedArticleList/RelatedArticleList.d.ts +4 -4
  88. package/lib/RelatedArticleList/RelatedArticleList.js +74 -90
  89. package/lib/ResourceBox/ResourceBox.js +64 -37
  90. package/lib/TagSelector/TagSelector.d.ts +27 -12
  91. package/lib/TagSelector/TagSelector.js +126 -131
  92. package/lib/i18n/index.d.ts +1 -0
  93. package/lib/i18n/index.js +20 -1
  94. package/lib/i18n/useComponentTranslations.d.ts +14 -0
  95. package/lib/i18n/useComponentTranslations.js +93 -0
  96. package/lib/index.d.ts +5 -14
  97. package/lib/index.js +70 -89
  98. package/lib/locale/messages-en.d.ts +26 -0
  99. package/lib/locale/messages-en.js +30 -4
  100. package/lib/locale/messages-nb.d.ts +26 -0
  101. package/lib/locale/messages-nb.js +30 -4
  102. package/lib/locale/messages-nn.d.ts +26 -0
  103. package/lib/locale/messages-nn.js +30 -4
  104. package/lib/locale/messages-se.d.ts +26 -0
  105. package/lib/locale/messages-se.js +30 -4
  106. package/lib/locale/messages-sma.d.ts +26 -0
  107. package/lib/locale/messages-sma.js +30 -4
  108. package/lib/model/ContentType.d.ts +3 -0
  109. package/lib/model/ContentType.js +4 -1
  110. package/lib/styles.css +511 -0
  111. package/package.json +11 -13
  112. package/src/Article/ArticleParagraph.tsx +11 -9
  113. package/src/CampaignBlock/CampaignBlock.tsx +92 -55
  114. package/src/Concept/Concept.stories.tsx +142 -0
  115. package/src/Concept/Concept.tsx +73 -0
  116. package/src/ContentTypeBadge/ContentTypeBadgeNew.stories.tsx +70 -0
  117. package/src/ContentTypeBadge/ContentTypeBadgeNew.tsx +69 -0
  118. package/src/Embed/AudioEmbed.tsx +2 -2
  119. package/src/Embed/BrightcoveEmbed.stories.tsx +0 -3
  120. package/src/Embed/BrightcoveEmbed.tsx +17 -19
  121. package/src/Embed/ConceptEmbed.stories.tsx +1 -105
  122. package/src/Embed/ConceptEmbed.tsx +60 -385
  123. package/src/Embed/ConceptListEmbed.tsx +20 -19
  124. package/src/Embed/ContentLinkEmbed.tsx +8 -10
  125. package/src/Embed/CopyrightEmbed.tsx +1 -11
  126. package/src/Embed/ExternalEmbed.tsx +14 -17
  127. package/src/Embed/FootnoteEmbed.stories.tsx +2 -5
  128. package/src/Embed/FootnoteEmbed.tsx +13 -16
  129. package/src/Embed/GlossEmbed.stories.tsx +140 -0
  130. package/src/Embed/GlossEmbed.tsx +64 -0
  131. package/src/Embed/H5pEmbed.tsx +22 -16
  132. package/src/Embed/IframeEmbed.tsx +12 -6
  133. package/src/Embed/InlineTriggerButton.tsx +72 -0
  134. package/src/Embed/UnknownEmbed.tsx +6 -7
  135. package/src/Embed/UuDisclaimerEmbed.stories.tsx +4 -4
  136. package/src/Embed/UuDisclaimerEmbed.tsx +17 -25
  137. package/src/Embed/index.ts +2 -3
  138. package/src/ErrorMessage/ErrorMessage.tsx +40 -29
  139. package/src/ErrorMessage/ErrorResourceAccessDenied.tsx +8 -6
  140. package/src/FactBox/FactBox.tsx +115 -115
  141. package/src/FactBox/Factbox.stories.tsx +43 -27
  142. package/src/FileList/FileList.stories.tsx +6 -1
  143. package/src/FileList/PdfFile.tsx +22 -5
  144. package/src/Gloss/Gloss.stories.tsx +107 -1
  145. package/src/Gloss/Gloss.tsx +143 -156
  146. package/src/Gloss/GlossExample.tsx +51 -77
  147. package/src/LinkBlock/LinkBlock.stories.tsx +8 -10
  148. package/src/LinkBlock/LinkBlock.tsx +54 -59
  149. package/src/LinkBlock/LinkBlockSection.tsx +9 -12
  150. package/src/Logo/Logo.stories.tsx +0 -1
  151. package/src/Logo/Logo.tsx +2 -30
  152. package/src/RelatedArticleList/RelatedArticleList.tsx +69 -88
  153. package/src/ResourceBox/ResourceBox.tsx +63 -59
  154. package/src/TagSelector/TagSelector.stories.tsx +92 -68
  155. package/src/TagSelector/TagSelector.tsx +161 -126
  156. package/src/i18n/index.ts +5 -0
  157. package/src/i18n/useComponentTranslations.ts +72 -0
  158. package/src/index.ts +23 -18
  159. package/src/locale/messages-en.ts +28 -2
  160. package/src/locale/messages-nb.ts +28 -2
  161. package/src/locale/messages-nn.ts +28 -2
  162. package/src/locale/messages-se.ts +28 -2
  163. package/src/locale/messages-sma.ts +28 -2
  164. package/src/model/ContentType.ts +3 -0
  165. package/es/DefinitionList/DefinitionDescription.js +0 -28
  166. package/es/DefinitionList/DefinitionTerm.js +0 -28
  167. package/es/DefinitionList/index.js +0 -10
  168. package/es/Embed/conceptComponents.js +0 -155
  169. package/es/ExpandableBox/ExpandableBox.js +0 -29
  170. package/es/ExpandableBox/index.js +0 -9
  171. package/es/Figure/Figure.js +0 -73
  172. package/es/Figure/index.js +0 -9
  173. package/es/FramedContent/FramedContent.js +0 -28
  174. package/es/FramedContent/index.js +0 -10
  175. package/es/Image/Image.js +0 -99
  176. package/es/Image/ImageLink.js +0 -39
  177. package/es/Image/index.js +0 -12
  178. package/es/LetterFilter/LetterFilter.js +0 -54
  179. package/es/LetterFilter/alphabet.js +0 -9
  180. package/es/LetterFilter/index.js +0 -10
  181. package/es/Notion/Notion.js +0 -76
  182. package/es/Notion/NotionImage.js +0 -46
  183. package/es/Notion/index.js +0 -9
  184. package/es/Table/Table.js +0 -141
  185. package/es/Table/index.js +0 -11
  186. package/es/TagSelector/Control.js +0 -28
  187. package/es/TagSelector/DropdownIndicator.js +0 -60
  188. package/es/TagSelector/Input.js +0 -22
  189. package/es/TagSelector/Menu.js +0 -27
  190. package/es/TagSelector/MenuList.js +0 -28
  191. package/es/TagSelector/Option.js +0 -60
  192. package/es/TagSelector/SelectContainer.js +0 -27
  193. package/es/TagSelector/ValueButton.js +0 -53
  194. package/es/TagSelector/ariaMessages.js +0 -94
  195. package/es/TagSelector/index.js +0 -10
  196. package/es/TagSelector/types.js +0 -1
  197. package/lib/DefinitionList/DefinitionDescription.d.ts +0 -10
  198. package/lib/DefinitionList/DefinitionDescription.js +0 -35
  199. package/lib/DefinitionList/DefinitionTerm.d.ts +0 -10
  200. package/lib/DefinitionList/DefinitionTerm.js +0 -35
  201. package/lib/DefinitionList/index.d.ts +0 -9
  202. package/lib/DefinitionList/index.js +0 -20
  203. package/lib/Embed/conceptComponents.d.ts +0 -40
  204. package/lib/Embed/conceptComponents.js +0 -163
  205. package/lib/ExpandableBox/ExpandableBox.d.ts +0 -15
  206. package/lib/ExpandableBox/ExpandableBox.js +0 -37
  207. package/lib/ExpandableBox/index.d.ts +0 -8
  208. package/lib/ExpandableBox/index.js +0 -18
  209. package/lib/Figure/Figure.d.ts +0 -16
  210. package/lib/Figure/Figure.js +0 -81
  211. package/lib/Figure/index.d.ts +0 -9
  212. package/lib/Figure/index.js +0 -13
  213. package/lib/FramedContent/FramedContent.d.ts +0 -12
  214. package/lib/FramedContent/FramedContent.js +0 -35
  215. package/lib/FramedContent/index.d.ts +0 -9
  216. package/lib/FramedContent/index.js +0 -16
  217. package/lib/Image/Image.d.ts +0 -38
  218. package/lib/Image/Image.js +0 -105
  219. package/lib/Image/ImageLink.d.ts +0 -18
  220. package/lib/Image/ImageLink.js +0 -44
  221. package/lib/Image/index.d.ts +0 -12
  222. package/lib/Image/index.js +0 -30
  223. package/lib/LetterFilter/LetterFilter.d.ts +0 -14
  224. package/lib/LetterFilter/LetterFilter.js +0 -61
  225. package/lib/LetterFilter/alphabet.d.ts +0 -8
  226. package/lib/LetterFilter/alphabet.js +0 -15
  227. package/lib/LetterFilter/index.d.ts +0 -9
  228. package/lib/LetterFilter/index.js +0 -16
  229. package/lib/Notion/Notion.d.ts +0 -20
  230. package/lib/Notion/Notion.js +0 -82
  231. package/lib/Notion/NotionImage.d.ts +0 -13
  232. package/lib/Notion/NotionImage.js +0 -54
  233. package/lib/Notion/index.d.ts +0 -8
  234. package/lib/Notion/index.js +0 -13
  235. package/lib/Table/Table.d.ts +0 -19
  236. package/lib/Table/Table.js +0 -145
  237. package/lib/Table/index.d.ts +0 -10
  238. package/lib/Table/index.js +0 -23
  239. package/lib/TagSelector/Control.d.ts +0 -11
  240. package/lib/TagSelector/Control.js +0 -35
  241. package/lib/TagSelector/DropdownIndicator.d.ts +0 -11
  242. package/lib/TagSelector/DropdownIndicator.js +0 -64
  243. package/lib/TagSelector/Input.d.ts +0 -12
  244. package/lib/TagSelector/Input.js +0 -29
  245. package/lib/TagSelector/Menu.d.ts +0 -12
  246. package/lib/TagSelector/Menu.js +0 -34
  247. package/lib/TagSelector/MenuList.d.ts +0 -16
  248. package/lib/TagSelector/MenuList.js +0 -35
  249. package/lib/TagSelector/Option.d.ts +0 -12
  250. package/lib/TagSelector/Option.js +0 -67
  251. package/lib/TagSelector/SelectContainer.d.ts +0 -11
  252. package/lib/TagSelector/SelectContainer.js +0 -34
  253. package/lib/TagSelector/ValueButton.d.ts +0 -20
  254. package/lib/TagSelector/ValueButton.js +0 -60
  255. package/lib/TagSelector/ariaMessages.d.ts +0 -16
  256. package/lib/TagSelector/ariaMessages.js +0 -101
  257. package/lib/TagSelector/index.d.ts +0 -11
  258. package/lib/TagSelector/index.js +0 -13
  259. package/lib/TagSelector/types.d.ts +0 -11
  260. package/lib/TagSelector/types.js +0 -5
  261. package/src/DefinitionList/DefinitionDescription.tsx +0 -26
  262. package/src/DefinitionList/DefinitionTerm.tsx +0 -26
  263. package/src/DefinitionList/index.tsx +0 -10
  264. package/src/Embed/conceptComponents.tsx +0 -293
  265. package/src/ExpandableBox/ExpandableBox.stories.tsx +0 -41
  266. package/src/ExpandableBox/ExpandableBox.tsx +0 -23
  267. package/src/ExpandableBox/index.ts +0 -9
  268. package/src/Figure/Figure.tsx +0 -167
  269. package/src/Figure/index.ts +0 -11
  270. package/src/FramedContent/FramedContent.stories.tsx +0 -152
  271. package/src/FramedContent/FramedContent.tsx +0 -26
  272. package/src/FramedContent/index.ts +0 -10
  273. package/src/Image/Image.stories.tsx +0 -61
  274. package/src/Image/Image.tsx +0 -147
  275. package/src/Image/ImageLink.tsx +0 -37
  276. package/src/Image/index.ts +0 -14
  277. package/src/LetterFilter/LetterFilter.stories.tsx +0 -29
  278. package/src/LetterFilter/LetterFilter.tsx +0 -78
  279. package/src/LetterFilter/alphabet.ts +0 -39
  280. package/src/LetterFilter/index.ts +0 -11
  281. package/src/Notion/Notion.tsx +0 -96
  282. package/src/Notion/NotionImage.tsx +0 -64
  283. package/src/Notion/index.ts +0 -9
  284. package/src/Table/Table.stories.tsx +0 -738
  285. package/src/Table/Table.tsx +0 -284
  286. package/src/Table/index.ts +0 -12
  287. package/src/TagSelector/Control.tsx +0 -34
  288. package/src/TagSelector/DropdownIndicator.tsx +0 -55
  289. package/src/TagSelector/Input.tsx +0 -31
  290. package/src/TagSelector/Menu.tsx +0 -38
  291. package/src/TagSelector/MenuList.tsx +0 -30
  292. package/src/TagSelector/Option.tsx +0 -58
  293. package/src/TagSelector/SelectContainer.tsx +0 -31
  294. package/src/TagSelector/ValueButton.tsx +0 -47
  295. package/src/TagSelector/ariaMessages.ts +0 -96
  296. package/src/TagSelector/index.ts +0 -14
  297. package/src/TagSelector/types.ts +0 -12
@@ -1,26 +0,0 @@
1
- /**
2
- * Copyright (c) 2023-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 { ComponentPropsWithRef, forwardRef } from "react";
10
- import styled from "@emotion/styled";
11
- import { colors, spacing } from "@ndla/core";
12
-
13
- const StyledFramedContent = styled.div`
14
- padding: ${spacing.mediumlarge};
15
- margin: ${spacing.large} 0;
16
- border: 1px solid ${colors.brand.tertiary};
17
- overflow: hidden;
18
- `;
19
-
20
- const FramedContent = forwardRef<HTMLDivElement, ComponentPropsWithRef<"div">>(({ children, ...rest }, ref) => (
21
- <StyledFramedContent {...rest} ref={ref}>
22
- {children}
23
- </StyledFramedContent>
24
- ));
25
-
26
- export default FramedContent;
@@ -1,10 +0,0 @@
1
- /**
2
- * Copyright (c) 2023-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 FramedContent from "./FramedContent";
10
- export default FramedContent;
@@ -1,61 +0,0 @@
1
- /**
2
- * Copyright (c) 2023-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 { Meta, StoryObj } from "@storybook/react";
10
- import Image from "./Image";
11
-
12
- export default {
13
- title: "Components/Image",
14
- tags: ["autodocs"],
15
- component: Image,
16
- parameters: {
17
- inlineStories: true,
18
- },
19
- args: {
20
- alt: "Mann med maske",
21
- src: "https://api.test.ndla.no/image-api/raw/id/604",
22
- },
23
- } as Meta<typeof Image>;
24
-
25
- export const Default: StoryObj<typeof Image> = {};
26
-
27
- export const Crop: StoryObj<typeof Image> = {
28
- args: {
29
- crop: {
30
- startX: 14.59,
31
- endX: 79.63,
32
- startY: 20,
33
- endY: 100,
34
- },
35
- },
36
- };
37
-
38
- export const FocalPoint: StoryObj<typeof Image> = {
39
- args: {
40
- focalPoint: {
41
- x: 65.08,
42
- y: 45.28,
43
- },
44
- sizes: "(min-width: 320px) 320px",
45
- },
46
- };
47
-
48
- export const LazyLoad: StoryObj<typeof Image> = {
49
- args: {
50
- alt: "Lyspære",
51
- src: "https://api.staging.ndla.no/image-api/raw/Ide.jpg",
52
- lazyLoad: true,
53
- lazyLoadSrc: `data:image/svg+xml;utf8,
54
- <svg xmlns="http://www.w3.org/2000/svg" height="400" width="100%">
55
- <rect x="0" y="0" width="100%" height="100%" style="fill:#EFF0F2;">
56
- <animate attributeType="XML" attributeName="fill" values="#EFF0F2;#E8E3E3;#EFF0F2;" dur="3s" repeatCount="indefinite"/>
57
- </rect>
58
- </svg>
59
- `,
60
- },
61
- };
@@ -1,147 +0,0 @@
1
- /**
2
- * Copyright (c) 2017-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 { ReactNode } from "react";
10
- import styled from "@emotion/styled";
11
- import { colors, misc } from "@ndla/core";
12
-
13
- export interface ImageCrop {
14
- startX: number;
15
- startY: number;
16
- endX: number;
17
- endY: number;
18
- }
19
-
20
- export interface ImageFocalPoint {
21
- x: number;
22
- y: number;
23
- }
24
-
25
- export const makeSrcQueryString = (width: number | undefined, crop?: ImageCrop, focalPoint?: ImageFocalPoint) => {
26
- const widthParams = width && `width=${width}`;
27
- const cropParams =
28
- crop && `cropStartX=${crop.startX}&cropEndX=${crop.endX}&cropStartY=${crop.startY}&cropEndY=${crop.endY}`;
29
- const focalPointParams = focalPoint && `focalX=${focalPoint.x}&focalY=${focalPoint.y}`;
30
- const params = [widthParams, cropParams, focalPointParams].filter((p) => p).join("&");
31
-
32
- return params;
33
- };
34
-
35
- const getSrcSet = (src: string, crop: ImageCrop | undefined, focalPoint: ImageFocalPoint | undefined) => {
36
- const widths = [2720, 2080, 1760, 1440, 1120, 1000, 960, 800, 640, 480, 320, 240, 180];
37
- return widths.map((width) => `${src}?${makeSrcQueryString(width, crop, focalPoint)} ${width}w`).join(", ");
38
- };
39
-
40
- const StyledImageWrapper = styled.div`
41
- overflow: hidden;
42
- position: relative;
43
-
44
- &[data-expanded="true"] {
45
- width: 100%;
46
- }
47
-
48
- picture {
49
- width: 100%;
50
- }
51
-
52
- &[data-svg="true"] {
53
- display: flex;
54
- justify-content: center;
55
- }
56
- &[data-border="true"] {
57
- border: 1px solid ${colors.brand.tertiary};
58
- border-bottom: 0;
59
- border-radius: ${misc.borderRadius};
60
- border-bottom-left-radius: 0;
61
- border-bottom-right-radius: 0;
62
- }
63
- &[data-expandable="true"] {
64
- cursor: pointer;
65
- }
66
- `;
67
-
68
- const StyledImage = styled.img`
69
- &[data-border="true"] {
70
- border-radius: 3px;
71
- border-bottom-left-radius: 0;
72
- border-bottom-right-radius: 0;
73
- }
74
- `;
75
-
76
- interface Props {
77
- alt: string;
78
- src: string;
79
- sizes?: string;
80
- fallbackWidth?: number;
81
- contentType?: string;
82
- srcSet?: string;
83
- lazyLoad?: boolean;
84
- lazyLoadSrc?: string;
85
- expandButton?: ReactNode;
86
- crop?: ImageCrop;
87
- focalPoint?: ImageFocalPoint;
88
- border?: string;
89
- lang?: string;
90
- onExpand?: () => void;
91
- expanded?: boolean;
92
- }
93
-
94
- const Image = ({
95
- alt,
96
- src,
97
- lazyLoad,
98
- lazyLoadSrc,
99
- crop,
100
- focalPoint,
101
- contentType,
102
- sizes = "(min-width: 1024px) 1024px, 100vw",
103
- expandButton,
104
- fallbackWidth = 1024,
105
- border,
106
- lang,
107
- onExpand,
108
- expanded,
109
- ...rest
110
- }: Props) => {
111
- const srcSet = rest.srcSet ?? getSrcSet(src, crop, focalPoint);
112
- const queryString = makeSrcQueryString(fallbackWidth, crop, focalPoint);
113
- const loading = lazyLoad ? "lazy" : undefined;
114
-
115
- if (contentType && contentType === "image/gif") {
116
- return (
117
- <StyledImageWrapper data-border={border} data-expanded={expanded} data-expandable={!!onExpand} onClick={onExpand}>
118
- <StyledImage alt={alt} loading={loading} src={`${src}`} {...rest} data-border={border} lang={lang} />
119
- </StyledImageWrapper>
120
- );
121
- }
122
-
123
- return (
124
- <StyledImageWrapper
125
- data-svg={contentType === "image/svg+xml"}
126
- data-border={border}
127
- data-expandable={!!onExpand}
128
- data-expanded={expanded}
129
- onClick={onExpand}
130
- >
131
- <picture>
132
- <source type={contentType} srcSet={srcSet} sizes={sizes} />
133
- <StyledImage
134
- alt={alt}
135
- loading={loading}
136
- src={`${src}?${queryString}`}
137
- {...rest}
138
- data-border={border}
139
- lang={lang}
140
- />
141
- </picture>
142
- {expandButton}
143
- </StyledImageWrapper>
144
- );
145
- };
146
-
147
- export default Image;
@@ -1,37 +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 { ReactNode } from "react";
10
- import styled from "@emotion/styled";
11
- import { ImageCrop, ImageFocalPoint } from ".";
12
- import { makeSrcQueryString } from "./Image";
13
-
14
- const StyledLink = styled.a`
15
- box-shadow: inset 0 0;
16
- `;
17
-
18
- interface Props {
19
- src: string;
20
- children: ReactNode;
21
- sizes?: string;
22
- crop?: ImageCrop;
23
- focalPoint?: ImageFocalPoint;
24
- }
25
-
26
- export function ImageLink({ src, crop, children, ...rest }: Props) {
27
- return (
28
- <StyledLink
29
- target="_blank"
30
- href={`${src}?${makeSrcQueryString(undefined, crop)}`}
31
- rel="noopener noreferrer"
32
- {...rest}
33
- >
34
- {children}
35
- </StyledLink>
36
- );
37
- }
@@ -1,14 +0,0 @@
1
- /**
2
- * Copyright (c) 2017-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 Image from "./Image";
10
- export { makeSrcQueryString } from "./Image";
11
- export { ImageLink } from "./ImageLink";
12
- export type { ImageCrop, ImageFocalPoint } from "./Image";
13
-
14
- export default Image;
@@ -1,29 +0,0 @@
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 { useArgs } from "@storybook/preview-api";
10
- import { Meta, StoryFn } from "@storybook/react";
11
- import LetterFilter from "./LetterFilter";
12
-
13
- export default {
14
- title: "Components/LetterFilter",
15
- component: LetterFilter,
16
- tags: ["autodocs"],
17
- args: {
18
- enabledLetters: ["a", "c"],
19
- onChange: (value?: string) => {},
20
- },
21
- } as Meta<typeof LetterFilter>;
22
-
23
- export const LetterFilterStory: StoryFn<typeof LetterFilter> = (args) => {
24
- const [, updateArgs] = useArgs();
25
-
26
- return <LetterFilter {...args} onChange={(val) => updateArgs({ value: val })} />;
27
- };
28
-
29
- LetterFilterStory.storyName = "LetterFilter";
@@ -1,78 +0,0 @@
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 { useMemo } from "react";
10
- import { useTranslation } from "react-i18next";
11
- import styled from "@emotion/styled";
12
- import { IconButtonV2 as IconButton } from "@ndla/button";
13
- import { colors, fonts, spacing } from "@ndla/core";
14
- import { alphabet } from "./alphabet";
15
-
16
- const StyledUL = styled.ul`
17
- list-style: none;
18
- display: flex;
19
- flex-direction: row;
20
- flex-wrap: wrap;
21
- gap: ${spacing.xsmall};
22
- `;
23
-
24
- const StyledButton = styled(IconButton)`
25
- display: flex;
26
- align-items: center;
27
- justify-content: center;
28
- width: ${spacing.normal};
29
- height: ${spacing.normal};
30
- padding: 0;
31
- ${fonts.sizes(18)};
32
- && {
33
- font-weight: ${fonts.weight.semibold};
34
- }
35
-
36
- :disabled {
37
- pointer-events: none;
38
- color: ${colors.brand.light};
39
- }
40
- `;
41
-
42
- interface Props {
43
- value?: string | undefined;
44
- onChange: (value?: string) => void;
45
- enabledLetters: string[];
46
- }
47
-
48
- const LetterFilter = ({ value, onChange, enabledLetters }: Props) => {
49
- const { t } = useTranslation();
50
- const uppercaseLetters = useMemo(() => enabledLetters.map((letter) => letter.toUpperCase()), [enabledLetters]);
51
-
52
- return (
53
- <StyledUL>
54
- {alphabet.map((letter) => {
55
- const disabled = !uppercaseLetters.includes(letter.toUpperCase());
56
- const selected = letter.toUpperCase() === value?.toUpperCase();
57
- return (
58
- <li key={letter}>
59
- <StyledButton
60
- onClick={() => (selected ? onChange(undefined) : onChange(letter))}
61
- aria-label={t("listview.filters.alphabet.letterFilter", {
62
- letter,
63
- })}
64
- variant={!selected ? "ghost" : undefined}
65
- colorTheme={!selected ? "lighter" : "primary"}
66
- disabled={disabled}
67
- size="xsmall"
68
- >
69
- {letter}
70
- </StyledButton>
71
- </li>
72
- );
73
- })}
74
- </StyledUL>
75
- );
76
- };
77
-
78
- export default LetterFilter;
@@ -1,39 +0,0 @@
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
- export const alphabet = [
10
- "A",
11
- "B",
12
- "C",
13
- "D",
14
- "E",
15
- "F",
16
- "G",
17
- "H",
18
- "I",
19
- "J",
20
- "K",
21
- "L",
22
- "M",
23
- "N",
24
- "O",
25
- "P",
26
- "Q",
27
- "R",
28
- "S",
29
- "T",
30
- "U",
31
- "V",
32
- "W",
33
- "X",
34
- "Y",
35
- "Z",
36
- "Æ",
37
- "Ø",
38
- "Å",
39
- ];
@@ -1,11 +0,0 @@
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 LetterFilter from "./LetterFilter";
10
-
11
- export default LetterFilter;
@@ -1,96 +0,0 @@
1
- /**
2
- * Copyright (c) 2021-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 { Fragment, ReactNode } from "react";
9
- import { useTranslation } from "react-i18next";
10
- import styled from "@emotion/styled";
11
- import { breakpoints, fonts, mq, spacing } from "@ndla/core";
12
-
13
- const ContentWrapper = styled.div`
14
- ${mq.range({ until: breakpoints.tabletWide })} {
15
- display: flex;
16
- flex-direction: column-reverse;
17
- }
18
- figure {
19
- margin: 0;
20
- }
21
- `;
22
- const TextWrapper = styled.div<{ hasVisualElement: boolean }>`
23
- width: ${(props) => (props.hasVisualElement ? "75%" : "100%")};
24
-
25
- ${mq.range({ until: breakpoints.tabletWide })} {
26
- width: 100%;
27
- }
28
- font-family: ${fonts.sans};
29
- ${fonts.sizes("18px", "28px")};
30
- ${mq.range({ from: breakpoints.desktop })} {
31
- ul,
32
- ol {
33
- margin: ${spacing.small} 0;
34
- padding: 0 1rem 0 2rem;
35
- }
36
- ol > li {
37
- margin-left: ${spacing.normal};
38
- }
39
- }
40
- `;
41
-
42
- const ClearWrapper = styled.div`
43
- clear: both;
44
- `;
45
-
46
- const LabelsContainer = styled.div`
47
- display: flex;
48
- align-items: center;
49
- ${fonts.sizes("14px", "24px")};
50
- font-family: ${fonts.sans};
51
- margin: ${spacing.small} 0;
52
- `;
53
-
54
- export type NotionProps = {
55
- id: string | number;
56
- labels?: string[];
57
- text: ReactNode;
58
- title: string;
59
- visualElement: ReactNode;
60
- imageElement?: ReactNode;
61
- children?: ReactNode;
62
- lang?: string;
63
- };
64
-
65
- const Notion = ({ id, labels = [], text, title, visualElement, imageElement, children, lang }: NotionProps) => {
66
- const { t } = useTranslation();
67
-
68
- return (
69
- <div>
70
- <ContentWrapper>
71
- {imageElement}
72
- {visualElement}
73
- <TextWrapper hasVisualElement={!!(imageElement || visualElement)} lang={lang}>
74
- <b>{title.trim()}</b>
75
- {text}
76
- {!!labels.length && (
77
- <LabelsContainer>
78
- {t("searchPage.resultType.notionLabels")}
79
- {labels.map((label, i) => (
80
- <Fragment key={`notion-${id}-label-${i + 1}`}>
81
- {" "}
82
- {label}
83
- {i < labels?.length - 1 && <> &#8226;</>}
84
- </Fragment>
85
- ))}
86
- </LabelsContainer>
87
- )}
88
- </TextWrapper>
89
- <ClearWrapper />
90
- </ContentWrapper>
91
- {children}
92
- </div>
93
- );
94
- };
95
-
96
- export default Notion;
@@ -1,64 +0,0 @@
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
- /** @jsxImportSource @emotion/react */
10
- import styled from "@emotion/styled";
11
- import { animations, breakpoints, colors, mq, spacing } from "@ndla/core";
12
- import { Image } from "@ndla/primitives";
13
- import { Figure } from "../Figure";
14
-
15
- const StyledImageWrapper = styled.div`
16
- overflow: hidden;
17
- width: 260px;
18
- padding-top: ${spacing.small};
19
- ${mq.range({ until: breakpoints.tabletWide })} {
20
- margin: 0 auto;
21
- }
22
- &:hover {
23
- img {
24
- transform: scale(1.1);
25
- opacity: 1.1;
26
- transition-duration: 0.5s;
27
- }
28
- }
29
- `;
30
-
31
- const StyledImage = styled(Image)`
32
- object-fit: cover;
33
- max-height: 162px;
34
- transition: transform ${animations.durations.fast};
35
- ${mq.range({ until: breakpoints.tabletWide })} {
36
- min-width: 260px;
37
- }
38
- `;
39
-
40
- interface Props {
41
- src: string;
42
- alt: string;
43
- }
44
-
45
- const StyledFigure = styled(Figure)`
46
- &:hover {
47
- [data-open-button] {
48
- background: ${colors.white};
49
- svg {
50
- transform: scale(1.2);
51
- }
52
- }
53
- }
54
- `;
55
-
56
- export const NotionImage = ({ src, alt }: Props) => {
57
- return (
58
- <StyledFigure type={"full-column"}>
59
- <StyledImageWrapper>
60
- <StyledImage alt={alt} src={src} />
61
- </StyledImageWrapper>
62
- </StyledFigure>
63
- );
64
- };
@@ -1,9 +0,0 @@
1
- /**
2
- * Copyright (c) 2021-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
- export { default as Notion } from "./Notion";