@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,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;