@ndla/ui 55.0.15-alpha.0 → 55.0.16-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.
- package/dist/panda.buildinfo.json +18 -13
- package/dist/styles.css +74 -54
- package/es/Article/ArticleByline.js +80 -47
- package/es/Article/ArticleFootNotes.js +31 -19
- package/es/ContentTypeBadge/ContentTypeBadgeNew.js +1 -0
- package/es/FrontpageArticle/FrontpageArticle.js +1 -2
- package/es/index.js +0 -1
- package/es/model/ContentType.js +3 -1
- package/es/styles.css +74 -54
- package/lib/Article/ArticleByline.d.ts +1 -3
- package/lib/Article/ArticleByline.js +82 -49
- package/lib/Article/ArticleFootNotes.js +31 -20
- package/lib/ContentTypeBadge/ContentTypeBadgeNew.d.ts +1 -2
- package/lib/ContentTypeBadge/ContentTypeBadgeNew.js +1 -0
- package/lib/FrontpageArticle/FrontpageArticle.js +1 -2
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -7
- package/lib/model/ContentType.d.ts +1 -0
- package/lib/model/ContentType.js +4 -2
- package/lib/styles.css +74 -54
- package/package.json +2 -3
- package/src/Article/ArticleByline.tsx +82 -69
- package/src/Article/ArticleFootNotes.tsx +32 -36
- package/src/ContentTypeBadge/ContentTypeBadgeNew.tsx +3 -1
- package/src/FrontpageArticle/FrontpageArticle.tsx +1 -1
- package/src/index.ts +0 -2
- package/src/model/ContentType.ts +2 -0
- package/es/CreatedBy/CreatedBy.js +0 -73
- package/es/CreatedBy/index.js +0 -10
- package/lib/CreatedBy/CreatedBy.d.ts +0 -15
- package/lib/CreatedBy/CreatedBy.js +0 -78
- package/lib/CreatedBy/index.d.ts +0 -9
- package/lib/CreatedBy/index.js +0 -16
- package/src/CreatedBy/CreatedBy.stories.tsx +0 -36
- package/src/CreatedBy/CreatedBy.tsx +0 -63
- package/src/CreatedBy/index.ts +0 -11
package/lib/styles.css
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
@layer utilities {
|
|
2
2
|
@layer compositions {
|
|
3
|
+
.textStyle_body\.medium {
|
|
4
|
+
font-family: var(--fonts-sans);
|
|
5
|
+
font-weight: var(--font-weights-normal);
|
|
6
|
+
font-size: var(--font-sizes-small);
|
|
7
|
+
line-height: var(--line-heights-small);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.textStyle_body\.medium:where([lang='zh'], [lang='zh-Hans'], [lang='zh-Hant']):not([data-pinyin]) {
|
|
11
|
+
font-size: calc(var(--font-sizes-small) * 1.11);
|
|
12
|
+
line-height: calc(var(--line-heights-small) * 1.11);
|
|
13
|
+
}
|
|
14
|
+
|
|
3
15
|
.textStyle_body\.large {
|
|
4
16
|
font-family: var(--fonts-sans);
|
|
5
17
|
font-weight: var(--font-weights-normal);
|
|
@@ -36,18 +48,6 @@
|
|
|
36
48
|
line-height: calc(var(--line-heights-medium) * 1.11);
|
|
37
49
|
}
|
|
38
50
|
|
|
39
|
-
.textStyle_body\.medium {
|
|
40
|
-
font-family: var(--fonts-sans);
|
|
41
|
-
font-weight: var(--font-weights-normal);
|
|
42
|
-
font-size: var(--font-sizes-small);
|
|
43
|
-
line-height: var(--line-heights-small);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
.textStyle_body\.medium:where([lang='zh'], [lang='zh-Hans'], [lang='zh-Hant']):not([data-pinyin]) {
|
|
47
|
-
font-size: calc(var(--font-sizes-small) * 1.11);
|
|
48
|
-
line-height: calc(var(--line-heights-small) * 1.11);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
51
|
.\[\&_a\]\:textStyle_label\.xsmall a {
|
|
52
52
|
font-family: var(--fonts-sans);
|
|
53
53
|
font-weight: var(--font-weights-normal);
|
|
@@ -61,6 +61,50 @@
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
.mbs_medium {
|
|
65
|
+
margin-block-start: var(--spacing-medium);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.pbs_xsmall {
|
|
69
|
+
padding-block-start: var(--spacing-xsmall);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.bd-t_1px_solid {
|
|
73
|
+
border-top: 1px solid;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.d_flex {
|
|
77
|
+
display: flex;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.gap_3xsmall {
|
|
81
|
+
gap: var(--spacing-3xsmall);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.w_100\% {
|
|
85
|
+
width: 100%;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.py_xsmall {
|
|
89
|
+
padding-block: var(--spacing-xsmall);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.gap_xsmall {
|
|
93
|
+
gap: var(--spacing-xsmall);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.pbs_xxlarge {
|
|
97
|
+
padding-block-start: var(--spacing-xxlarge);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.gap_medium {
|
|
101
|
+
gap: var(--spacing-medium);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.li-s_none {
|
|
105
|
+
list-style: none;
|
|
106
|
+
}
|
|
107
|
+
|
|
64
108
|
.bd_1px_solid {
|
|
65
109
|
border: 1px solid;
|
|
66
110
|
}
|
|
@@ -81,10 +125,6 @@
|
|
|
81
125
|
overflow: hidden;
|
|
82
126
|
}
|
|
83
127
|
|
|
84
|
-
.d_flex {
|
|
85
|
-
display: flex;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
128
|
.flex_1_0_auto {
|
|
89
129
|
flex: 1 0 auto;
|
|
90
130
|
}
|
|
@@ -97,18 +137,10 @@
|
|
|
97
137
|
height: var(--sizes-surface-4xsmall);
|
|
98
138
|
}
|
|
99
139
|
|
|
100
|
-
.gap_xsmall {
|
|
101
|
-
gap: var(--spacing-xsmall);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
140
|
.p_xsmall {
|
|
105
141
|
padding: var(--spacing-xsmall);
|
|
106
142
|
}
|
|
107
143
|
|
|
108
|
-
.w_100\% {
|
|
109
|
-
width: 100%;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
144
|
.bd-bs_1px_solid {
|
|
113
145
|
border-block-start: 1px solid;
|
|
114
146
|
}
|
|
@@ -134,10 +166,6 @@
|
|
|
134
166
|
background: var(--colors-background-default);
|
|
135
167
|
}
|
|
136
168
|
|
|
137
|
-
.py_xsmall {
|
|
138
|
-
padding-block: var(--spacing-xsmall);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
169
|
.px_medium {
|
|
142
170
|
padding-inline: var(--spacing-medium);
|
|
143
171
|
}
|
|
@@ -214,10 +242,6 @@
|
|
|
214
242
|
color: var(--colors-text-default);
|
|
215
243
|
}
|
|
216
244
|
|
|
217
|
-
.gap_medium {
|
|
218
|
-
gap: var(--spacing-medium);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
245
|
.h_100\% {
|
|
222
246
|
height: 100%;
|
|
223
247
|
}
|
|
@@ -411,10 +435,6 @@
|
|
|
411
435
|
padding-block: var(--spacing-small);
|
|
412
436
|
}
|
|
413
437
|
|
|
414
|
-
.bd-t_1px_solid {
|
|
415
|
-
border-top: 1px solid;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
438
|
.bg_surface\.default {
|
|
419
439
|
background: var(--colors-surface-default);
|
|
420
440
|
}
|
|
@@ -443,10 +463,6 @@
|
|
|
443
463
|
color: var(--colors-icon-strong);
|
|
444
464
|
}
|
|
445
465
|
|
|
446
|
-
.li-s_none {
|
|
447
|
-
list-style: none;
|
|
448
|
-
}
|
|
449
|
-
|
|
450
466
|
.d_grid {
|
|
451
467
|
display: grid;
|
|
452
468
|
}
|
|
@@ -459,22 +475,34 @@
|
|
|
459
475
|
aspect-ratio: 1/1;
|
|
460
476
|
}
|
|
461
477
|
|
|
462
|
-
.bd-c_stroke\.
|
|
463
|
-
border-color: var(--colors-stroke-
|
|
478
|
+
.bd-c_stroke\.subtle {
|
|
479
|
+
border-color: var(--colors-stroke-subtle);
|
|
464
480
|
}
|
|
465
481
|
|
|
466
|
-
.
|
|
467
|
-
|
|
482
|
+
.flex-d_column-reverse {
|
|
483
|
+
flex-direction: column-reverse;
|
|
468
484
|
}
|
|
469
485
|
|
|
470
|
-
.
|
|
471
|
-
|
|
486
|
+
.jc_space-between {
|
|
487
|
+
justify-content: space-between;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
.ai_center {
|
|
491
|
+
align-items: center;
|
|
472
492
|
}
|
|
473
493
|
|
|
474
494
|
.flex-d_column {
|
|
475
495
|
flex-direction: column;
|
|
476
496
|
}
|
|
477
497
|
|
|
498
|
+
.bd-c_stroke\.default {
|
|
499
|
+
border-color: var(--colors-stroke-default);
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
.ai_flex-start {
|
|
503
|
+
align-items: flex-start;
|
|
504
|
+
}
|
|
505
|
+
|
|
478
506
|
.as_flex-start {
|
|
479
507
|
align-self: flex-start;
|
|
480
508
|
}
|
|
@@ -487,10 +515,6 @@
|
|
|
487
515
|
background-color: var(--colors-background-default);
|
|
488
516
|
}
|
|
489
517
|
|
|
490
|
-
.bd-c_stroke\.subtle {
|
|
491
|
-
border-color: var(--colors-stroke-subtle);
|
|
492
|
-
}
|
|
493
|
-
|
|
494
518
|
.trs-dur_fast {
|
|
495
519
|
--transition-duration: var(--durations-fast);
|
|
496
520
|
transition-duration: var(--durations-fast);
|
|
@@ -620,10 +644,6 @@
|
|
|
620
644
|
bottom: calc(var(--spacing-medium) * -1);
|
|
621
645
|
}
|
|
622
646
|
|
|
623
|
-
.jc_space-between {
|
|
624
|
-
justify-content: space-between;
|
|
625
|
-
}
|
|
626
|
-
|
|
627
647
|
.font-style_italic {
|
|
628
648
|
font-style: italic;
|
|
629
649
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ndla/ui",
|
|
3
|
-
"version": "55.0.
|
|
3
|
+
"version": "55.0.16-alpha.0",
|
|
4
4
|
"description": "UI component library for NDLA",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -33,7 +33,6 @@
|
|
|
33
33
|
"types"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@ndla/accordion": "^5.0.7-alpha.0",
|
|
37
36
|
"@ndla/button": "^14.0.7-alpha.0",
|
|
38
37
|
"@ndla/core": "^5.0.1",
|
|
39
38
|
"@ndla/dropdown-menu": "^1.0.38",
|
|
@@ -79,5 +78,5 @@
|
|
|
79
78
|
"publishConfig": {
|
|
80
79
|
"access": "public"
|
|
81
80
|
},
|
|
82
|
-
"gitHead": "
|
|
81
|
+
"gitHead": "b05b7016560891b2867811c4420041e6932003cc"
|
|
83
82
|
}
|
|
@@ -10,44 +10,54 @@ import { TFunction } from "i18next";
|
|
|
10
10
|
import { ReactNode, useCallback, useEffect, useState } from "react";
|
|
11
11
|
import { useTranslation } from "react-i18next";
|
|
12
12
|
import { useLocation } from "react-router-dom";
|
|
13
|
-
import
|
|
14
|
-
import { AccordionRoot, AccordionHeader, AccordionContent, AccordionItem } from "@ndla/accordion";
|
|
15
|
-
import { breakpoints, colors, fonts, mq, spacing } from "@ndla/core";
|
|
13
|
+
import { ChevronDown } from "@ndla/icons/common";
|
|
16
14
|
import { getLicenseByAbbreviation } from "@ndla/licenses";
|
|
15
|
+
import {
|
|
16
|
+
AccordionItem,
|
|
17
|
+
AccordionItemContent,
|
|
18
|
+
AccordionItemIndicator,
|
|
19
|
+
AccordionItemTrigger,
|
|
20
|
+
AccordionRoot,
|
|
21
|
+
Heading,
|
|
22
|
+
} from "@ndla/primitives";
|
|
23
|
+
import { styled } from "@ndla/styled-system/jsx";
|
|
17
24
|
import ArticleFootNotes from "./ArticleFootNotes";
|
|
18
25
|
import { LicenseLink } from "../LicenseByline/LicenseLink";
|
|
19
26
|
import { FootNote } from "../types";
|
|
20
27
|
|
|
21
|
-
const Wrapper = styled
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
28
|
+
const Wrapper = styled("div", {
|
|
29
|
+
base: {
|
|
30
|
+
// TODO: Figure out if we want to remove this margin. It's only here to add some gap between the article content and the byline.
|
|
31
|
+
marginBlockStart: "medium",
|
|
32
|
+
paddingBlockStart: "xsmall",
|
|
33
|
+
borderTop: "1px solid",
|
|
34
|
+
borderColor: "stroke.subtle",
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// TODO: This is designed with 24px of inline padding. If you do this, most bylines will break into two lines.
|
|
39
|
+
// Should reconsider.
|
|
40
|
+
const TextWrapper = styled("div", {
|
|
41
|
+
base: {
|
|
42
|
+
display: "flex",
|
|
43
|
+
flexDirection: "column-reverse",
|
|
44
|
+
gap: "3xsmall",
|
|
45
|
+
width: "100%",
|
|
46
|
+
justifyContent: "space-between",
|
|
47
|
+
paddingBlock: "xsmall",
|
|
48
|
+
textStyle: "body.medium",
|
|
49
|
+
},
|
|
50
|
+
variants: {
|
|
51
|
+
learningpath: {
|
|
52
|
+
true: {},
|
|
53
|
+
false: {
|
|
54
|
+
tabletWide: {
|
|
55
|
+
flexDirection: "row",
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
});
|
|
51
61
|
|
|
52
62
|
type AuthorProps = {
|
|
53
63
|
name: string;
|
|
@@ -57,8 +67,6 @@ type SupplierProps = {
|
|
|
57
67
|
name: string;
|
|
58
68
|
};
|
|
59
69
|
|
|
60
|
-
type AccordionHeaderVariants = "white" | "blue";
|
|
61
|
-
|
|
62
70
|
type Props = {
|
|
63
71
|
authors?: AuthorProps[];
|
|
64
72
|
suppliers?: SupplierProps[];
|
|
@@ -67,7 +75,6 @@ type Props = {
|
|
|
67
75
|
licenseBox?: ReactNode;
|
|
68
76
|
locale?: string;
|
|
69
77
|
footnotes?: FootNote[];
|
|
70
|
-
accordionHeaderVariant?: AccordionHeaderVariants;
|
|
71
78
|
displayByline?: boolean;
|
|
72
79
|
bylineType?: "article" | "learningPath";
|
|
73
80
|
};
|
|
@@ -96,27 +103,18 @@ const getSuppliersText = (suppliers: SupplierProps[], t: TFunction) => {
|
|
|
96
103
|
});
|
|
97
104
|
};
|
|
98
105
|
|
|
99
|
-
const LicenseWrapper = styled
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
106
|
+
const LicenseWrapper = styled("div", {
|
|
107
|
+
base: {
|
|
108
|
+
display: "flex",
|
|
109
|
+
gap: "xsmall",
|
|
110
|
+
},
|
|
111
|
+
});
|
|
104
112
|
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
&[data-background-color="white"][data-state="closed"] {
|
|
111
|
-
background-color: ${colors.background.default};
|
|
112
|
-
}
|
|
113
|
-
`;
|
|
114
|
-
|
|
115
|
-
const StyledAccordionContent = styled(AccordionContent)`
|
|
116
|
-
&[data-background-color="white"] {
|
|
117
|
-
background-color: ${colors.background.default};
|
|
118
|
-
}
|
|
119
|
-
`;
|
|
113
|
+
const StyledAccordionRoot = styled(AccordionRoot, {
|
|
114
|
+
base: {
|
|
115
|
+
paddingBlockStart: "xxlarge",
|
|
116
|
+
},
|
|
117
|
+
});
|
|
120
118
|
|
|
121
119
|
const refRegexp = /note\d/;
|
|
122
120
|
const footnotesAccordionId = "footnotes";
|
|
@@ -129,7 +127,6 @@ const ArticleByline = ({
|
|
|
129
127
|
licenseBox,
|
|
130
128
|
published,
|
|
131
129
|
locale,
|
|
132
|
-
accordionHeaderVariant = "blue",
|
|
133
130
|
displayByline = true,
|
|
134
131
|
bylineType = "article",
|
|
135
132
|
}: Props) => {
|
|
@@ -167,18 +164,18 @@ const ArticleByline = ({
|
|
|
167
164
|
return (
|
|
168
165
|
<Wrapper>
|
|
169
166
|
{displayByline && (
|
|
170
|
-
<TextWrapper
|
|
167
|
+
<TextWrapper learningpath={bylineType === "learningPath"}>
|
|
171
168
|
<LicenseWrapper>
|
|
172
169
|
{license && <LicenseLink license={license} />}
|
|
173
170
|
{showPrimaryContributors && (
|
|
174
|
-
<
|
|
171
|
+
<span>
|
|
175
172
|
{authors.length > 0 &&
|
|
176
173
|
`${t("article.authorsLabel", {
|
|
177
174
|
names: renderContributors(authors, t),
|
|
178
175
|
interpolation: { escapeValue: false },
|
|
179
176
|
})}. `}
|
|
180
177
|
{getSuppliersText(suppliers, t)}
|
|
181
|
-
</
|
|
178
|
+
</span>
|
|
182
179
|
)}
|
|
183
180
|
</LicenseWrapper>
|
|
184
181
|
<div>
|
|
@@ -186,25 +183,41 @@ const ArticleByline = ({
|
|
|
186
183
|
</div>
|
|
187
184
|
</TextWrapper>
|
|
188
185
|
)}
|
|
189
|
-
<
|
|
186
|
+
<StyledAccordionRoot
|
|
187
|
+
multiple
|
|
188
|
+
value={openAccordions}
|
|
189
|
+
onValueChange={(details) => setOpenAccordions(details.value)}
|
|
190
|
+
>
|
|
190
191
|
{licenseBox && (
|
|
191
192
|
<AccordionItem value={accordionItemValue}>
|
|
192
|
-
<
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
193
|
+
<AccordionItemTrigger>
|
|
194
|
+
<Heading asChild consumeCss textStyle="label.medium" fontWeight="bold">
|
|
195
|
+
<h2>{t("article.useContent")}</h2>
|
|
196
|
+
</Heading>
|
|
197
|
+
<AccordionItemIndicator asChild>
|
|
198
|
+
<ChevronDown />
|
|
199
|
+
</AccordionItemIndicator>
|
|
200
|
+
</AccordionItemTrigger>
|
|
201
|
+
<AccordionItemContent>{licenseBox}</AccordionItemContent>
|
|
196
202
|
</AccordionItem>
|
|
197
203
|
)}
|
|
198
204
|
|
|
199
205
|
{!!footnotes?.length && (
|
|
200
206
|
<AccordionItem value={footnotesAccordionId}>
|
|
201
|
-
<
|
|
202
|
-
|
|
207
|
+
<AccordionItemTrigger>
|
|
208
|
+
<Heading asChild consumeCss textStyle="label.medium" fontWeight="bold">
|
|
209
|
+
<h2>{t("article.footnotes")}</h2>
|
|
210
|
+
</Heading>
|
|
211
|
+
<AccordionItemIndicator asChild>
|
|
212
|
+
<ChevronDown />
|
|
213
|
+
</AccordionItemIndicator>
|
|
214
|
+
</AccordionItemTrigger>
|
|
215
|
+
<AccordionItemContent>
|
|
203
216
|
<ArticleFootNotes footNotes={footnotes} />
|
|
204
|
-
</
|
|
217
|
+
</AccordionItemContent>
|
|
205
218
|
</AccordionItem>
|
|
206
219
|
)}
|
|
207
|
-
</
|
|
220
|
+
</StyledAccordionRoot>
|
|
208
221
|
</Wrapper>
|
|
209
222
|
);
|
|
210
223
|
};
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
9
|
+
import { Text } from "@ndla/primitives";
|
|
10
|
+
import { styled } from "@ndla/styled-system/jsx";
|
|
11
11
|
import { FootNote as FootNoteType } from "../types";
|
|
12
12
|
|
|
13
13
|
const citeDetailString = (description: string | undefined) => (description ? `${description}. ` : "");
|
|
@@ -16,36 +16,32 @@ type FootNoteProps = {
|
|
|
16
16
|
footNote: FootNoteType;
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
&:hover,
|
|
27
|
-
&:focus-visible {
|
|
28
|
-
text-decoration: none;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
`;
|
|
19
|
+
const StyledCite = styled("cite", {
|
|
20
|
+
base: {
|
|
21
|
+
display: "flex",
|
|
22
|
+
alignItems: "center",
|
|
23
|
+
gap: "xsmall",
|
|
24
|
+
},
|
|
25
|
+
});
|
|
32
26
|
|
|
33
27
|
const FootNote = ({ footNote }: FootNoteProps) => (
|
|
34
28
|
<li>
|
|
35
|
-
<
|
|
36
|
-
<
|
|
37
|
-
{footNote.ref}
|
|
38
|
-
|
|
39
|
-
{`«${footNote.title}». ${footNote.authors.join(" ")}. ${citeDetailString(footNote.edition)}${citeDetailString(
|
|
40
|
-
footNote.publisher,
|
|
41
|
-
)}${footNote.year}. `}
|
|
42
|
-
{footNote.url ? (
|
|
43
|
-
<a href={footNote.url}>
|
|
44
|
-
{footNote.url}
|
|
45
|
-
{"."}
|
|
29
|
+
<Text id={`note${footNote.ref}`} asChild consumeCss textStyle="body.medium">
|
|
30
|
+
<StyledCite>
|
|
31
|
+
<a href={`#ref${footNote.ref}`} target="_self">
|
|
32
|
+
{footNote.ref}
|
|
46
33
|
</a>
|
|
47
|
-
|
|
48
|
-
|
|
34
|
+
{`«${footNote.title}». ${footNote.authors.join(" ")}. ${citeDetailString(footNote.edition)}${citeDetailString(
|
|
35
|
+
footNote.publisher,
|
|
36
|
+
)}${footNote.year}. `}
|
|
37
|
+
{footNote.url ? (
|
|
38
|
+
<a href={footNote.url}>
|
|
39
|
+
{footNote.url}
|
|
40
|
+
{"."}
|
|
41
|
+
</a>
|
|
42
|
+
) : null}
|
|
43
|
+
</StyledCite>
|
|
44
|
+
</Text>
|
|
49
45
|
</li>
|
|
50
46
|
);
|
|
51
47
|
|
|
@@ -53,14 +49,14 @@ type ArticleFootNotesProps = {
|
|
|
53
49
|
footNotes: Array<FootNoteType>;
|
|
54
50
|
};
|
|
55
51
|
|
|
56
|
-
const FootnoteList = styled
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
52
|
+
const FootnoteList = styled("ol", {
|
|
53
|
+
base: {
|
|
54
|
+
display: "flex",
|
|
55
|
+
flexDirection: "column",
|
|
56
|
+
gap: "medium",
|
|
57
|
+
listStyle: "none",
|
|
58
|
+
},
|
|
59
|
+
});
|
|
64
60
|
|
|
65
61
|
const ArticleFootNotes = ({ footNotes }: ArticleFootNotesProps) => (
|
|
66
62
|
<FootnoteList>
|
|
@@ -15,7 +15,7 @@ export interface ContentTypeBadgeProps extends Omit<BadgeProps, "colorTheme"> {
|
|
|
15
15
|
contentType: ContentType | undefined;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
type ContentType =
|
|
18
|
+
export type ContentType =
|
|
19
19
|
| typeof contentTypes.SUBJECT_MATERIAL
|
|
20
20
|
| typeof contentTypes.TASKS_AND_ACTIVITIES
|
|
21
21
|
| typeof contentTypes.ASSESSMENT_RESOURCES
|
|
@@ -30,6 +30,7 @@ type ContentType =
|
|
|
30
30
|
| typeof contentTypes.AUDIO
|
|
31
31
|
| typeof contentTypes.VIDEO
|
|
32
32
|
| typeof contentTypes.MISSING
|
|
33
|
+
| typeof contentTypes.PODCAST
|
|
33
34
|
// This allows for us to fallback to string without getting a ts error, while still keeping intellisense
|
|
34
35
|
| (string & {});
|
|
35
36
|
|
|
@@ -49,6 +50,7 @@ export const contentTypeToBadgeVariantMap: Record<ContentType, BadgeVariant> = {
|
|
|
49
50
|
// TODO: Verify resourceEmbedTypeMapping colors
|
|
50
51
|
[contentTypes.IMAGE]: "brand1",
|
|
51
52
|
[contentTypes.AUDIO]: "brand1",
|
|
53
|
+
[contentTypes.PODCAST]: "brand1",
|
|
52
54
|
[contentTypes.VIDEO]: "brand1",
|
|
53
55
|
[contentTypes.MISSING]: "neutral",
|
|
54
56
|
};
|
|
@@ -79,7 +79,7 @@ export const FrontpageArticle = ({ article, id, isWide, licenseBox, lang }: Prop
|
|
|
79
79
|
{introduction}
|
|
80
80
|
</Text>
|
|
81
81
|
{content}
|
|
82
|
-
<ArticleByline
|
|
82
|
+
<ArticleByline licenseBox={licenseBox} displayByline={false} />
|
|
83
83
|
</StyledArticle>
|
|
84
84
|
);
|
|
85
85
|
};
|
package/src/index.ts
CHANGED
|
@@ -85,8 +85,6 @@ export { SearchFieldForm } from "./Search/SearchFieldForm";
|
|
|
85
85
|
|
|
86
86
|
export { default as resourceTypeColor } from "./utils/resourceTypeColor";
|
|
87
87
|
|
|
88
|
-
export { default as CreatedBy } from "./CreatedBy";
|
|
89
|
-
|
|
90
88
|
export { MessageBox, MessageBanner } from "./Messages";
|
|
91
89
|
|
|
92
90
|
export { ResourceBox } from "./ResourceBox";
|
package/src/model/ContentType.ts
CHANGED
|
@@ -20,6 +20,7 @@ export const MISSING = "missing";
|
|
|
20
20
|
export const IMAGE = "image";
|
|
21
21
|
export const VIDEO = "video";
|
|
22
22
|
export const AUDIO = "audio";
|
|
23
|
+
export const PODCAST = "podcast";
|
|
23
24
|
|
|
24
25
|
export const contentTypes = {
|
|
25
26
|
SUBJECT_MATERIAL,
|
|
@@ -71,4 +72,5 @@ export const resourceEmbedTypeMapping: Record<string, string> = {
|
|
|
71
72
|
video: "video",
|
|
72
73
|
concept: "concept",
|
|
73
74
|
audio: "audio",
|
|
75
|
+
podcast: "podcast",
|
|
74
76
|
};
|