@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,293 +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
- /** @jsxImportSource @emotion/react */
10
- import { forwardRef, ReactNode, RefAttributes } from "react";
11
- import { useTranslation } from "react-i18next";
12
- import { css } from "@emotion/react";
13
- import styled from "@emotion/styled";
14
- import { breakpoints, colors, fonts, misc, mq, spacing, stackOrder } from "@ndla/core";
15
- import { ConceptData, ConceptVisualElementMeta } from "@ndla/types-embed";
16
- import { ExternalEmbed, IframeEmbed } from ".";
17
- import BrightcoveEmbed from "./BrightcoveEmbed";
18
- import H5pEmbed from "./H5pEmbed";
19
- import ImageEmbed from "./ImageEmbed";
20
- import { Gloss } from "../Gloss";
21
- import { LicenseContainerContent } from "../LicenseByline/EmbedByline";
22
- import { Copyright } from "../types";
23
-
24
- export type ConceptType = "concept" | "gloss";
25
-
26
- export interface ConceptNotionData {
27
- title: ConceptData["concept"]["title"];
28
- content?: ReactNode;
29
- metaImage?: {
30
- url?: string;
31
- alt?: string;
32
- };
33
- copyright?: Copyright;
34
- source?: string;
35
- visualElement?: ConceptVisualElementMeta;
36
- conceptType: ConceptData["concept"]["conceptType"];
37
- glossData?: ConceptData["concept"]["glossData"];
38
- lang?: string;
39
- }
40
-
41
- interface ConceptNotionProps extends RefAttributes<HTMLDivElement>, Omit<ConceptNotionData, "metaImage"> {
42
- className?: string;
43
- closeButton?: ReactNode;
44
- previewAlt?: boolean;
45
- inPopover?: boolean;
46
- tags?: string[];
47
- subjects?: string[];
48
- headerButtons?: ReactNode;
49
- exampleIds?: string;
50
- exampleLangs?: string;
51
- showTitle?: boolean;
52
- }
53
-
54
- const NotionDialogText = styled.div`
55
- font-weight: ${fonts.weight.normal};
56
- ${fonts.sizes("18px", 1.3)};
57
- color: ${colors.text.primary};
58
- font-family: ${fonts.sans};
59
- `;
60
-
61
- const NotionDialogContent = styled.div`
62
- padding-bottom: ${spacing.normal};
63
- display: flex;
64
- flex-direction: column;
65
- `;
66
-
67
- const ContentSpacing = styled.div`
68
- padding: ${spacing.normal};
69
- &[data-is-concept="false"] {
70
- margin-bottom: ${spacing.normal};
71
- }
72
- `;
73
-
74
- const notionContentCss = css`
75
- @keyframes animateIn {
76
- 0% {
77
- opacity: 0;
78
- transform: translate3d(0, -13px, 0);
79
- }
80
- 100% {
81
- opacity: 1;
82
- transform: translate3d(0, 0, 0);
83
- }
84
- }
85
-
86
- animation-name: animateIn;
87
- animation-duration: 300ms;
88
- background-color: white;
89
- z-index: ${stackOrder.offsetSingle};
90
- box-shadow: 0 0 30px rgba(0, 0, 0, 0.2);
91
- ${mq.range({ from: breakpoints.tablet })} {
92
- width: 500px;
93
- }
94
- ${mq.range({ from: breakpoints.desktop })} {
95
- width: 720px;
96
- max-width: 60vw;
97
- }
98
-
99
- ${mq.range({ until: breakpoints.tablet })} {
100
- padding: ${spacing.small};
101
- z-index: ${stackOrder.popover};
102
- height: 100%;
103
- width: 100%;
104
- overflow: auto;
105
- }
106
- `;
107
-
108
- const NotionHeader = styled.div`
109
- display: flex;
110
- align-items: center;
111
- justify-content: flex-end;
112
- border-bottom: 2px solid ${colors.brand.tertiary};
113
- padding-bottom: ${spacing.small};
114
- h1 {
115
- display: flex;
116
- align-items: center;
117
- flex-wrap: wrap;
118
- flex-grow: 1;
119
- margin: 0;
120
- font-weight: ${fonts.weight.bold};
121
- ${fonts.sizes("22px", 1.2)};
122
- }
123
- small {
124
- display: flex;
125
- ${fonts.sizes("20px", 1.2)};
126
- font-weight: ${fonts.weight.normal};
127
- }
128
- ${mq.range({ from: breakpoints.mobileWide })} {
129
- &[data-is-concept="true"] {
130
- small:before {
131
- display: inline-flex;
132
- align-self: center;
133
- margin: 0 ${spacing.xsmall};
134
- content: "";
135
- height: ${spacing.normal};
136
- width: 1px;
137
- background-color: ${colors.brand.greyLight};
138
- }
139
- }
140
- }
141
- &[data-is-concept="false"] {
142
- margin-bottom: ${spacing.large};
143
- }
144
- `;
145
-
146
- const ListWrapper = styled.div`
147
- display: flex;
148
- gap: ${spacing.small};
149
- align-items: center;
150
- `;
151
-
152
- const StyledNotionDialogContent = styled(NotionDialogContent)`
153
- padding-top: ${spacing.small};
154
- figure {
155
- width: 100% !important;
156
- padding: 0;
157
- margin: 0;
158
- padding-bottom: ${spacing.normal};
159
- }
160
- `;
161
-
162
- const ButtonWrapper = styled.div`
163
- display: flex;
164
- gap: ${spacing.xsmall};
165
- align-items: center;
166
- `;
167
-
168
- const StyledList = styled.ul`
169
- display: flex;
170
- gap: ${spacing.small};
171
- align-items: center;
172
- list-style: none;
173
- > li {
174
- font-family: ${fonts.sans};
175
- font-weight: ${fonts.weight.semibold};
176
- border-radius: ${misc.borderRadius};
177
- background-color: ${colors.brand.greyLightest};
178
- ${fonts.sizes("12px", 1.2)};
179
- padding: ${spacing.xxsmall};
180
- }
181
- `;
182
- const BylineWrapper = styled.div`
183
- padding: 0 ${spacing.normal} ${spacing.small} ${spacing.normal};
184
- span {
185
- font-family: ${fonts.sans};
186
- ${fonts.sizes("16px", "26px")};
187
- }
188
- `;
189
-
190
- export const ConceptNotionV2 = forwardRef<HTMLDivElement, ConceptNotionProps>(
191
- (
192
- {
193
- visualElement,
194
- title,
195
- content,
196
- source,
197
- copyright,
198
- closeButton,
199
- inPopover,
200
- previewAlt,
201
- tags,
202
- subjects,
203
- conceptType,
204
- glossData,
205
- headerButtons,
206
- lang,
207
- exampleIds,
208
- exampleLangs,
209
- showTitle = true,
210
- ...rest
211
- },
212
- ref,
213
- ) => {
214
- const { t } = useTranslation();
215
- const isConcept = conceptType === "concept";
216
- return (
217
- <div css={inPopover ? notionContentCss : undefined} {...rest} ref={ref}>
218
- <ContentSpacing data-is-concept={isConcept}>
219
- <NotionHeader data-is-concept={isConcept}>
220
- {showTitle && (
221
- <h1>
222
- {isConcept && title.title}
223
- {<small data-is-concept={isConcept}>{t(`searchPage.resultType.${conceptType}`)}</small>}
224
- </h1>
225
- )}
226
- <ButtonWrapper>
227
- {headerButtons}
228
- {closeButton}
229
- </ButtonWrapper>
230
- </NotionHeader>
231
- {isConcept ? (
232
- <>
233
- <StyledNotionDialogContent>
234
- {visualElement?.resource === "image" ? (
235
- <ImageEmbed embed={visualElement} lang={lang} />
236
- ) : visualElement?.resource === "brightcove" ? (
237
- <BrightcoveEmbed embed={visualElement} />
238
- ) : visualElement?.resource === "h5p" ? (
239
- <H5pEmbed embed={visualElement} />
240
- ) : visualElement?.resource === "iframe" ? (
241
- <IframeEmbed embed={visualElement} />
242
- ) : visualElement?.resource === "external" ? (
243
- <ExternalEmbed embed={visualElement} />
244
- ) : null}
245
- {content && <NotionDialogText lang={lang}>{content}</NotionDialogText>}
246
- </StyledNotionDialogContent>
247
- {tags && (
248
- <ListWrapper>
249
- {`${t("notions.tags")}:`}
250
- <StyledList>
251
- {tags.map((tag, index) => (
252
- <li key={index}>{tag}</li>
253
- ))}
254
- </StyledList>
255
- </ListWrapper>
256
- )}
257
- {subjects && (
258
- <ListWrapper>
259
- {`${t("notions.usedIn")}:`}
260
- <StyledList>
261
- {subjects.map((subject, index) => (
262
- <li key={index}>{subject}</li>
263
- ))}
264
- </StyledList>
265
- </ListWrapper>
266
- )}
267
- </>
268
- ) : (
269
- <Gloss
270
- title={title}
271
- glossData={glossData!}
272
- audio={
273
- visualElement?.status === "success" && visualElement.resource === "audio"
274
- ? {
275
- src: visualElement.data.audioFile.url,
276
- title: visualElement.data.title.title,
277
- }
278
- : undefined
279
- }
280
- exampleIds={exampleIds}
281
- exampleLangs={exampleLangs}
282
- />
283
- )}
284
- </ContentSpacing>
285
- {copyright && (
286
- <BylineWrapper>
287
- <LicenseContainerContent copyright={copyright} type={conceptType as ConceptType} />
288
- </BylineWrapper>
289
- )}
290
- </div>
291
- );
292
- },
293
- );
@@ -1,41 +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, StoryFn, StoryObj } from "@storybook/react";
10
- import { ExpandableBox, ExpandableBoxSummary } from "./ExpandableBox";
11
-
12
- /**
13
- * This is just a thin wrapper around the native HTML details element.
14
- * `ExpandableBoxSummary` is a thin wrapper around the native HTML summary element.
15
- * The components will eventually add style and functionality to the native elements, as opposed to the components being styled by global css.
16
- */
17
- export default {
18
- title: "Components/ExpandableBox",
19
- tags: ["autodocs"],
20
- parameters: {
21
- inlineStories: true,
22
- },
23
- component: ExpandableBox,
24
- render: (args) => (
25
- <ExpandableBox {...args}>
26
- <ExpandableBoxSummary>Open me</ExpandableBoxSummary>
27
- Everything here is only visible when the box is open
28
- </ExpandableBox>
29
- ),
30
- } as Meta<typeof ExpandableBox>;
31
-
32
- export const Default: StoryObj<typeof ExpandableBox> = {};
33
-
34
- export const WithHeader: StoryFn<typeof ExpandableBox> = ({ ...args }) => (
35
- <ExpandableBox {...args}>
36
- <ExpandableBoxSummary>
37
- <h2>Open me as header text</h2>
38
- </ExpandableBoxSummary>
39
- Everything here is only visible when the box is open
40
- </ExpandableBox>
41
- );
@@ -1,23 +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 { HTMLAttributes } from "react";
10
- import styled from "@emotion/styled";
11
- import { fonts } from "@ndla/core";
12
-
13
- interface Props extends HTMLAttributes<HTMLDetailsElement> {}
14
-
15
- export const ExpandableBox = ({ children, ...rest }: Props) => {
16
- return <details {...rest}>{children}</details>;
17
- };
18
-
19
- interface SummaryProps extends HTMLAttributes<HTMLElement> {}
20
-
21
- export const ExpandableBoxSummary = ({ children, ...rest }: SummaryProps) => {
22
- return <summary {...rest}>{children}</summary>;
23
- };
@@ -1,9 +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
- export { ExpandableBox, ExpandableBoxSummary } from "./ExpandableBox";
@@ -1,167 +0,0 @@
1
- /**
2
- * Copyright (c) 2016-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
- // N.B These components is used to render static markup serverside
10
-
11
- /** @jsxImportSource @emotion/react */
12
- import { ComponentPropsWithRef, forwardRef, useMemo } from "react";
13
- import { SerializedStyles, css } from "@emotion/react";
14
- import styled from "@emotion/styled";
15
- import { breakpoints, mq, spacing } from "@ndla/core";
16
-
17
- const StyledFigure = styled.figure`
18
- position: relative;
19
- width: 100%;
20
- transition:
21
- transform 0.4s,
22
- width 0.4s,
23
- height 0.4s;
24
- img {
25
- width: 100%;
26
- }
27
- iframe {
28
- display: block;
29
- border: 0;
30
- }
31
- &[data-sizetype="full"][data-float=""] {
32
- margin: ${spacing.normal} 0 ${spacing.normal};
33
- }
34
- &[data-sizetype="full"] {
35
- margin-bottom: ${spacing.normal};
36
- }
37
- `;
38
-
39
- const floatSizes: Record<FigureType, SerializedStyles> = {
40
- left: css`
41
- margin-top: ${spacing.xsmall};
42
- --float: left;
43
- --width: 50%;
44
- --width-desktop: 65%;
45
- & {
46
- ${mq.range({ from: breakpoints.tablet })} {
47
- padding-right: ${spacing.small};
48
- }
49
- }
50
- `,
51
- right: css`
52
- margin-top: ${spacing.xsmall};
53
- --float: right;
54
- --width: 50%;
55
- --width-desktop: 65%;
56
- & {
57
- ${mq.range({ from: breakpoints.tablet })} {
58
- padding-left: ${spacing.small};
59
- }
60
- }
61
- `,
62
- "small-left": css`
63
- margin-top: ${spacing.xsmall};
64
- --float: left;
65
- --width: 25%;
66
- --width-desktop: 50%;
67
- & {
68
- ${mq.range({ from: breakpoints.tablet })} {
69
- padding-right: ${spacing.small};
70
- }
71
- }
72
- `,
73
- "small-right": css`
74
- margin-top: ${spacing.xsmall};
75
- --float: right;
76
- --width: 25%;
77
- --width-desktop: 50%;
78
- & {
79
- ${mq.range({ from: breakpoints.tablet })} {
80
- padding-left: ${spacing.small};
81
- }
82
- }
83
- `,
84
- "xsmall-left": css`
85
- --float: left;
86
- --width: 25%;
87
- & {
88
- ${mq.range({ from: breakpoints.tablet })} {
89
- padding-right: ${spacing.small};
90
- margin: ${spacing.xsmall} 0 ${spacing.medium};
91
- }
92
- }
93
- `,
94
- "xsmall-right": css`
95
- --float: right;
96
- --width: 25%;
97
- & {
98
- ${mq.range({ from: breakpoints.tablet })} {
99
- padding-left: ${spacing.small};
100
- margin: ${spacing.xsmall} 0 ${spacing.normal} ${spacing.xsmall};
101
- }
102
- }
103
- `,
104
- full: css`
105
- margin-top: ${spacing.xsmall};
106
- `,
107
- "full-column": css`
108
- left: auto !important;
109
- right: auto !important;
110
- width: auto !important;
111
- padding-left: 0;
112
- padding-right: 0;
113
- padding-bottom: ${spacing.large};
114
- margin-bottom: 0;
115
- `,
116
- };
117
-
118
- const floatStyle = css`
119
- ${mq.range({ from: breakpoints.tablet })} {
120
- float: var(--float);
121
- clear: var(--float);
122
- width: var(--width) !important;
123
- z-index: 1;
124
- left: auto !important;
125
- padding: 0;
126
- }
127
- ${mq.range({ from: breakpoints.desktop })} {
128
- width: var(--width-desktop, var(--width)) !important;
129
- }
130
- `;
131
-
132
- const Figure = forwardRef<HTMLElement, Props>(({ children, type = "full", ...rest }, ref) => {
133
- const styles = useMemo(() => {
134
- const styles = [];
135
- const floatCss = floatSizes[type];
136
- if (type !== "full-column" && type !== "full") {
137
- styles.push(floatStyle);
138
- }
139
- if (floatCss) {
140
- styles.push(floatCss);
141
- }
142
- return styles;
143
- }, [type]);
144
-
145
- return (
146
- <StyledFigure data-sizetype={type} css={styles} {...rest} ref={ref}>
147
- {children}
148
- </StyledFigure>
149
- );
150
- });
151
-
152
- export type FigureType =
153
- | "full"
154
- | "full-column"
155
- | "left"
156
- | "small-left"
157
- | "right"
158
- | "small-right"
159
- | "xsmall-right"
160
- | "xsmall-left";
161
-
162
- interface Props extends Omit<ComponentPropsWithRef<"figure">, "type"> {
163
- type?: FigureType;
164
- noFigcaption?: boolean;
165
- }
166
-
167
- export default Figure;
@@ -1,11 +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
- export { default as Figure } from "./Figure";
10
-
11
- export type { FigureType } from "./Figure";
@@ -1,152 +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 { CopyrightMetaData } from "@ndla/types-embed";
11
- import FramedContent from "./FramedContent";
12
- import FigureImage from "../../../../stories/article/FigureImage";
13
- import { CopyrightEmbed } from "../Embed";
14
-
15
- export default {
16
- title: "Components/FramedContent",
17
- component: FramedContent,
18
- tags: ["autodocs"],
19
- parameters: {
20
- inlineStories: true,
21
- },
22
- args: {
23
- children: <p>Content!</p>,
24
- },
25
- } as Meta<typeof FramedContent>;
26
-
27
- export const WithFloating: StoryObj<typeof FramedContent> = {
28
- args: {
29
- children: (
30
- <>
31
- <p>En boks med flytelementer</p>
32
- <FigureImage embedData={{ alt: "", align: "right" }} />
33
- <p>
34
- Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen
35
- du planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
36
- </p>
37
- <p>
38
- Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen
39
- du planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
40
- </p>
41
- </>
42
- ),
43
- },
44
- };
45
-
46
- export const WithFloatingSmall: StoryObj<typeof FramedContent> = {
47
- args: {
48
- children: (
49
- <>
50
- <p>En boks med flytelementer</p>
51
- <FigureImage embedData={{ alt: "", align: "right", size: "small" }} />
52
- <p>
53
- Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen
54
- du planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
55
- </p>
56
- <p>
57
- Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen
58
- du planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
59
- </p>
60
- </>
61
- ),
62
- },
63
- };
64
-
65
- export const TooMuchContent: StoryObj<typeof FramedContent> = {
66
- args: {
67
- children: (
68
- <>
69
- <h2>
70
- Tekst i ramme fungerer <em>dårlig</em> med mye tekst.
71
- </h2>
72
- <p>
73
- Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen
74
- du planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
75
- </p>
76
- <p>
77
- Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen
78
- du planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
79
- </p>
80
- <p>
81
- Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen
82
- du planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
83
- </p>
84
- <p>
85
- Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen
86
- du planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
87
- </p>
88
- <p>
89
- Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen
90
- du planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
91
- </p>
92
- <p>
93
- Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen
94
- du planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
95
- </p>
96
- <p>
97
- Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen
98
- du planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
99
- </p>
100
- <p>
101
- Pitching er også en god måte å bevisstgjøre seg selv på. Når du pitcher, blir idéen og historien i den filmen
102
- du planlegger å lage, tydeligere for både deg selv og dem du eventuelt jobber sammen med i klassen.
103
- </p>
104
- </>
105
- ),
106
- },
107
- };
108
-
109
- const copyrightEmbed: CopyrightMetaData = {
110
- resource: "copyright",
111
- status: "success",
112
- data: undefined,
113
- embedData: {
114
- resource: "copyright",
115
- title: "Hallo",
116
- copyright: {
117
- license: {
118
- license: "CC-BY-SA-4.0",
119
- description: "Creative Commons Attribution-ShareAlike 4.0 International",
120
- url: "https://creativecommons.org/licenses/by-sa/4.0/",
121
- },
122
- creators: [
123
- {
124
- type: "originator",
125
- name: "Camilla Øvstebø ",
126
- },
127
- ],
128
- processors: [
129
- {
130
- type: "linguistic",
131
- name: "Totaltekst",
132
- },
133
- ],
134
- rightsholders: [],
135
- processed: false,
136
- },
137
- },
138
- };
139
-
140
- export const WithCopyrightEmbed: StoryObj<typeof FramedContent> = {
141
- args: {
142
- children: (
143
- <>
144
- <h2>Her har du helt vanlig innhold</h2>
145
- <p>Det kan som sagt være hva som helst.</p>
146
- <CopyrightEmbed embed={copyrightEmbed}>
147
- <p>Dette er innhold som er i en copyright-embed.</p>
148
- </CopyrightEmbed>
149
- </>
150
- ),
151
- },
152
- };