@ndla/ui 55.0.13-alpha.0 → 55.0.15-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 (337) hide show
  1. package/dist/panda.buildinfo.json +142 -1
  2. package/dist/styles.css +597 -0
  3. package/es/Article/ArticleByline.js +7 -7
  4. package/es/Article/ArticleParagraph.js +11 -13
  5. package/es/AudioPlayer/AudioPlayer.js +1 -0
  6. package/es/CampaignBlock/CampaignBlock.js +103 -68
  7. package/es/Concept/Concept.js +69 -0
  8. package/es/ContactBlock/ContactBlock.js +17 -17
  9. package/es/ContentTypeBadge/ContentTypeBadgeNew.js +48 -0
  10. package/es/Embed/AudioEmbed.js +1 -2
  11. package/es/Embed/BrightcoveEmbed.js +13 -25
  12. package/es/Embed/ConceptEmbed.js +57 -301
  13. package/es/Embed/ConceptListEmbed.js +18 -24
  14. package/es/Embed/ContentLinkEmbed.js +10 -10
  15. package/es/Embed/CopyrightEmbed.js +3 -21
  16. package/es/Embed/ExternalEmbed.js +10 -18
  17. package/es/Embed/FootnoteEmbed.js +11 -8
  18. package/es/Embed/GlossEmbed.js +68 -0
  19. package/es/Embed/H5pEmbed.js +19 -19
  20. package/es/Embed/IframeEmbed.js +9 -6
  21. package/es/Embed/InlineTriggerButton.js +70 -0
  22. package/es/Embed/UnknownEmbed.js +9 -9
  23. package/es/Embed/UuDisclaimerEmbed.js +14 -25
  24. package/es/Embed/index.js +1 -3
  25. package/es/ErrorMessage/ErrorMessage.js +41 -22
  26. package/es/ErrorMessage/ErrorResourceAccessDenied.js +8 -6
  27. package/es/FactBox/FactBox.js +118 -47
  28. package/es/FileList/PdfFile.js +23 -5
  29. package/es/Gloss/Gloss.js +116 -86
  30. package/es/Gloss/GlossExample.js +49 -51
  31. package/es/LicenseByline/EmbedByline.js +143 -33
  32. package/es/LicenseByline/LicenseLink.js +16 -9
  33. package/es/LicenseByline/index.js +2 -2
  34. package/es/LinkBlock/LinkBlock.js +61 -33
  35. package/es/LinkBlock/LinkBlockSection.js +9 -6
  36. package/es/Logo/Logo.js +1 -30
  37. package/es/RelatedArticleList/RelatedArticleList.js +70 -87
  38. package/es/ResourceBox/ResourceBox.js +65 -37
  39. package/es/TagSelector/TagSelector.js +124 -131
  40. package/es/i18n/index.js +2 -1
  41. package/es/i18n/useComponentTranslations.js +83 -0
  42. package/es/index.js +4 -12
  43. package/es/locale/messages-en.js +30 -4
  44. package/es/locale/messages-nb.js +30 -4
  45. package/es/locale/messages-nn.js +30 -4
  46. package/es/locale/messages-se.js +30 -4
  47. package/es/locale/messages-sma.js +30 -4
  48. package/es/model/ContentType.js +3 -0
  49. package/es/styles.css +597 -0
  50. package/lib/Article/ArticleByline.js +8 -8
  51. package/lib/Article/ArticleParagraph.js +12 -14
  52. package/lib/AudioPlayer/AudioPlayer.js +1 -0
  53. package/lib/CampaignBlock/CampaignBlock.d.ts +2 -2
  54. package/lib/CampaignBlock/CampaignBlock.js +106 -68
  55. package/lib/Concept/Concept.d.ts +18 -0
  56. package/lib/Concept/Concept.js +75 -0
  57. package/lib/ContactBlock/ContactBlock.js +18 -18
  58. package/lib/ContentTypeBadge/ContentTypeBadgeNew.d.ts +17 -0
  59. package/lib/ContentTypeBadge/ContentTypeBadgeNew.js +56 -0
  60. package/lib/Embed/AudioEmbed.js +2 -3
  61. package/lib/Embed/BrightcoveEmbed.d.ts +1 -2
  62. package/lib/Embed/BrightcoveEmbed.js +16 -26
  63. package/lib/Embed/ConceptEmbed.d.ts +15 -21
  64. package/lib/Embed/ConceptEmbed.js +58 -301
  65. package/lib/Embed/ConceptListEmbed.js +21 -26
  66. package/lib/Embed/ContentLinkEmbed.js +10 -11
  67. package/lib/Embed/CopyrightEmbed.js +5 -22
  68. package/lib/Embed/ExternalEmbed.d.ts +1 -2
  69. package/lib/Embed/ExternalEmbed.js +13 -19
  70. package/lib/Embed/FootnoteEmbed.js +11 -9
  71. package/lib/Embed/GlossEmbed.d.ts +13 -0
  72. package/lib/Embed/GlossEmbed.js +76 -0
  73. package/lib/Embed/H5pEmbed.d.ts +1 -2
  74. package/lib/Embed/H5pEmbed.js +21 -19
  75. package/lib/Embed/IframeEmbed.d.ts +1 -2
  76. package/lib/Embed/IframeEmbed.js +11 -8
  77. package/lib/Embed/InlineTriggerButton.d.ts +11 -0
  78. package/lib/Embed/InlineTriggerButton.js +76 -0
  79. package/lib/Embed/UnknownEmbed.js +9 -10
  80. package/lib/Embed/UuDisclaimerEmbed.js +16 -26
  81. package/lib/Embed/index.d.ts +2 -3
  82. package/lib/Embed/index.js +2 -9
  83. package/lib/ErrorMessage/ErrorMessage.js +40 -23
  84. package/lib/ErrorMessage/ErrorResourceAccessDenied.js +7 -6
  85. package/lib/FactBox/FactBox.d.ts +0 -1
  86. package/lib/FactBox/FactBox.js +119 -46
  87. package/lib/FileList/PdfFile.js +23 -5
  88. package/lib/Gloss/Gloss.d.ts +10 -2
  89. package/lib/Gloss/Gloss.js +116 -85
  90. package/lib/Gloss/GlossExample.d.ts +3 -5
  91. package/lib/Gloss/GlossExample.js +49 -52
  92. package/lib/LicenseByline/EmbedByline.d.ts +2 -4
  93. package/lib/LicenseByline/EmbedByline.js +145 -35
  94. package/lib/LicenseByline/LicenseLink.d.ts +2 -2
  95. package/lib/LicenseByline/LicenseLink.js +16 -9
  96. package/lib/LicenseByline/index.d.ts +2 -2
  97. package/lib/LicenseByline/index.js +4 -5
  98. package/lib/LinkBlock/LinkBlock.js +62 -34
  99. package/lib/LinkBlock/LinkBlockSection.js +9 -7
  100. package/lib/Logo/Logo.d.ts +1 -3
  101. package/lib/Logo/Logo.js +2 -30
  102. package/lib/RelatedArticleList/RelatedArticleList.d.ts +4 -4
  103. package/lib/RelatedArticleList/RelatedArticleList.js +74 -90
  104. package/lib/ResourceBox/ResourceBox.js +64 -37
  105. package/lib/TagSelector/TagSelector.d.ts +27 -12
  106. package/lib/TagSelector/TagSelector.js +126 -131
  107. package/lib/i18n/index.d.ts +1 -0
  108. package/lib/i18n/index.js +20 -1
  109. package/lib/i18n/useComponentTranslations.d.ts +14 -0
  110. package/lib/i18n/useComponentTranslations.js +93 -0
  111. package/lib/index.d.ts +5 -15
  112. package/lib/index.js +70 -102
  113. package/lib/locale/messages-en.d.ts +26 -0
  114. package/lib/locale/messages-en.js +30 -4
  115. package/lib/locale/messages-nb.d.ts +26 -0
  116. package/lib/locale/messages-nb.js +30 -4
  117. package/lib/locale/messages-nn.d.ts +26 -0
  118. package/lib/locale/messages-nn.js +30 -4
  119. package/lib/locale/messages-se.d.ts +26 -0
  120. package/lib/locale/messages-se.js +30 -4
  121. package/lib/locale/messages-sma.d.ts +26 -0
  122. package/lib/locale/messages-sma.js +30 -4
  123. package/lib/model/ContentType.d.ts +3 -0
  124. package/lib/model/ContentType.js +4 -1
  125. package/lib/styles.css +597 -0
  126. package/package.json +11 -13
  127. package/src/Article/ArticleByline.tsx +1 -1
  128. package/src/Article/ArticleParagraph.tsx +11 -9
  129. package/src/AudioPlayer/AudioPlayer.tsx +1 -0
  130. package/src/CampaignBlock/CampaignBlock.tsx +92 -55
  131. package/src/Concept/Concept.stories.tsx +142 -0
  132. package/src/Concept/Concept.tsx +73 -0
  133. package/src/ContactBlock/ContactBlock.tsx +1 -1
  134. package/src/ContentTypeBadge/ContentTypeBadgeNew.stories.tsx +70 -0
  135. package/src/ContentTypeBadge/ContentTypeBadgeNew.tsx +69 -0
  136. package/src/Embed/AudioEmbed.tsx +2 -2
  137. package/src/Embed/BrightcoveEmbed.stories.tsx +0 -3
  138. package/src/Embed/BrightcoveEmbed.tsx +18 -20
  139. package/src/Embed/ConceptEmbed.stories.tsx +1 -105
  140. package/src/Embed/ConceptEmbed.tsx +60 -385
  141. package/src/Embed/ConceptListEmbed.tsx +20 -19
  142. package/src/Embed/ContentLinkEmbed.tsx +8 -10
  143. package/src/Embed/CopyrightEmbed.tsx +1 -11
  144. package/src/Embed/ExternalEmbed.tsx +14 -17
  145. package/src/Embed/FootnoteEmbed.stories.tsx +2 -5
  146. package/src/Embed/FootnoteEmbed.tsx +13 -16
  147. package/src/Embed/GlossEmbed.stories.tsx +140 -0
  148. package/src/Embed/GlossEmbed.tsx +64 -0
  149. package/src/Embed/H5pEmbed.tsx +22 -16
  150. package/src/Embed/IframeEmbed.tsx +12 -6
  151. package/src/Embed/InlineTriggerButton.tsx +72 -0
  152. package/src/Embed/UnknownEmbed.tsx +6 -7
  153. package/src/Embed/UuDisclaimerEmbed.stories.tsx +4 -4
  154. package/src/Embed/UuDisclaimerEmbed.tsx +17 -25
  155. package/src/Embed/index.ts +2 -3
  156. package/src/ErrorMessage/ErrorMessage.tsx +40 -29
  157. package/src/ErrorMessage/ErrorResourceAccessDenied.tsx +8 -6
  158. package/src/FactBox/FactBox.tsx +115 -115
  159. package/src/FactBox/Factbox.stories.tsx +43 -27
  160. package/src/FileList/FileList.stories.tsx +6 -1
  161. package/src/FileList/PdfFile.tsx +22 -5
  162. package/src/Gloss/Gloss.stories.tsx +107 -1
  163. package/src/Gloss/Gloss.tsx +143 -156
  164. package/src/Gloss/GlossExample.tsx +51 -77
  165. package/src/LicenseByline/EmbedByline.stories.tsx +9 -4
  166. package/src/LicenseByline/EmbedByline.tsx +139 -53
  167. package/src/LicenseByline/LicenseLink.tsx +15 -15
  168. package/src/LicenseByline/index.tsx +2 -2
  169. package/src/LinkBlock/LinkBlock.stories.tsx +8 -10
  170. package/src/LinkBlock/LinkBlock.tsx +54 -59
  171. package/src/LinkBlock/LinkBlockSection.tsx +9 -12
  172. package/src/Logo/Logo.stories.tsx +0 -1
  173. package/src/Logo/Logo.tsx +2 -30
  174. package/src/RelatedArticleList/RelatedArticleList.tsx +69 -88
  175. package/src/ResourceBox/ResourceBox.tsx +63 -59
  176. package/src/TagSelector/TagSelector.stories.tsx +92 -68
  177. package/src/TagSelector/TagSelector.tsx +161 -126
  178. package/src/i18n/index.ts +5 -0
  179. package/src/i18n/useComponentTranslations.ts +72 -0
  180. package/src/index.ts +23 -19
  181. package/src/locale/messages-en.ts +28 -2
  182. package/src/locale/messages-nb.ts +28 -2
  183. package/src/locale/messages-nn.ts +28 -2
  184. package/src/locale/messages-se.ts +28 -2
  185. package/src/locale/messages-sma.ts +28 -2
  186. package/src/model/ContentType.ts +3 -0
  187. package/es/DefinitionList/DefinitionDescription.js +0 -28
  188. package/es/DefinitionList/DefinitionTerm.js +0 -28
  189. package/es/DefinitionList/index.js +0 -10
  190. package/es/Embed/conceptComponents.js +0 -155
  191. package/es/ExpandableBox/ExpandableBox.js +0 -29
  192. package/es/ExpandableBox/index.js +0 -9
  193. package/es/Figure/Figure.js +0 -73
  194. package/es/Figure/index.js +0 -9
  195. package/es/FramedContent/FramedContent.js +0 -28
  196. package/es/FramedContent/index.js +0 -10
  197. package/es/Image/Image.js +0 -99
  198. package/es/Image/ImageLink.js +0 -39
  199. package/es/Image/index.js +0 -12
  200. package/es/LetterFilter/LetterFilter.js +0 -54
  201. package/es/LetterFilter/alphabet.js +0 -9
  202. package/es/LetterFilter/index.js +0 -10
  203. package/es/LicenseByline/LicenseDescription.js +0 -63
  204. package/es/List/OrderedList.js +0 -41
  205. package/es/List/UnOrderedList.js +0 -28
  206. package/es/List/index.js +0 -10
  207. package/es/Notion/Notion.js +0 -76
  208. package/es/Notion/NotionImage.js +0 -46
  209. package/es/Notion/index.js +0 -9
  210. package/es/Table/Table.js +0 -141
  211. package/es/Table/index.js +0 -11
  212. package/es/TagSelector/Control.js +0 -28
  213. package/es/TagSelector/DropdownIndicator.js +0 -60
  214. package/es/TagSelector/Input.js +0 -22
  215. package/es/TagSelector/Menu.js +0 -27
  216. package/es/TagSelector/MenuList.js +0 -28
  217. package/es/TagSelector/Option.js +0 -60
  218. package/es/TagSelector/SelectContainer.js +0 -27
  219. package/es/TagSelector/ValueButton.js +0 -53
  220. package/es/TagSelector/ariaMessages.js +0 -94
  221. package/es/TagSelector/index.js +0 -10
  222. package/es/TagSelector/types.js +0 -1
  223. package/lib/DefinitionList/DefinitionDescription.d.ts +0 -10
  224. package/lib/DefinitionList/DefinitionDescription.js +0 -35
  225. package/lib/DefinitionList/DefinitionTerm.d.ts +0 -10
  226. package/lib/DefinitionList/DefinitionTerm.js +0 -35
  227. package/lib/DefinitionList/index.d.ts +0 -9
  228. package/lib/DefinitionList/index.js +0 -20
  229. package/lib/Embed/conceptComponents.d.ts +0 -40
  230. package/lib/Embed/conceptComponents.js +0 -163
  231. package/lib/ExpandableBox/ExpandableBox.d.ts +0 -15
  232. package/lib/ExpandableBox/ExpandableBox.js +0 -37
  233. package/lib/ExpandableBox/index.d.ts +0 -8
  234. package/lib/ExpandableBox/index.js +0 -18
  235. package/lib/Figure/Figure.d.ts +0 -16
  236. package/lib/Figure/Figure.js +0 -81
  237. package/lib/Figure/index.d.ts +0 -9
  238. package/lib/Figure/index.js +0 -13
  239. package/lib/FramedContent/FramedContent.d.ts +0 -12
  240. package/lib/FramedContent/FramedContent.js +0 -35
  241. package/lib/FramedContent/index.d.ts +0 -9
  242. package/lib/FramedContent/index.js +0 -16
  243. package/lib/Image/Image.d.ts +0 -38
  244. package/lib/Image/Image.js +0 -105
  245. package/lib/Image/ImageLink.d.ts +0 -18
  246. package/lib/Image/ImageLink.js +0 -44
  247. package/lib/Image/index.d.ts +0 -12
  248. package/lib/Image/index.js +0 -30
  249. package/lib/LetterFilter/LetterFilter.d.ts +0 -14
  250. package/lib/LetterFilter/LetterFilter.js +0 -61
  251. package/lib/LetterFilter/alphabet.d.ts +0 -8
  252. package/lib/LetterFilter/alphabet.js +0 -15
  253. package/lib/LetterFilter/index.d.ts +0 -9
  254. package/lib/LetterFilter/index.js +0 -16
  255. package/lib/LicenseByline/LicenseDescription.d.ts +0 -15
  256. package/lib/LicenseByline/LicenseDescription.js +0 -70
  257. package/lib/List/OrderedList.d.ts +0 -16
  258. package/lib/List/OrderedList.js +0 -48
  259. package/lib/List/UnOrderedList.d.ts +0 -10
  260. package/lib/List/UnOrderedList.js +0 -35
  261. package/lib/List/index.d.ts +0 -9
  262. package/lib/List/index.js +0 -20
  263. package/lib/Notion/Notion.d.ts +0 -20
  264. package/lib/Notion/Notion.js +0 -82
  265. package/lib/Notion/NotionImage.d.ts +0 -13
  266. package/lib/Notion/NotionImage.js +0 -54
  267. package/lib/Notion/index.d.ts +0 -8
  268. package/lib/Notion/index.js +0 -13
  269. package/lib/Table/Table.d.ts +0 -19
  270. package/lib/Table/Table.js +0 -145
  271. package/lib/Table/index.d.ts +0 -10
  272. package/lib/Table/index.js +0 -23
  273. package/lib/TagSelector/Control.d.ts +0 -11
  274. package/lib/TagSelector/Control.js +0 -35
  275. package/lib/TagSelector/DropdownIndicator.d.ts +0 -11
  276. package/lib/TagSelector/DropdownIndicator.js +0 -64
  277. package/lib/TagSelector/Input.d.ts +0 -12
  278. package/lib/TagSelector/Input.js +0 -29
  279. package/lib/TagSelector/Menu.d.ts +0 -12
  280. package/lib/TagSelector/Menu.js +0 -34
  281. package/lib/TagSelector/MenuList.d.ts +0 -16
  282. package/lib/TagSelector/MenuList.js +0 -35
  283. package/lib/TagSelector/Option.d.ts +0 -12
  284. package/lib/TagSelector/Option.js +0 -67
  285. package/lib/TagSelector/SelectContainer.d.ts +0 -11
  286. package/lib/TagSelector/SelectContainer.js +0 -34
  287. package/lib/TagSelector/ValueButton.d.ts +0 -20
  288. package/lib/TagSelector/ValueButton.js +0 -60
  289. package/lib/TagSelector/ariaMessages.d.ts +0 -16
  290. package/lib/TagSelector/ariaMessages.js +0 -101
  291. package/lib/TagSelector/index.d.ts +0 -11
  292. package/lib/TagSelector/index.js +0 -13
  293. package/lib/TagSelector/types.d.ts +0 -11
  294. package/lib/TagSelector/types.js +0 -5
  295. package/src/DefinitionList/DefinitionDescription.tsx +0 -26
  296. package/src/DefinitionList/DefinitionTerm.tsx +0 -26
  297. package/src/DefinitionList/index.tsx +0 -10
  298. package/src/Embed/conceptComponents.tsx +0 -293
  299. package/src/ExpandableBox/ExpandableBox.stories.tsx +0 -41
  300. package/src/ExpandableBox/ExpandableBox.tsx +0 -23
  301. package/src/ExpandableBox/index.ts +0 -9
  302. package/src/Figure/Figure.tsx +0 -167
  303. package/src/Figure/index.ts +0 -11
  304. package/src/FramedContent/FramedContent.stories.tsx +0 -152
  305. package/src/FramedContent/FramedContent.tsx +0 -26
  306. package/src/FramedContent/index.ts +0 -10
  307. package/src/Image/Image.stories.tsx +0 -61
  308. package/src/Image/Image.tsx +0 -147
  309. package/src/Image/ImageLink.tsx +0 -37
  310. package/src/Image/index.ts +0 -14
  311. package/src/LetterFilter/LetterFilter.stories.tsx +0 -29
  312. package/src/LetterFilter/LetterFilter.tsx +0 -78
  313. package/src/LetterFilter/alphabet.ts +0 -39
  314. package/src/LetterFilter/index.ts +0 -11
  315. package/src/LicenseByline/LicenseDescription.tsx +0 -100
  316. package/src/List/OrderedList.stories.tsx +0 -135
  317. package/src/List/OrderedList.tsx +0 -158
  318. package/src/List/UnOrderedList.tsx +0 -43
  319. package/src/List/UnorderedList.stories.tsx +0 -72
  320. package/src/List/index.ts +0 -10
  321. package/src/Notion/Notion.tsx +0 -96
  322. package/src/Notion/NotionImage.tsx +0 -64
  323. package/src/Notion/index.ts +0 -9
  324. package/src/Table/Table.stories.tsx +0 -738
  325. package/src/Table/Table.tsx +0 -284
  326. package/src/Table/index.ts +0 -12
  327. package/src/TagSelector/Control.tsx +0 -34
  328. package/src/TagSelector/DropdownIndicator.tsx +0 -55
  329. package/src/TagSelector/Input.tsx +0 -31
  330. package/src/TagSelector/Menu.tsx +0 -38
  331. package/src/TagSelector/MenuList.tsx +0 -30
  332. package/src/TagSelector/Option.tsx +0 -58
  333. package/src/TagSelector/SelectContainer.tsx +0 -31
  334. package/src/TagSelector/ValueButton.tsx +0 -47
  335. package/src/TagSelector/ariaMessages.ts +0 -96
  336. package/src/TagSelector/index.ts +0 -14
  337. package/src/TagSelector/types.ts +0 -12
@@ -1,284 +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
- /** @jsxImportSource @emotion/react */
10
- import throttle from "lodash.throttle";
11
- import { ReactNode, UIEvent, useCallback, useEffect, useMemo, useRef, useState } from "react";
12
- import { css } from "@emotion/react";
13
- import styled from "@emotion/styled";
14
- import { breakpoints, colors, fonts, mq, spacing } from "@ndla/core";
15
-
16
- type ScrollPosition = "start" | "end" | "center";
17
-
18
- const MARGIN = 5;
19
-
20
- interface Props {
21
- id?: string;
22
- children?: ReactNode;
23
- dangerouslySetInnerHTML?: {
24
- __html: string;
25
- };
26
- lang?: string;
27
- }
28
-
29
- const ScrollBorder = styled.div`
30
- position: absolute;
31
- top: 0;
32
- height: calc(100% - ${spacing.mediumlarge});
33
- width: 3px;
34
- background: ${colors.background.dark};
35
- display: none;
36
-
37
- &[data-block="true"] {
38
- display: block;
39
- }
40
- `;
41
-
42
- const RightScrollBorder = styled(ScrollBorder)`
43
- right: 0;
44
- `;
45
-
46
- const LeftScrollBorder = styled(ScrollBorder)`
47
- left: 0;
48
- `;
49
-
50
- export const TableStyling = css`
51
- &::-webkit-scrollbar {
52
- height: ${spacing.xsmall};
53
- }
54
- &::-webkit-scrollbar-track-piece {
55
- background: ${colors.brand.lighter};
56
- border-radius: ${spacing.xsmall};
57
- }
58
- &::-webkit-scrollbar-thumb {
59
- background: ${colors.brand.dark};
60
- border-radius: ${spacing.xsmall};
61
- }
62
- display: inline-block;
63
-
64
- font-size: 85%;
65
- max-width: 100%;
66
-
67
- padding-left: ${spacing.xxsmall};
68
- padding-right: ${spacing.xxsmall};
69
-
70
- vertical-align: top;
71
- table-layout: fixed;
72
- overflow-x: auto;
73
-
74
- // optional - enable iOS momentum scrolling
75
- -webkit-overflow-scrolling: touch;
76
-
77
- // scrolling shadows on left/right
78
- &:after,
79
- &:before {
80
- content: "";
81
- display: table;
82
- clear: both;
83
- }
84
-
85
- > caption {
86
- background-color: transparent;
87
- font-weight: ${fonts.weight.bold};
88
- font-family: ${fonts.sans};
89
- ${fonts.sizes("16px", "20px")}
90
- text-align: left;
91
- text-transform: uppercase;
92
- margin-bottom: ${spacing.small};
93
- }
94
-
95
- thead {
96
- overflow: hidden;
97
- }
98
-
99
- thead tr td,
100
- th {
101
- font-weight: ${fonts.weight.bold};
102
- border-bottom: 3px solid ${colors.brand.tertiary};
103
- font-family: ${fonts.sans};
104
- vertical-align: text-top;
105
-
106
- ${fonts.sizes("16px", "22px")};
107
- ${mq.range({ from: breakpoints.tablet })} {
108
- ${fonts.sizes("16px", "30px")};
109
- }
110
- }
111
-
112
- tbody th {
113
- border-bottom: 0;
114
- border-right: 3px solid ${colors.brand.tertiary};
115
- padding: ${spacing.xsmall};
116
- }
117
-
118
- thead tr:nth-child(2) th {
119
- border: 1px solid ${colors.brand.lighter};
120
- text-transform: none;
121
-
122
- ${fonts.sizes("14px", "18px")};
123
- ${mq.range({ from: breakpoints.tablet })} {
124
- ${fonts.sizes("15px", "26px")};
125
- }
126
-
127
- font-weight: ${fonts.weight.semibold};
128
- height: 40px;
129
- background-color: ${colors.brand.lighter};
130
- padding: ${spacing.xxsmall} ${spacing.normal} ${spacing.xxsmall} ${spacing.xsmall};
131
-
132
- &:empty {
133
- background-color: transparent;
134
- }
135
- }
136
-
137
- td {
138
- border: 1px solid ${colors.brand.lighter};
139
- vertical-align: top;
140
-
141
- ${fonts.sizes("14px", "22px")};
142
- ${mq.range({ from: breakpoints.tablet })} {
143
- ${fonts.sizes("15px", "30px")};
144
- }
145
-
146
- ol,
147
- ul {
148
- li,
149
- li p {
150
- ${fonts.sizes("14px", "22px")};
151
- ${mq.range({ from: breakpoints.tablet })} {
152
- ${fonts.sizes("15px", "30px")};
153
- }
154
- margin: ${spacing.xsmall} 0 !important;
155
- }
156
- }
157
-
158
- p {
159
- line-height: 1.6em;
160
- }
161
-
162
- p:last-child {
163
- margin: 0;
164
- }
165
-
166
- img {
167
- max-width: 100%;
168
- min-width: 120px;
169
- }
170
- }
171
-
172
- td,
173
- th {
174
- display: table-cell;
175
- padding: ${spacing.xsmall} ${spacing.small};
176
-
177
- &[data-align="center"] {
178
- text-align: center;
179
- }
180
-
181
- &[data-align="right"] {
182
- text-align: right;
183
- }
184
-
185
- &[data-align="left"] {
186
- text-align: left;
187
- }
188
- p {
189
- margin: 0;
190
- }
191
- }
192
-
193
- // Remove excess spacing on headings inside table
194
- h1,
195
- h2,
196
- h3,
197
- h4,
198
- h5 {
199
- margin-top: 0;
200
- }
201
-
202
- ul {
203
- padding: 0 0 0 ${spacing.nsmall};
204
- }
205
-
206
- figure {
207
- margin: 0;
208
- padding: 0;
209
- width: 100% !important;
210
- left: 0 !important;
211
- }
212
- `;
213
-
214
- const TableWrapper = styled.div`
215
- display: flex;
216
- justify-content: center;
217
- `;
218
-
219
- const OverflowWrapper = styled.div`
220
- position: relative;
221
- overflow-x: auto;
222
- `;
223
-
224
- const StyledTable = styled.table`
225
- ${TableStyling};
226
- `;
227
-
228
- const Table = ({ children, id, ...rest }: Props) => {
229
- const [scrollPosition, setScrollPosition] = useState<ScrollPosition | undefined>(undefined);
230
- const tableRef = useRef<HTMLTableElement>(null);
231
-
232
- const checkScrollPosition = useCallback((el: HTMLTableElement) => {
233
- const { scrollLeft, offsetWidth, scrollWidth, clientWidth } = el;
234
- const hasScrollbar = scrollWidth > clientWidth;
235
-
236
- if (!hasScrollbar) {
237
- setScrollPosition(undefined);
238
- return;
239
- }
240
-
241
- const isStart = scrollLeft <= MARGIN;
242
- const isEnd = offsetWidth + scrollLeft >= scrollWidth - MARGIN;
243
-
244
- if (isStart) {
245
- setScrollPosition("start");
246
- } else if (isEnd) {
247
- setScrollPosition("end");
248
- } else {
249
- setScrollPosition("center");
250
- }
251
- }, []);
252
-
253
- const onScroll = useMemo(
254
- () =>
255
- throttle((event: UIEvent<HTMLTableElement>) => {
256
- const el = event.target as HTMLTableElement | undefined;
257
- if (el) {
258
- checkScrollPosition(el);
259
- }
260
- }, 100),
261
- [checkScrollPosition],
262
- );
263
-
264
- useEffect(() => {
265
- const el = tableRef.current;
266
- if (el) {
267
- checkScrollPosition(el);
268
- }
269
- }, [checkScrollPosition]);
270
-
271
- return (
272
- <TableWrapper>
273
- <OverflowWrapper>
274
- <LeftScrollBorder data-block={scrollPosition === "end" || scrollPosition === "center"} />
275
- <StyledTable ref={tableRef} id={id} onScroll={onScroll} {...rest}>
276
- {children}
277
- </StyledTable>
278
- <RightScrollBorder data-block={scrollPosition === "start" || scrollPosition === "center"} />
279
- </OverflowWrapper>
280
- </TableWrapper>
281
- );
282
- };
283
-
284
- export default Table;
@@ -1,12 +0,0 @@
1
- /**
2
- * Copyright (c) 2018-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 Table from "./Table";
10
-
11
- export { TableStyling } from "./Table";
12
- export default Table;
@@ -1,34 +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 { ControlProps } from "react-select";
10
- import styled from "@emotion/styled";
11
- import { spacing, utils } from "@ndla/core";
12
- import { TagType } from "./types";
13
-
14
- const StyledTagSelectorControl = styled.div`
15
- display: flex;
16
- flex-wrap: wrap;
17
- justify-content: space-between;
18
- align-items: center;
19
- margin: ${spacing.xxsmall};
20
-
21
- overflow: auto;
22
- overflow: overlay;
23
- ${utils.scrollbar}
24
- `;
25
-
26
- const Control = ({ innerProps, children, innerRef }: ControlProps<TagType, true>) => {
27
- return (
28
- <StyledTagSelectorControl ref={innerRef} {...innerProps}>
29
- {children}
30
- </StyledTagSelectorControl>
31
- );
32
- };
33
-
34
- export default Control;
@@ -1,55 +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 { useMemo } from "react";
11
- import { useTranslation } from "react-i18next";
12
- import { DropdownIndicatorProps, components } from "react-select";
13
- import styled from "@emotion/styled";
14
- import { iconButtonStyle } from "@ndla/button";
15
- import { ChevronDown, ChevronUp } from "@ndla/icons/common";
16
- import { TagType } from "./types";
17
-
18
- const StyledIconWrapper = styled.span`
19
- svg {
20
- pointer-events: none;
21
- }
22
- `;
23
-
24
- const DropdownIndicator = ({ selectProps, children, ...props }: DropdownIndicatorProps<TagType, true>) => {
25
- const { t } = useTranslation();
26
-
27
- const { menuIsOpen } = selectProps;
28
- const Icon = menuIsOpen ? ChevronUp : ChevronDown;
29
-
30
- const css = useMemo(
31
- () =>
32
- iconButtonStyle({
33
- colorTheme: "greyLighter",
34
- variant: "ghost",
35
- shape: "pill",
36
- size: "small",
37
- }),
38
- [],
39
- );
40
-
41
- return (
42
- <components.DropdownIndicator
43
- css={css}
44
- {...props}
45
- selectProps={selectProps}
46
- aria-label={menuIsOpen ? t("tagSelector.hideTags") : t("tagSelector.showTags")}
47
- >
48
- <StyledIconWrapper aria-hidden>
49
- <Icon />
50
- </StyledIconWrapper>
51
- </components.DropdownIndicator>
52
- );
53
- };
54
-
55
- export default DropdownIndicator;
@@ -1,31 +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 { components, InputProps } from "react-select";
11
- import { css } from "@emotion/react";
12
- import { colors, spacing } from "@ndla/core";
13
- import { TagType } from "./types";
14
- import { StyledValueButton } from "./ValueButton";
15
-
16
- const inputStyle = css`
17
- && {
18
- padding: 0 ${spacing.small};
19
- color: ${colors.brand.primary};
20
- margin: 0;
21
- ${StyledValueButton} + & {
22
- padding-left: ${spacing.xxsmall};
23
- }
24
- }
25
- `;
26
-
27
- const Input = (props: InputProps<TagType, true>) => {
28
- return <components.Input css={inputStyle} {...props} />;
29
- };
30
-
31
- export default Input;
@@ -1,38 +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 { MenuProps, components } from "react-select";
11
- import { css } from "@emotion/react";
12
- import { colors } from "@ndla/core";
13
- import { StyledMenuList } from "./MenuList";
14
- import { TagType } from "./types";
15
-
16
- const menuStyle = css`
17
- display: flex;
18
- position: relative;
19
- flex-direction: column;
20
- margin: 0;
21
- overflow: hidden;
22
- border-top: 1px solid ${colors.brand.tertiary};
23
- min-height: 70px;
24
-
25
- :has(${StyledMenuList}>*:only-child) {
26
- min-height: 40px;
27
- }
28
- `;
29
-
30
- const Menu = ({ children, ...props }: MenuProps<TagType, true>) => {
31
- return (
32
- <components.Menu css={menuStyle} {...props}>
33
- {children}
34
- </components.Menu>
35
- );
36
- };
37
-
38
- export default Menu;
@@ -1,30 +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 { MenuListProps } from "react-select";
10
- import styled from "@emotion/styled";
11
- import { utils } from "@ndla/core";
12
- import { TagType } from "./types";
13
-
14
- export const StyledMenuList = styled.div`
15
- overflow: auto;
16
- overflow: overlay;
17
- ${utils.scrollbar}
18
- display: flex;
19
- flex-direction: column;
20
- `;
21
-
22
- const MenuList = ({ innerProps, innerRef, children }: MenuListProps<TagType, true>) => {
23
- return (
24
- <StyledMenuList ref={innerRef} {...innerProps}>
25
- {children}
26
- </StyledMenuList>
27
- );
28
- };
29
-
30
- export default MenuList;
@@ -1,58 +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 { OptionProps } from "react-select";
11
- import styled from "@emotion/styled";
12
- import { buttonStyleV2 as buttonStyle } from "@ndla/button";
13
- import { colors, fonts } from "@ndla/core";
14
- import { Done } from "@ndla/icons/editor";
15
- import { TagType } from "./types";
16
-
17
- interface StyledProps {
18
- selected: boolean;
19
- focused: boolean;
20
- }
21
-
22
- const StyledMenuOption = styled.div<StyledProps>`
23
- && {
24
- background: ${({ focused }) => focused && colors.brand.lighter};
25
- color: ${({ focused }) => focused && colors.brand.primary};
26
- justify-content: space-between;
27
- ${fonts.sizes(16)};
28
- font-weight: ${fonts.weight.normal};
29
- color: ${({ selected }) => selected && colors.brand.grey};
30
- }
31
- `;
32
-
33
- const StyledCheck = styled(Done)`
34
- width: 24px;
35
- height: 24px;
36
- fill: ${colors.brand.tertiary};
37
- `;
38
-
39
- const Option = ({ innerProps, innerRef, children, isSelected, isFocused }: OptionProps<TagType, true>) => {
40
- return (
41
- <StyledMenuOption
42
- focused={isFocused}
43
- selected={isSelected}
44
- css={buttonStyle({
45
- colorTheme: "lighter",
46
- variant: "ghost",
47
- shape: "sharp",
48
- })}
49
- ref={innerRef}
50
- {...innerProps}
51
- >
52
- {children}
53
- {isSelected && <StyledCheck />}
54
- </StyledMenuOption>
55
- );
56
- };
57
-
58
- export default Option;
@@ -1,31 +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 { ContainerProps } from "react-select";
10
- import styled from "@emotion/styled";
11
- import { colors, fonts, misc } from "@ndla/core";
12
- import { TagType } from "./types";
13
-
14
- const StyledContainer = styled.div`
15
- display: grid;
16
- grid-template-rows: auto 1fr;
17
- overflow: hidden;
18
-
19
- border: 1px solid ${colors.brand.neutral7};
20
- border-radius: ${misc.borderRadius};
21
- &:focus-within {
22
- border-color: ${colors.brand.tertiary};
23
- }
24
- ${fonts.sizes(16)};
25
- `;
26
-
27
- const SelectContainer = ({ innerProps, selectProps, children }: ContainerProps<TagType, true>) => {
28
- return <StyledContainer {...innerProps}>{children}</StyledContainer>;
29
- };
30
-
31
- export default SelectContainer;
@@ -1,47 +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 { MultiValueProps } from "react-select";
11
- import styled from "@emotion/styled";
12
- import { buttonStyleV2 as buttonStyle } from "@ndla/button";
13
- import { colors, spacing } from "@ndla/core";
14
- import { Cross } from "@ndla/icons/action";
15
- import { TagType } from "./types";
16
-
17
- interface StyledProps {
18
- selected: boolean;
19
- }
20
-
21
- export const StyledValueButton = styled.div<StyledProps>`
22
- && {
23
- background: ${({ selected }) => selected && colors.brand.primary};
24
- color: ${({ selected }) => selected && colors.white};
25
- padding: ${spacing.xxsmall} ${spacing.small};
26
- margin: ${spacing.xxsmall};
27
- border: none;
28
- }
29
- `;
30
-
31
- const ValueButton = ({ innerProps, children, removeProps, isFocused }: MultiValueProps<TagType, true>) => {
32
- return (
33
- <StyledValueButton
34
- selected={isFocused}
35
- role="button"
36
- css={buttonStyle({ colorTheme: "lighter", shape: "pill", size: "small" })}
37
- {...innerProps}
38
- {...removeProps}
39
- >
40
- <span aria-hidden>#</span>
41
- {children}
42
- <Cross />
43
- </StyledValueButton>
44
- );
45
- };
46
-
47
- export default ValueButton;