@ndla/ui 55.0.15-alpha.0 → 55.0.17-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 +125 -29
- package/dist/styles.css +453 -103
- package/es/Article/Article.js +101 -162
- package/es/Article/ArticleByline.js +89 -56
- package/es/Article/ArticleFootNotes.js +35 -23
- package/es/Article/ArticleParagraph.js +2 -2
- package/es/Article/index.js +3 -5
- package/es/AudioPlayer/AudioPlayer.js +20 -20
- package/es/AudioPlayer/Controls.js +45 -45
- package/es/AudioPlayer/SpeechControl.js +8 -8
- package/es/BlogPost/BlogPost.js +6 -6
- package/es/Breadcrumb/Breadcrumb.js +19 -29
- package/es/Breadcrumb/BreadcrumbItem.js +20 -49
- package/es/Breadcrumb/HomeBreadcrumb.js +36 -82
- package/es/CampaignBlock/CampaignBlock.js +12 -12
- package/es/CodeBlock/CodeBlock.js +2 -2
- package/es/Concept/Concept.js +11 -11
- package/es/ContactBlock/ContactBlock.js +170 -185
- package/es/ContactBlock/index.js +3 -3
- package/es/ContentLoader/index.js +12 -12
- package/es/ContentPlaceholder/ContentPlaceholder.js +3 -3
- package/es/ContentTypeBadge/ContentTypeBadge.js +81 -80
- package/es/ContentTypeBadge/ContentTypeBadgeNew.js +3 -2
- package/es/ContentTypeHero/ContentTypeHero.js +50 -0
- package/es/{Logo → ContentTypeHero}/index.js +2 -3
- package/es/CopyParagraphButton/CopyParagraphButton.js +13 -12
- package/es/Embed/AudioEmbed.js +7 -7
- package/es/Embed/BrightcoveEmbed.js +8 -8
- package/es/Embed/CodeEmbed.js +6 -6
- package/es/Embed/ConceptEmbed.js +13 -13
- package/es/Embed/ConceptListEmbed.js +9 -9
- package/es/Embed/ContentLinkEmbed.js +6 -6
- package/es/Embed/CopyrightEmbed.js +3 -3
- package/es/Embed/EmbedErrorPlaceholder.js +5 -5
- package/es/Embed/ExternalEmbed.js +5 -5
- package/es/Embed/FootnoteEmbed.js +5 -5
- package/es/Embed/GlossEmbed.js +11 -11
- package/es/Embed/H5pEmbed.js +5 -5
- package/es/Embed/IframeEmbed.js +6 -6
- package/es/Embed/ImageEmbed.js +10 -10
- package/es/Embed/InlineTriggerButton.js +2 -2
- package/es/Embed/RelatedContentEmbed.js +5 -5
- package/es/Embed/UnknownEmbed.js +3 -3
- package/es/Embed/UuDisclaimerEmbed.js +6 -6
- package/es/ErrorMessage/ErrorMessage.js +14 -14
- package/es/ErrorMessage/ErrorResourceAccessDenied.js +6 -6
- package/es/FactBox/FactBox.js +5 -5
- package/es/FileList/File.js +3 -3
- package/es/FileList/FileList.js +6 -6
- package/es/FileList/Format.js +6 -6
- package/es/FileList/PdfFile.js +5 -5
- package/es/FrontpageArticle/FrontpageArticle.js +7 -8
- package/es/Gloss/Gloss.js +23 -23
- package/es/Gloss/GlossExample.js +9 -9
- package/es/Grid/Grid.js +4 -4
- package/es/KeyFigure/KeyFigure.js +5 -5
- package/es/Layout/LayoutItem.js +25 -37
- package/es/Layout/OneColumn.js +33 -31
- package/es/Layout/PageContainer.js +21 -30
- package/es/LicenseByline/EmbedByline.js +21 -21
- package/es/LicenseByline/LicenseLink.js +3 -3
- package/es/LinkBlock/LinkBlock.js +8 -8
- package/es/LinkBlock/LinkBlockSection.js +4 -4
- package/es/Messages/MessageBox.js +11 -11
- package/es/Messages/index.js +1 -2
- package/es/ProgrammeCard/ProgrammeCard.js +5 -5
- package/es/RelatedArticleList/RelatedArticleList.js +15 -15
- package/es/ResourceBox/ResourceBox.js +9 -9
- package/es/SnackBar/DefaultSnackbar.js +5 -5
- package/es/SnackBar/SnackbarProvider.js +7 -7
- package/es/TagSelector/TagSelector.js +17 -17
- package/es/TreeStructure/AddFolderButton.js +4 -4
- package/es/TreeStructure/ComboboxButton.js +7 -7
- package/es/TreeStructure/FolderItem.js +13 -13
- package/es/TreeStructure/FolderItems.js +6 -6
- package/es/TreeStructure/TreeStructure.js +9 -9
- package/es/ZendeskButton/ZendeskButton.js +2 -2
- package/es/i18n/index.js +1 -1
- package/es/index.js +5 -12
- package/es/locale/messages-en.js +1 -1
- package/es/locale/messages-nb.js +1 -1
- package/es/locale/messages-nn.js +1 -1
- package/es/locale/messages-se.js +1 -1
- package/es/locale/messages-sma.js +1 -1
- package/es/model/ContentType.js +3 -1
- package/es/styles.css +453 -103
- package/lib/Article/Article.d.ts +9 -30
- package/lib/Article/Article.js +104 -164
- package/lib/Article/ArticleByline.d.ts +1 -3
- package/lib/Article/ArticleByline.js +89 -56
- package/lib/Article/ArticleFootNotes.js +35 -24
- package/lib/Article/ArticleParagraph.js +2 -2
- package/lib/Article/index.d.ts +2 -5
- package/lib/Article/index.js +18 -24
- package/lib/AudioPlayer/AudioPlayer.js +20 -20
- package/lib/AudioPlayer/Controls.js +45 -45
- package/lib/AudioPlayer/SpeechControl.js +8 -8
- package/lib/BlogPost/BlogPost.js +6 -6
- package/lib/Breadcrumb/Breadcrumb.js +21 -29
- package/lib/Breadcrumb/BreadcrumbItem.js +22 -50
- package/lib/Breadcrumb/HomeBreadcrumb.d.ts +1 -2
- package/lib/Breadcrumb/HomeBreadcrumb.js +38 -82
- package/lib/CampaignBlock/CampaignBlock.js +12 -12
- package/lib/CodeBlock/CodeBlock.js +2 -2
- package/lib/Concept/Concept.js +11 -11
- package/lib/ContactBlock/ContactBlock.d.ts +6 -7
- package/lib/ContactBlock/ContactBlock.js +173 -184
- package/lib/ContactBlock/index.d.ts +3 -3
- package/lib/ContactBlock/index.js +13 -11
- package/lib/ContentLoader/index.js +12 -12
- package/lib/ContentPlaceholder/ContentPlaceholder.js +3 -3
- package/lib/ContentTypeBadge/ContentTypeBadge.d.ts +11 -12
- package/lib/ContentTypeBadge/ContentTypeBadge.js +83 -80
- package/lib/ContentTypeBadge/ContentTypeBadgeNew.d.ts +1 -2
- package/lib/ContentTypeBadge/ContentTypeBadgeNew.js +3 -2
- package/lib/ContentTypeHero/ContentTypeHero.d.ts +15 -0
- package/lib/ContentTypeHero/ContentTypeHero.js +57 -0
- package/lib/ContentTypeHero/index.d.ts +9 -0
- package/lib/ContentTypeHero/index.js +12 -0
- package/lib/CopyParagraphButton/CopyParagraphButton.js +13 -12
- package/lib/Embed/AudioEmbed.js +7 -7
- package/lib/Embed/BrightcoveEmbed.js +8 -8
- package/lib/Embed/CodeEmbed.js +6 -6
- package/lib/Embed/ConceptEmbed.js +13 -13
- package/lib/Embed/ConceptListEmbed.js +9 -9
- package/lib/Embed/ContentLinkEmbed.js +6 -6
- package/lib/Embed/CopyrightEmbed.js +3 -3
- package/lib/Embed/EmbedErrorPlaceholder.js +5 -5
- package/lib/Embed/ExternalEmbed.js +5 -5
- package/lib/Embed/FootnoteEmbed.js +5 -5
- package/lib/Embed/GlossEmbed.js +11 -11
- package/lib/Embed/H5pEmbed.js +5 -5
- package/lib/Embed/IframeEmbed.js +6 -6
- package/lib/Embed/ImageEmbed.js +10 -10
- package/lib/Embed/InlineTriggerButton.js +2 -2
- package/lib/Embed/RelatedContentEmbed.js +5 -5
- package/lib/Embed/UnknownEmbed.js +3 -3
- package/lib/Embed/UuDisclaimerEmbed.js +6 -6
- package/lib/ErrorMessage/ErrorMessage.js +14 -14
- package/lib/ErrorMessage/ErrorResourceAccessDenied.js +6 -6
- package/lib/FactBox/FactBox.js +5 -5
- package/lib/FileList/File.js +3 -3
- package/lib/FileList/FileList.js +6 -6
- package/lib/FileList/Format.js +6 -6
- package/lib/FileList/PdfFile.js +5 -5
- package/lib/FrontpageArticle/FrontpageArticle.js +7 -8
- package/lib/Gloss/Gloss.js +23 -23
- package/lib/Gloss/GlossExample.js +9 -9
- package/lib/Grid/Grid.js +4 -4
- package/lib/KeyFigure/KeyFigure.js +5 -5
- package/lib/Layout/LayoutItem.d.ts +3 -7
- package/lib/Layout/LayoutItem.js +27 -38
- package/lib/Layout/OneColumn.d.ts +3 -6
- package/lib/Layout/OneColumn.js +36 -33
- package/lib/Layout/PageContainer.d.ts +3 -6
- package/lib/Layout/PageContainer.js +24 -32
- package/lib/LicenseByline/EmbedByline.js +21 -21
- package/lib/LicenseByline/LicenseLink.js +3 -3
- package/lib/LinkBlock/LinkBlock.js +8 -8
- package/lib/LinkBlock/LinkBlockSection.js +4 -4
- package/lib/Messages/MessageBox.js +11 -11
- package/lib/Messages/index.d.ts +1 -2
- package/lib/Messages/index.js +0 -7
- package/lib/ProgrammeCard/ProgrammeCard.js +5 -5
- package/lib/RelatedArticleList/RelatedArticleList.js +15 -15
- package/lib/ResourceBox/ResourceBox.js +9 -9
- package/lib/SnackBar/DefaultSnackbar.js +5 -5
- package/lib/SnackBar/SnackbarProvider.js +7 -7
- package/lib/TagSelector/TagSelector.js +17 -17
- package/lib/TreeStructure/AddFolderButton.js +4 -4
- package/lib/TreeStructure/ComboboxButton.js +7 -7
- package/lib/TreeStructure/FolderItem.js +13 -13
- package/lib/TreeStructure/FolderItems.js +6 -6
- package/lib/TreeStructure/TreeStructure.js +9 -9
- package/lib/ZendeskButton/ZendeskButton.js +2 -2
- package/lib/i18n/index.d.ts +1 -1
- package/lib/i18n/index.js +6 -0
- package/lib/index.d.ts +8 -15
- package/lib/index.js +30 -139
- package/lib/locale/messages-en.js +1 -1
- package/lib/locale/messages-nb.js +1 -1
- package/lib/locale/messages-nn.js +1 -1
- package/lib/locale/messages-se.js +1 -1
- package/lib/locale/messages-sma.js +1 -1
- package/lib/model/ContentType.d.ts +1 -0
- package/lib/model/ContentType.js +4 -2
- package/lib/styles.css +453 -103
- package/package.json +10 -11
- package/src/Article/Article.tsx +101 -229
- package/src/Article/ArticleByline.tsx +82 -69
- package/src/Article/ArticleFootNotes.tsx +32 -36
- package/src/Article/index.ts +3 -7
- package/src/Breadcrumb/Breadcrumb.tsx +20 -18
- package/src/Breadcrumb/BreadcrumbItem.tsx +36 -59
- package/src/Breadcrumb/HomeBreadcrumb.stories.tsx +0 -12
- package/src/Breadcrumb/HomeBreadcrumb.tsx +33 -46
- package/src/ContactBlock/{Contactblock.stories.tsx → ContactBlock.stories.tsx} +3 -4
- package/src/ContactBlock/ContactBlock.tsx +165 -199
- package/src/ContactBlock/index.ts +3 -3
- package/src/ContentTypeBadge/ContentTypeBadge.tsx +77 -77
- package/src/ContentTypeBadge/ContentTypeBadgeNew.tsx +3 -1
- package/src/ContentTypeHero/ContentTypeHero.stories.tsx +76 -0
- package/src/ContentTypeHero/ContentTypeHero.tsx +55 -0
- package/src/ContentTypeHero/index.ts +10 -0
- package/src/CopyParagraphButton/CopyParagraphButton.tsx +10 -3
- package/src/Embed/AudioEmbed.stories.tsx +6 -8
- package/src/Embed/BrightcoveEmbed.stories.tsx +6 -8
- package/src/Embed/ConceptEmbed.stories.tsx +6 -8
- package/src/Embed/ExternalEmbed.stories.tsx +5 -5
- package/src/Embed/H5pEmbed.stories.tsx +6 -8
- package/src/Embed/IframeEmbed.stories.tsx +6 -8
- package/src/Embed/ImageEmbed.stories.tsx +6 -8
- package/src/Embed/RelatedContentEmbed.stories.tsx +6 -8
- package/src/Embed/UuDisclaimerEmbed.stories.tsx +6 -8
- package/src/FrontpageArticle/FrontpageArticle.tsx +1 -1
- package/src/Layout/LayoutItem.tsx +25 -41
- package/src/Layout/OneColumn.tsx +33 -33
- package/src/Layout/PageContainer.tsx +22 -24
- package/src/Messages/index.ts +1 -2
- package/src/i18n/index.ts +1 -0
- package/src/index.ts +11 -35
- package/src/locale/messages-en.ts +1 -1
- package/src/locale/messages-nb.ts +1 -1
- package/src/locale/messages-nn.ts +1 -1
- package/src/locale/messages-se.ts +1 -1
- package/src/locale/messages-sma.ts +1 -1
- package/src/model/ContentType.ts +2 -0
- package/es/Article/ArticleHeaderWrapper.js +0 -33
- package/es/CreatedBy/CreatedBy.js +0 -73
- package/es/CreatedBy/index.js +0 -10
- package/es/Hero/Hero.js +0 -68
- package/es/Hero/HeroContent.js +0 -16
- package/es/Hero/index.js +0 -10
- package/es/LanguageSelector/LanguageSelector.js +0 -87
- package/es/LanguageSelector/index.js +0 -10
- package/es/Logo/Logo.js +0 -52
- package/es/Logo/SvgLogo.js +0 -54
- package/es/Messages/MessageBanner.js +0 -72
- package/es/Search/ActiveFilterContent.js +0 -40
- package/es/Search/ActiveFilters.js +0 -112
- package/es/Search/ContentTypeResult.js +0 -151
- package/es/Search/ContentTypeResultStyles.js +0 -51
- package/es/Search/IsPathToHighlight.js +0 -12
- package/es/Search/LoadingWrapper.js +0 -31
- package/es/Search/SearchField.js +0 -110
- package/es/Search/SearchFieldForm.js +0 -33
- package/es/Search/SearchResult.js +0 -185
- package/es/Search/SearchResultSleeve.js +0 -229
- package/es/Search/index.js +0 -12
- package/lib/Article/ArticleHeaderWrapper.d.ts +0 -14
- package/lib/Article/ArticleHeaderWrapper.js +0 -40
- 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/lib/Hero/Hero.d.ts +0 -25
- package/lib/Hero/Hero.js +0 -83
- package/lib/Hero/HeroContent.d.ts +0 -12
- package/lib/Hero/HeroContent.js +0 -23
- package/lib/Hero/index.d.ts +0 -10
- package/lib/Hero/index.js +0 -61
- package/lib/LanguageSelector/LanguageSelector.d.ts +0 -15
- package/lib/LanguageSelector/LanguageSelector.js +0 -92
- package/lib/LanguageSelector/index.d.ts +0 -9
- package/lib/LanguageSelector/index.js +0 -13
- package/lib/Logo/Logo.d.ts +0 -20
- package/lib/Logo/Logo.js +0 -58
- package/lib/Logo/SvgLogo.d.ts +0 -14
- package/lib/Logo/SvgLogo.js +0 -62
- package/lib/Logo/index.d.ts +0 -9
- package/lib/Logo/index.js +0 -16
- package/lib/Messages/MessageBanner.d.ts +0 -16
- package/lib/Messages/MessageBanner.js +0 -77
- package/lib/Search/ActiveFilterContent.d.ts +0 -23
- package/lib/Search/ActiveFilterContent.js +0 -47
- package/lib/Search/ActiveFilters.d.ts +0 -19
- package/lib/Search/ActiveFilters.js +0 -119
- package/lib/Search/ContentTypeResult.d.ts +0 -29
- package/lib/Search/ContentTypeResult.js +0 -159
- package/lib/Search/ContentTypeResultStyles.d.ts +0 -45
- package/lib/Search/ContentTypeResultStyles.js +0 -58
- package/lib/Search/IsPathToHighlight.d.ts +0 -8
- package/lib/Search/IsPathToHighlight.js +0 -19
- package/lib/Search/LoadingWrapper.d.ts +0 -12
- package/lib/Search/LoadingWrapper.js +0 -38
- package/lib/Search/SearchField.d.ts +0 -25
- package/lib/Search/SearchField.js +0 -117
- package/lib/Search/SearchFieldForm.d.ts +0 -15
- package/lib/Search/SearchFieldForm.js +0 -41
- package/lib/Search/SearchResult.d.ts +0 -43
- package/lib/Search/SearchResult.js +0 -194
- package/lib/Search/SearchResultSleeve.d.ts +0 -25
- package/lib/Search/SearchResultSleeve.js +0 -237
- package/lib/Search/index.d.ts +0 -11
- package/lib/Search/index.js +0 -33
- package/src/Article/ArticleHeaderWrapper.tsx +0 -38
- package/src/CreatedBy/CreatedBy.stories.tsx +0 -36
- package/src/CreatedBy/CreatedBy.tsx +0 -63
- package/src/CreatedBy/index.ts +0 -11
- package/src/Hero/Hero.stories.tsx +0 -35
- package/src/Hero/Hero.tsx +0 -129
- package/src/Hero/HeroContent.tsx +0 -43
- package/src/Hero/index.ts +0 -21
- package/src/LanguageSelector/LanguageSelector.stories.tsx +0 -44
- package/src/LanguageSelector/LanguageSelector.tsx +0 -101
- package/src/LanguageSelector/index.ts +0 -11
- package/src/Logo/Logo.stories.tsx +0 -47
- package/src/Logo/Logo.tsx +0 -47
- package/src/Logo/SvgLogo.tsx +0 -48
- package/src/Logo/index.ts +0 -11
- package/src/Messages/MessageBanner.stories.tsx +0 -31
- package/src/Messages/MessageBanner.tsx +0 -67
- package/src/Search/ActiveFilterContent.tsx +0 -64
- package/src/Search/ActiveFilters.tsx +0 -145
- package/src/Search/ContentTypeResult.tsx +0 -190
- package/src/Search/ContentTypeResultStyles.tsx +0 -172
- package/src/Search/IsPathToHighlight.ts +0 -12
- package/src/Search/LoadingWrapper.tsx +0 -44
- package/src/Search/SearchField.tsx +0 -175
- package/src/Search/SearchFieldForm.tsx +0 -64
- package/src/Search/SearchResult.tsx +0 -368
- package/src/Search/SearchResultSleeve.tsx +0 -367
- package/src/Search/__tests__/Highlight-test.ts +0 -66
- package/src/Search/index.ts +0 -14
|
@@ -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>
|
package/src/Article/index.ts
CHANGED
|
@@ -6,14 +6,10 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import Article, { ArticleTitle, ArticleIntroduction, ArticleWrapper } from "./Article";
|
|
10
9
|
import ArticleByline from "./ArticleByline";
|
|
11
10
|
import ArticleFootNotes from "./ArticleFootNotes";
|
|
12
|
-
import ArticleHeaderWrapper from "./ArticleHeaderWrapper";
|
|
13
11
|
|
|
14
|
-
export {
|
|
15
|
-
export { ArticleParagraph } from "./ArticleParagraph";
|
|
16
|
-
|
|
17
|
-
export type { ArticleModifier } from "./Article";
|
|
12
|
+
export { Article, ArticleContent, ArticleWrapper, ArticleHeader, ArticleFooter } from "./Article";
|
|
18
13
|
|
|
19
|
-
export
|
|
14
|
+
export { ArticleByline, ArticleFootNotes };
|
|
15
|
+
export { ArticleParagraph } from "./ArticleParagraph";
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { ReactNode
|
|
9
|
+
import { ReactNode } from "react";
|
|
10
10
|
import { useTranslation } from "react-i18next";
|
|
11
|
-
import styled from "@
|
|
11
|
+
import { styled } from "@ndla/styled-system/jsx";
|
|
12
12
|
import BreadcrumbItem, { IndexedBreadcrumbItem, SimpleBreadcrumbItem } from "./BreadcrumbItem";
|
|
13
13
|
|
|
14
14
|
interface Props {
|
|
@@ -19,26 +19,28 @@ interface Props {
|
|
|
19
19
|
renderSeparator?: (item: IndexedBreadcrumbItem, totalCount: number) => ReactNode;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
22
|
+
const StyledList = styled("ol", {
|
|
23
|
+
base: {
|
|
24
|
+
display: "flex",
|
|
25
|
+
flexWrap: "wrap",
|
|
26
|
+
alignItems: "center",
|
|
27
|
+
listStyle: "none",
|
|
28
|
+
gap: "xsmall",
|
|
29
|
+
mobileDown: {
|
|
30
|
+
alignItems: "flex-start",
|
|
31
|
+
justifyContent: "center",
|
|
32
|
+
flexDirection: "column",
|
|
33
|
+
gap: "xxsmall",
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
});
|
|
31
37
|
|
|
32
38
|
const Breadcrumb = ({ items, renderItem, renderSeparator, collapseFirst, collapseLast = true }: Props) => {
|
|
33
39
|
const { t } = useTranslation();
|
|
34
|
-
const olRef = useRef<any>();
|
|
35
|
-
const containerRef = useRef<HTMLDivElement>(null);
|
|
36
|
-
// No idiomatic way of dealing with sets of refs yet
|
|
37
|
-
// See: https://github.com/facebook/react/issues/14072#issuecomment-446777406
|
|
38
40
|
|
|
39
41
|
return (
|
|
40
|
-
<
|
|
41
|
-
<StyledList
|
|
42
|
+
<nav aria-label={t("breadcrumb.breadcrumb")}>
|
|
43
|
+
<StyledList>
|
|
42
44
|
{items.map((item, index) => (
|
|
43
45
|
<BreadcrumbItem
|
|
44
46
|
renderItem={renderItem}
|
|
@@ -60,7 +62,7 @@ const Breadcrumb = ({ items, renderItem, renderSeparator, collapseFirst, collaps
|
|
|
60
62
|
/>
|
|
61
63
|
))}
|
|
62
64
|
</StyledList>
|
|
63
|
-
</
|
|
65
|
+
</nav>
|
|
64
66
|
);
|
|
65
67
|
};
|
|
66
68
|
|
|
@@ -7,10 +7,9 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { useRef, useImperativeHandle, ReactNode, forwardRef } from "react";
|
|
10
|
-
import styled from "@emotion/styled";
|
|
11
|
-
import { mq, spacing, breakpoints } from "@ndla/core";
|
|
12
10
|
import { ChevronRight } from "@ndla/icons/common";
|
|
13
11
|
import { SafeLink } from "@ndla/safelink";
|
|
12
|
+
import { styled } from "@ndla/styled-system/jsx";
|
|
14
13
|
|
|
15
14
|
export interface SimpleBreadcrumbItem {
|
|
16
15
|
to: string | Partial<Location>;
|
|
@@ -26,35 +25,17 @@ export interface BreadcrumbRenderProps {
|
|
|
26
25
|
totalCount: number;
|
|
27
26
|
}
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
${mq.range({ until: breakpoints.tablet })} {
|
|
41
|
-
display: block;
|
|
42
|
-
}
|
|
43
|
-
`;
|
|
44
|
-
|
|
45
|
-
const CollapseContainer = styled.div`
|
|
46
|
-
display: inline-block;
|
|
47
|
-
color: inherit;
|
|
48
|
-
`;
|
|
49
|
-
|
|
50
|
-
const StyledChevron = styled(ChevronRight)`
|
|
51
|
-
margin: ${spacing.xxsmall};
|
|
52
|
-
color: inherit;
|
|
53
|
-
`;
|
|
54
|
-
|
|
55
|
-
const StyledSafeLink = styled(SafeLink)`
|
|
56
|
-
color: inherit;
|
|
57
|
-
`;
|
|
28
|
+
const StyledListItem = styled("li", {
|
|
29
|
+
base: {
|
|
30
|
+
display: "flex",
|
|
31
|
+
color: "inherit",
|
|
32
|
+
gap: "4xsmall",
|
|
33
|
+
alignItems: "flex-end",
|
|
34
|
+
tabletDown: {
|
|
35
|
+
display: "block",
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
});
|
|
58
39
|
|
|
59
40
|
interface Props {
|
|
60
41
|
item: IndexedBreadcrumbItem;
|
|
@@ -64,35 +45,31 @@ interface Props {
|
|
|
64
45
|
renderSeparator?: (item: IndexedBreadcrumbItem, totalCount: number) => ReactNode;
|
|
65
46
|
}
|
|
66
47
|
|
|
67
|
-
const BreadcrumbItem = forwardRef<any, Props>(
|
|
68
|
-
|
|
69
|
-
const liRef = useRef<any>();
|
|
48
|
+
const BreadcrumbItem = forwardRef<any, Props>(({ renderItem, renderSeparator, item, totalCount }, ref) => {
|
|
49
|
+
const liRef = useRef<any>();
|
|
70
50
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
51
|
+
useImperativeHandle(ref, () => ({
|
|
52
|
+
setMaxWidth: (maxWidth: number) => {
|
|
53
|
+
liRef.current.children[0].style.maxWidth = maxWidth;
|
|
54
|
+
},
|
|
55
|
+
}));
|
|
76
56
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
);
|
|
95
|
-
},
|
|
96
|
-
);
|
|
57
|
+
const { to, name, index } = item;
|
|
58
|
+
const isLast = index === totalCount - 1;
|
|
59
|
+
return (
|
|
60
|
+
<StyledListItem ref={liRef} aria-current={isLast ? "page" : undefined}>
|
|
61
|
+
{renderItem ? (
|
|
62
|
+
renderItem(item, totalCount)
|
|
63
|
+
) : isLast ? (
|
|
64
|
+
<span>{name}</span>
|
|
65
|
+
) : (
|
|
66
|
+
<SafeLink to={to}>
|
|
67
|
+
<span>{name}</span>
|
|
68
|
+
</SafeLink>
|
|
69
|
+
)}
|
|
70
|
+
{renderSeparator ? renderSeparator(item, totalCount) : !isLast && <ChevronRight />}
|
|
71
|
+
</StyledListItem>
|
|
72
|
+
);
|
|
73
|
+
});
|
|
97
74
|
|
|
98
75
|
export default BreadcrumbItem;
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { Meta, StoryObj } from "@storybook/react";
|
|
10
|
-
import { colors } from "@ndla/core";
|
|
11
10
|
import HomeBreadcrumb from "./HomeBreadcrumb";
|
|
12
11
|
|
|
13
12
|
const items = [
|
|
@@ -42,14 +41,3 @@ export default {
|
|
|
42
41
|
} as Meta<typeof HomeBreadcrumb>;
|
|
43
42
|
|
|
44
43
|
export const Default: StoryObj<typeof HomeBreadcrumb> = {};
|
|
45
|
-
|
|
46
|
-
export const Light: StoryObj<typeof HomeBreadcrumb> = {
|
|
47
|
-
args: { light: true },
|
|
48
|
-
decorators: [
|
|
49
|
-
(Story) => (
|
|
50
|
-
<div style={{ backgroundColor: colors.brand.primary }}>
|
|
51
|
-
<Story />
|
|
52
|
-
</div>
|
|
53
|
-
),
|
|
54
|
-
],
|
|
55
|
-
};
|
|
@@ -6,69 +6,56 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import styled from "@emotion/styled";
|
|
10
|
-
import { breakpoints, colors, fonts, mq, spacing } from "@ndla/core";
|
|
11
9
|
import { ChevronRight, Home } from "@ndla/icons/common";
|
|
12
10
|
import { SafeLink } from "@ndla/safelink";
|
|
11
|
+
import { styled } from "@ndla/styled-system/jsx";
|
|
13
12
|
import Breadcrumb from "./Breadcrumb";
|
|
14
13
|
import { IndexedBreadcrumbItem, SimpleBreadcrumbItem } from "./BreadcrumbItem";
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
const StyledSafeLink = styled(SafeLink, {
|
|
16
|
+
base: {
|
|
17
|
+
color: "inherit",
|
|
18
|
+
textDecoration: "underline",
|
|
19
|
+
_hover: {
|
|
20
|
+
textDecoration: "none",
|
|
21
|
+
},
|
|
22
|
+
_focusVisible: {
|
|
23
|
+
textDecoration: "none",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
});
|
|
19
27
|
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
`;
|
|
28
|
+
const StyledChevronRight = styled(ChevronRight, {
|
|
29
|
+
base: {
|
|
30
|
+
tabletDown: {
|
|
31
|
+
display: "none",
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
});
|
|
29
35
|
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
width: 20px;
|
|
36
|
-
height: 20px;
|
|
37
|
-
color: ${({ light }) => (light ? colors.white : colors.text.primary)};
|
|
38
|
-
`;
|
|
39
|
-
const StyledRightChevron = styled(ChevronRight)<ThemeProps>`
|
|
40
|
-
color: ${({ light }) => (light ? colors.white : colors.text.primary)};
|
|
41
|
-
margin: ${spacing.xxsmall};
|
|
42
|
-
`;
|
|
43
|
-
const StyledSpan = styled.span<ThemeProps>`
|
|
44
|
-
color: ${({ light }) => (light ? colors.white : colors.text.primary)};
|
|
45
|
-
`;
|
|
46
|
-
const StyledSafeLink = styled(SafeLink)<ThemeProps>`
|
|
47
|
-
color: ${({ light }) => (light ? colors.white : colors.text.primary)};
|
|
48
|
-
`;
|
|
36
|
+
const IconSafeLink = styled(SafeLink, {
|
|
37
|
+
base: {
|
|
38
|
+
color: "inherit",
|
|
39
|
+
},
|
|
40
|
+
});
|
|
49
41
|
|
|
50
42
|
interface Props {
|
|
51
43
|
items: SimpleBreadcrumbItem[];
|
|
52
|
-
light?: boolean;
|
|
53
44
|
}
|
|
54
45
|
|
|
55
|
-
const HomeBreadcrumb = ({ items
|
|
46
|
+
const HomeBreadcrumb = ({ items }: Props) => {
|
|
56
47
|
const renderItem = (item: IndexedBreadcrumbItem, totalCount: number) => {
|
|
57
48
|
if (item.index === totalCount - 1) {
|
|
58
|
-
return <
|
|
49
|
+
return <span>{item.name}</span>;
|
|
59
50
|
}
|
|
60
51
|
if (item.index === 0 && typeof item.name === "string") {
|
|
61
52
|
return (
|
|
62
|
-
<
|
|
63
|
-
<
|
|
64
|
-
</
|
|
53
|
+
<IconSafeLink aria-label={item.name} to={item.to}>
|
|
54
|
+
<Home title={item.name} />
|
|
55
|
+
</IconSafeLink>
|
|
65
56
|
);
|
|
66
57
|
}
|
|
67
|
-
return
|
|
68
|
-
<StyledSafeLink light={light} to={item.to}>
|
|
69
|
-
{item.name}
|
|
70
|
-
</StyledSafeLink>
|
|
71
|
-
);
|
|
58
|
+
return <StyledSafeLink to={item.to}>{item.name}</StyledSafeLink>;
|
|
72
59
|
};
|
|
73
60
|
|
|
74
61
|
const renderSeparator = (item: IndexedBreadcrumbItem, totalCount: number) => {
|
|
@@ -76,9 +63,9 @@ const HomeBreadcrumb = ({ items, light }: Props) => {
|
|
|
76
63
|
return null;
|
|
77
64
|
}
|
|
78
65
|
if (item.index === 0) {
|
|
79
|
-
return <
|
|
66
|
+
return <StyledChevronRight />;
|
|
80
67
|
}
|
|
81
|
-
return <
|
|
68
|
+
return <ChevronRight />;
|
|
82
69
|
};
|
|
83
70
|
|
|
84
71
|
return <Breadcrumb items={items} renderItem={renderItem} renderSeparator={renderSeparator} />;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 2024-present, NDLA.
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the GPLv3 license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { Meta, StoryFn } from "@storybook/react";
|
|
10
|
-
import ContactBlock from "./ContactBlock";
|
|
10
|
+
import { ContactBlock } from "./ContactBlock";
|
|
11
11
|
|
|
12
12
|
export default {
|
|
13
13
|
title: "Components/Contact block",
|
|
@@ -76,8 +76,7 @@ export default {
|
|
|
76
76
|
"Sigurd har variert ledererfaring fra utdanningssektoren, både fra videregående skole, nasjonalt senter og fra universitets/høgskolesektoren. Ansvarsområdene dekker bl.a. utdanning/opplæring/studiekvalitet, økonomi, HR, stratgi og IT-utvikling/-drift.",
|
|
77
77
|
name: "Sigurd Trageton",
|
|
78
78
|
email: "sigurd@ndla.no",
|
|
79
|
-
|
|
80
|
-
blob: "pointy",
|
|
79
|
+
backgroundColor: "strong",
|
|
81
80
|
},
|
|
82
81
|
} as Meta<typeof ContactBlock>;
|
|
83
82
|
|