@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.
- package/dist/panda.buildinfo.json +120 -1
- package/dist/styles.css +511 -0
- package/es/Article/ArticleParagraph.js +11 -13
- package/es/CampaignBlock/CampaignBlock.js +103 -68
- package/es/Concept/Concept.js +69 -0
- package/es/ContentTypeBadge/ContentTypeBadgeNew.js +48 -0
- package/es/Embed/AudioEmbed.js +1 -2
- package/es/Embed/BrightcoveEmbed.js +13 -24
- package/es/Embed/ConceptEmbed.js +57 -301
- package/es/Embed/ConceptListEmbed.js +18 -24
- package/es/Embed/ContentLinkEmbed.js +10 -10
- package/es/Embed/CopyrightEmbed.js +4 -21
- package/es/Embed/ExternalEmbed.js +10 -18
- package/es/Embed/FootnoteEmbed.js +11 -8
- package/es/Embed/GlossEmbed.js +68 -0
- package/es/Embed/H5pEmbed.js +19 -19
- package/es/Embed/IframeEmbed.js +9 -6
- package/es/Embed/InlineTriggerButton.js +70 -0
- package/es/Embed/UnknownEmbed.js +9 -9
- package/es/Embed/UuDisclaimerEmbed.js +14 -25
- package/es/Embed/index.js +1 -3
- package/es/ErrorMessage/ErrorMessage.js +41 -22
- package/es/ErrorMessage/ErrorResourceAccessDenied.js +8 -6
- package/es/FactBox/FactBox.js +118 -47
- package/es/FileList/PdfFile.js +23 -5
- package/es/Gloss/Gloss.js +116 -86
- package/es/Gloss/GlossExample.js +49 -51
- package/es/LinkBlock/LinkBlock.js +61 -33
- package/es/LinkBlock/LinkBlockSection.js +9 -6
- package/es/Logo/Logo.js +1 -30
- package/es/RelatedArticleList/RelatedArticleList.js +70 -87
- package/es/ResourceBox/ResourceBox.js +65 -37
- package/es/TagSelector/TagSelector.js +124 -131
- package/es/i18n/index.js +2 -1
- package/es/i18n/useComponentTranslations.js +83 -0
- package/es/index.js +4 -11
- package/es/locale/messages-en.js +30 -4
- package/es/locale/messages-nb.js +30 -4
- package/es/locale/messages-nn.js +30 -4
- package/es/locale/messages-se.js +30 -4
- package/es/locale/messages-sma.js +30 -4
- package/es/model/ContentType.js +3 -0
- package/es/styles.css +511 -0
- package/lib/Article/ArticleParagraph.js +12 -14
- package/lib/CampaignBlock/CampaignBlock.d.ts +2 -2
- package/lib/CampaignBlock/CampaignBlock.js +106 -68
- package/lib/Concept/Concept.d.ts +18 -0
- package/lib/Concept/Concept.js +75 -0
- package/lib/ContentTypeBadge/ContentTypeBadgeNew.d.ts +17 -0
- package/lib/ContentTypeBadge/ContentTypeBadgeNew.js +56 -0
- package/lib/Embed/AudioEmbed.js +2 -3
- package/lib/Embed/BrightcoveEmbed.d.ts +1 -2
- package/lib/Embed/BrightcoveEmbed.js +16 -25
- package/lib/Embed/ConceptEmbed.d.ts +15 -21
- package/lib/Embed/ConceptEmbed.js +58 -301
- package/lib/Embed/ConceptListEmbed.js +21 -26
- package/lib/Embed/ContentLinkEmbed.js +10 -11
- package/lib/Embed/CopyrightEmbed.js +6 -22
- package/lib/Embed/ExternalEmbed.d.ts +1 -2
- package/lib/Embed/ExternalEmbed.js +13 -19
- package/lib/Embed/FootnoteEmbed.js +11 -9
- package/lib/Embed/GlossEmbed.d.ts +13 -0
- package/lib/Embed/GlossEmbed.js +76 -0
- package/lib/Embed/H5pEmbed.d.ts +1 -2
- package/lib/Embed/H5pEmbed.js +21 -19
- package/lib/Embed/IframeEmbed.d.ts +1 -2
- package/lib/Embed/IframeEmbed.js +11 -8
- package/lib/Embed/InlineTriggerButton.d.ts +11 -0
- package/lib/Embed/InlineTriggerButton.js +76 -0
- package/lib/Embed/UnknownEmbed.js +9 -10
- package/lib/Embed/UuDisclaimerEmbed.js +16 -26
- package/lib/Embed/index.d.ts +2 -3
- package/lib/Embed/index.js +2 -9
- package/lib/ErrorMessage/ErrorMessage.js +40 -23
- package/lib/ErrorMessage/ErrorResourceAccessDenied.js +7 -6
- package/lib/FactBox/FactBox.d.ts +0 -1
- package/lib/FactBox/FactBox.js +119 -46
- package/lib/FileList/PdfFile.js +23 -5
- package/lib/Gloss/Gloss.d.ts +10 -2
- package/lib/Gloss/Gloss.js +116 -85
- package/lib/Gloss/GlossExample.d.ts +3 -5
- package/lib/Gloss/GlossExample.js +49 -52
- package/lib/LinkBlock/LinkBlock.js +62 -34
- package/lib/LinkBlock/LinkBlockSection.js +9 -7
- package/lib/Logo/Logo.d.ts +1 -3
- package/lib/Logo/Logo.js +2 -30
- package/lib/RelatedArticleList/RelatedArticleList.d.ts +4 -4
- package/lib/RelatedArticleList/RelatedArticleList.js +74 -90
- package/lib/ResourceBox/ResourceBox.js +64 -37
- package/lib/TagSelector/TagSelector.d.ts +27 -12
- package/lib/TagSelector/TagSelector.js +126 -131
- package/lib/i18n/index.d.ts +1 -0
- package/lib/i18n/index.js +20 -1
- package/lib/i18n/useComponentTranslations.d.ts +14 -0
- package/lib/i18n/useComponentTranslations.js +93 -0
- package/lib/index.d.ts +5 -14
- package/lib/index.js +70 -89
- package/lib/locale/messages-en.d.ts +26 -0
- package/lib/locale/messages-en.js +30 -4
- package/lib/locale/messages-nb.d.ts +26 -0
- package/lib/locale/messages-nb.js +30 -4
- package/lib/locale/messages-nn.d.ts +26 -0
- package/lib/locale/messages-nn.js +30 -4
- package/lib/locale/messages-se.d.ts +26 -0
- package/lib/locale/messages-se.js +30 -4
- package/lib/locale/messages-sma.d.ts +26 -0
- package/lib/locale/messages-sma.js +30 -4
- package/lib/model/ContentType.d.ts +3 -0
- package/lib/model/ContentType.js +4 -1
- package/lib/styles.css +511 -0
- package/package.json +11 -13
- package/src/Article/ArticleParagraph.tsx +11 -9
- package/src/CampaignBlock/CampaignBlock.tsx +92 -55
- package/src/Concept/Concept.stories.tsx +142 -0
- package/src/Concept/Concept.tsx +73 -0
- package/src/ContentTypeBadge/ContentTypeBadgeNew.stories.tsx +70 -0
- package/src/ContentTypeBadge/ContentTypeBadgeNew.tsx +69 -0
- package/src/Embed/AudioEmbed.tsx +2 -2
- package/src/Embed/BrightcoveEmbed.stories.tsx +0 -3
- package/src/Embed/BrightcoveEmbed.tsx +17 -19
- package/src/Embed/ConceptEmbed.stories.tsx +1 -105
- package/src/Embed/ConceptEmbed.tsx +60 -385
- package/src/Embed/ConceptListEmbed.tsx +20 -19
- package/src/Embed/ContentLinkEmbed.tsx +8 -10
- package/src/Embed/CopyrightEmbed.tsx +1 -11
- package/src/Embed/ExternalEmbed.tsx +14 -17
- package/src/Embed/FootnoteEmbed.stories.tsx +2 -5
- package/src/Embed/FootnoteEmbed.tsx +13 -16
- package/src/Embed/GlossEmbed.stories.tsx +140 -0
- package/src/Embed/GlossEmbed.tsx +64 -0
- package/src/Embed/H5pEmbed.tsx +22 -16
- package/src/Embed/IframeEmbed.tsx +12 -6
- package/src/Embed/InlineTriggerButton.tsx +72 -0
- package/src/Embed/UnknownEmbed.tsx +6 -7
- package/src/Embed/UuDisclaimerEmbed.stories.tsx +4 -4
- package/src/Embed/UuDisclaimerEmbed.tsx +17 -25
- package/src/Embed/index.ts +2 -3
- package/src/ErrorMessage/ErrorMessage.tsx +40 -29
- package/src/ErrorMessage/ErrorResourceAccessDenied.tsx +8 -6
- package/src/FactBox/FactBox.tsx +115 -115
- package/src/FactBox/Factbox.stories.tsx +43 -27
- package/src/FileList/FileList.stories.tsx +6 -1
- package/src/FileList/PdfFile.tsx +22 -5
- package/src/Gloss/Gloss.stories.tsx +107 -1
- package/src/Gloss/Gloss.tsx +143 -156
- package/src/Gloss/GlossExample.tsx +51 -77
- package/src/LinkBlock/LinkBlock.stories.tsx +8 -10
- package/src/LinkBlock/LinkBlock.tsx +54 -59
- package/src/LinkBlock/LinkBlockSection.tsx +9 -12
- package/src/Logo/Logo.stories.tsx +0 -1
- package/src/Logo/Logo.tsx +2 -30
- package/src/RelatedArticleList/RelatedArticleList.tsx +69 -88
- package/src/ResourceBox/ResourceBox.tsx +63 -59
- package/src/TagSelector/TagSelector.stories.tsx +92 -68
- package/src/TagSelector/TagSelector.tsx +161 -126
- package/src/i18n/index.ts +5 -0
- package/src/i18n/useComponentTranslations.ts +72 -0
- package/src/index.ts +23 -18
- package/src/locale/messages-en.ts +28 -2
- package/src/locale/messages-nb.ts +28 -2
- package/src/locale/messages-nn.ts +28 -2
- package/src/locale/messages-se.ts +28 -2
- package/src/locale/messages-sma.ts +28 -2
- package/src/model/ContentType.ts +3 -0
- package/es/DefinitionList/DefinitionDescription.js +0 -28
- package/es/DefinitionList/DefinitionTerm.js +0 -28
- package/es/DefinitionList/index.js +0 -10
- package/es/Embed/conceptComponents.js +0 -155
- package/es/ExpandableBox/ExpandableBox.js +0 -29
- package/es/ExpandableBox/index.js +0 -9
- package/es/Figure/Figure.js +0 -73
- package/es/Figure/index.js +0 -9
- package/es/FramedContent/FramedContent.js +0 -28
- package/es/FramedContent/index.js +0 -10
- package/es/Image/Image.js +0 -99
- package/es/Image/ImageLink.js +0 -39
- package/es/Image/index.js +0 -12
- package/es/LetterFilter/LetterFilter.js +0 -54
- package/es/LetterFilter/alphabet.js +0 -9
- package/es/LetterFilter/index.js +0 -10
- package/es/Notion/Notion.js +0 -76
- package/es/Notion/NotionImage.js +0 -46
- package/es/Notion/index.js +0 -9
- package/es/Table/Table.js +0 -141
- package/es/Table/index.js +0 -11
- package/es/TagSelector/Control.js +0 -28
- package/es/TagSelector/DropdownIndicator.js +0 -60
- package/es/TagSelector/Input.js +0 -22
- package/es/TagSelector/Menu.js +0 -27
- package/es/TagSelector/MenuList.js +0 -28
- package/es/TagSelector/Option.js +0 -60
- package/es/TagSelector/SelectContainer.js +0 -27
- package/es/TagSelector/ValueButton.js +0 -53
- package/es/TagSelector/ariaMessages.js +0 -94
- package/es/TagSelector/index.js +0 -10
- package/es/TagSelector/types.js +0 -1
- package/lib/DefinitionList/DefinitionDescription.d.ts +0 -10
- package/lib/DefinitionList/DefinitionDescription.js +0 -35
- package/lib/DefinitionList/DefinitionTerm.d.ts +0 -10
- package/lib/DefinitionList/DefinitionTerm.js +0 -35
- package/lib/DefinitionList/index.d.ts +0 -9
- package/lib/DefinitionList/index.js +0 -20
- package/lib/Embed/conceptComponents.d.ts +0 -40
- package/lib/Embed/conceptComponents.js +0 -163
- package/lib/ExpandableBox/ExpandableBox.d.ts +0 -15
- package/lib/ExpandableBox/ExpandableBox.js +0 -37
- package/lib/ExpandableBox/index.d.ts +0 -8
- package/lib/ExpandableBox/index.js +0 -18
- package/lib/Figure/Figure.d.ts +0 -16
- package/lib/Figure/Figure.js +0 -81
- package/lib/Figure/index.d.ts +0 -9
- package/lib/Figure/index.js +0 -13
- package/lib/FramedContent/FramedContent.d.ts +0 -12
- package/lib/FramedContent/FramedContent.js +0 -35
- package/lib/FramedContent/index.d.ts +0 -9
- package/lib/FramedContent/index.js +0 -16
- package/lib/Image/Image.d.ts +0 -38
- package/lib/Image/Image.js +0 -105
- package/lib/Image/ImageLink.d.ts +0 -18
- package/lib/Image/ImageLink.js +0 -44
- package/lib/Image/index.d.ts +0 -12
- package/lib/Image/index.js +0 -30
- package/lib/LetterFilter/LetterFilter.d.ts +0 -14
- package/lib/LetterFilter/LetterFilter.js +0 -61
- package/lib/LetterFilter/alphabet.d.ts +0 -8
- package/lib/LetterFilter/alphabet.js +0 -15
- package/lib/LetterFilter/index.d.ts +0 -9
- package/lib/LetterFilter/index.js +0 -16
- package/lib/Notion/Notion.d.ts +0 -20
- package/lib/Notion/Notion.js +0 -82
- package/lib/Notion/NotionImage.d.ts +0 -13
- package/lib/Notion/NotionImage.js +0 -54
- package/lib/Notion/index.d.ts +0 -8
- package/lib/Notion/index.js +0 -13
- package/lib/Table/Table.d.ts +0 -19
- package/lib/Table/Table.js +0 -145
- package/lib/Table/index.d.ts +0 -10
- package/lib/Table/index.js +0 -23
- package/lib/TagSelector/Control.d.ts +0 -11
- package/lib/TagSelector/Control.js +0 -35
- package/lib/TagSelector/DropdownIndicator.d.ts +0 -11
- package/lib/TagSelector/DropdownIndicator.js +0 -64
- package/lib/TagSelector/Input.d.ts +0 -12
- package/lib/TagSelector/Input.js +0 -29
- package/lib/TagSelector/Menu.d.ts +0 -12
- package/lib/TagSelector/Menu.js +0 -34
- package/lib/TagSelector/MenuList.d.ts +0 -16
- package/lib/TagSelector/MenuList.js +0 -35
- package/lib/TagSelector/Option.d.ts +0 -12
- package/lib/TagSelector/Option.js +0 -67
- package/lib/TagSelector/SelectContainer.d.ts +0 -11
- package/lib/TagSelector/SelectContainer.js +0 -34
- package/lib/TagSelector/ValueButton.d.ts +0 -20
- package/lib/TagSelector/ValueButton.js +0 -60
- package/lib/TagSelector/ariaMessages.d.ts +0 -16
- package/lib/TagSelector/ariaMessages.js +0 -101
- package/lib/TagSelector/index.d.ts +0 -11
- package/lib/TagSelector/index.js +0 -13
- package/lib/TagSelector/types.d.ts +0 -11
- package/lib/TagSelector/types.js +0 -5
- package/src/DefinitionList/DefinitionDescription.tsx +0 -26
- package/src/DefinitionList/DefinitionTerm.tsx +0 -26
- package/src/DefinitionList/index.tsx +0 -10
- package/src/Embed/conceptComponents.tsx +0 -293
- package/src/ExpandableBox/ExpandableBox.stories.tsx +0 -41
- package/src/ExpandableBox/ExpandableBox.tsx +0 -23
- package/src/ExpandableBox/index.ts +0 -9
- package/src/Figure/Figure.tsx +0 -167
- package/src/Figure/index.ts +0 -11
- package/src/FramedContent/FramedContent.stories.tsx +0 -152
- package/src/FramedContent/FramedContent.tsx +0 -26
- package/src/FramedContent/index.ts +0 -10
- package/src/Image/Image.stories.tsx +0 -61
- package/src/Image/Image.tsx +0 -147
- package/src/Image/ImageLink.tsx +0 -37
- package/src/Image/index.ts +0 -14
- package/src/LetterFilter/LetterFilter.stories.tsx +0 -29
- package/src/LetterFilter/LetterFilter.tsx +0 -78
- package/src/LetterFilter/alphabet.ts +0 -39
- package/src/LetterFilter/index.ts +0 -11
- package/src/Notion/Notion.tsx +0 -96
- package/src/Notion/NotionImage.tsx +0 -64
- package/src/Notion/index.ts +0 -9
- package/src/Table/Table.stories.tsx +0 -738
- package/src/Table/Table.tsx +0 -284
- package/src/Table/index.ts +0 -12
- package/src/TagSelector/Control.tsx +0 -34
- package/src/TagSelector/DropdownIndicator.tsx +0 -55
- package/src/TagSelector/Input.tsx +0 -31
- package/src/TagSelector/Menu.tsx +0 -38
- package/src/TagSelector/MenuList.tsx +0 -30
- package/src/TagSelector/Option.tsx +0 -58
- package/src/TagSelector/SelectContainer.tsx +0 -31
- package/src/TagSelector/ValueButton.tsx +0 -47
- package/src/TagSelector/ariaMessages.ts +0 -96
- package/src/TagSelector/index.ts +0 -14
- package/src/TagSelector/types.ts +0 -12
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { Meta, StoryObj } from "@storybook/react";
|
|
10
|
+
import { ExpandableBox, ExpandableBoxSummary, FramedContent } from "@ndla/primitives";
|
|
10
11
|
import { UuDisclaimerEmbedData } from "@ndla/types-embed";
|
|
11
12
|
import H5pEmbed from "./H5pEmbed";
|
|
12
13
|
import IframeEmbed from "./IframeEmbed";
|
|
@@ -14,7 +15,6 @@ import UuDisclaimerEmbed from "./UuDisclaimerEmbed";
|
|
|
14
15
|
import { ArticleWrapper } from "../Article";
|
|
15
16
|
import CopyParagraphButton from "../CopyParagraphButton";
|
|
16
17
|
import FactBox from "../FactBox";
|
|
17
|
-
import FramedContent from "../FramedContent";
|
|
18
18
|
import LayoutItem, { OneColumn } from "../Layout";
|
|
19
19
|
|
|
20
20
|
const embedData: UuDisclaimerEmbedData = {
|
|
@@ -143,10 +143,10 @@ export const WithHtml: StoryObj<typeof UuDisclaimerEmbed> = {
|
|
|
143
143
|
children: (
|
|
144
144
|
<>
|
|
145
145
|
<p>Dette er html med en ekspanderboks</p>
|
|
146
|
-
<
|
|
147
|
-
<
|
|
146
|
+
<ExpandableBox>
|
|
147
|
+
<ExpandableBoxSummary>Tittel</ExpandableBoxSummary>
|
|
148
148
|
<p>innhold</p>
|
|
149
|
-
</
|
|
149
|
+
</ExpandableBox>
|
|
150
150
|
</>
|
|
151
151
|
),
|
|
152
152
|
},
|
|
@@ -8,36 +8,28 @@
|
|
|
8
8
|
|
|
9
9
|
import { ReactNode } from "react";
|
|
10
10
|
import { useTranslation } from "react-i18next";
|
|
11
|
-
import styled from "@emotion/styled";
|
|
12
|
-
import { fonts, spacing } from "@ndla/core";
|
|
13
11
|
import { InformationOutline } from "@ndla/icons/common";
|
|
12
|
+
import { MessageBox } from "@ndla/primitives";
|
|
14
13
|
import { SafeLink } from "@ndla/safelink";
|
|
14
|
+
import { styled } from "@ndla/styled-system/jsx";
|
|
15
15
|
import { UuDisclaimerMetaData } from "@ndla/types-embed";
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
interface Props {
|
|
18
18
|
embed: UuDisclaimerMetaData;
|
|
19
19
|
children?: ReactNode;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
const StyledMessageBox = styled(MessageBox
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-ms-user-select: none;
|
|
34
|
-
`;
|
|
35
|
-
|
|
36
|
-
const DisclaimerWrapper = styled.div`
|
|
37
|
-
> :nth-child(2) {
|
|
38
|
-
margin-top: ${spacing.xsmall};
|
|
39
|
-
}
|
|
40
|
-
`;
|
|
22
|
+
const StyledMessageBox = styled(MessageBox, {
|
|
23
|
+
base: {
|
|
24
|
+
display: "flex",
|
|
25
|
+
alignItems: "center",
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
const Disclaimer = styled("div", {
|
|
29
|
+
base: {
|
|
30
|
+
textStyle: "body.medium",
|
|
31
|
+
},
|
|
32
|
+
});
|
|
41
33
|
|
|
42
34
|
const UuDisclaimerEmbed = ({ embed, children }: Props) => {
|
|
43
35
|
const { t } = useTranslation();
|
|
@@ -58,8 +50,8 @@ const UuDisclaimerEmbed = ({ embed, children }: Props) => {
|
|
|
58
50
|
) : null;
|
|
59
51
|
|
|
60
52
|
return (
|
|
61
|
-
<
|
|
62
|
-
<StyledMessageBox
|
|
53
|
+
<div role="region">
|
|
54
|
+
<StyledMessageBox variant="warning" contentEditable={false}>
|
|
63
55
|
<InformationOutline />
|
|
64
56
|
<Disclaimer>
|
|
65
57
|
{embedData.disclaimer}
|
|
@@ -67,7 +59,7 @@ const UuDisclaimerEmbed = ({ embed, children }: Props) => {
|
|
|
67
59
|
</Disclaimer>
|
|
68
60
|
</StyledMessageBox>
|
|
69
61
|
{children}
|
|
70
|
-
</
|
|
62
|
+
</div>
|
|
71
63
|
);
|
|
72
64
|
};
|
|
73
65
|
|
package/src/Embed/index.ts
CHANGED
|
@@ -15,11 +15,10 @@ export { default as FootnoteEmbed } from "./FootnoteEmbed";
|
|
|
15
15
|
export { default as BrightcoveEmbed } from "./BrightcoveEmbed";
|
|
16
16
|
export { default as ContentLinkEmbed } from "./ContentLinkEmbed";
|
|
17
17
|
export { default as RelatedContentEmbed } from "./RelatedContentEmbed";
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
18
|
+
export { ConceptEmbed, InlineConcept, BlockConcept } from "./ConceptEmbed";
|
|
19
|
+
export type { InlineConceptProps, BlockConceptProps } from "./ConceptEmbed";
|
|
20
20
|
export { default as ConceptListEmbed } from "./ConceptListEmbed";
|
|
21
21
|
export { default as UnknownEmbed } from "./UnknownEmbed";
|
|
22
|
-
export { InlineConcept, BlockConcept } from "./ConceptEmbed";
|
|
23
22
|
export { default as UuDisclaimerEmbed } from "./UuDisclaimerEmbed";
|
|
24
23
|
export { default as CopyrightEmbed } from "./CopyrightEmbed";
|
|
25
24
|
export { default as CodeEmbed } from "./CodeEmbed";
|
|
@@ -7,42 +7,53 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { ReactNode } from "react";
|
|
10
|
-
import
|
|
11
|
-
import { colors, spacing, breakpoints } from "@ndla/core";
|
|
10
|
+
import { Text } from "@ndla/primitives";
|
|
12
11
|
import { SafeLink } from "@ndla/safelink";
|
|
12
|
+
import { styled } from "@ndla/styled-system/jsx";
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
text-align: center;
|
|
16
|
-
a {
|
|
17
|
-
color: ${colors.brand.primary};
|
|
18
|
-
}
|
|
14
|
+
// TODO: This has not been redesignet yet. This is just a rewrite of the previous design in panda
|
|
19
15
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
const StyledErrorMessage = styled("article", {
|
|
17
|
+
base: {
|
|
18
|
+
textAlign: "center",
|
|
19
|
+
"& a": {
|
|
20
|
+
color: "text.strong",
|
|
21
|
+
},
|
|
22
|
+
"& h1": {
|
|
23
|
+
marginTop: "0",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
});
|
|
24
27
|
|
|
25
|
-
const IllustrationWrapper = styled("div"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
const IllustrationWrapper = styled("div", {
|
|
29
|
+
base: {
|
|
30
|
+
marginBottom: "medium",
|
|
31
|
+
tablet: {
|
|
32
|
+
marginTop: "xxlarge",
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
});
|
|
31
36
|
|
|
32
|
-
const Description = styled(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
const Description = styled(Text, {
|
|
38
|
+
base: {
|
|
39
|
+
marginBottom: "medium",
|
|
40
|
+
tablet: {
|
|
41
|
+
marginBottom: "xxlarge",
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
});
|
|
38
45
|
|
|
39
|
-
const CustomElementWrapper = styled
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
const CustomElementWrapper = styled("div", {
|
|
47
|
+
base: {
|
|
48
|
+
marginBlock: "xxlarge",
|
|
49
|
+
},
|
|
50
|
+
});
|
|
42
51
|
|
|
43
|
-
const MessageWrapper = styled
|
|
44
|
-
|
|
45
|
-
|
|
52
|
+
const MessageWrapper = styled("div", {
|
|
53
|
+
base: {
|
|
54
|
+
marginTop: "3xsmall",
|
|
55
|
+
},
|
|
56
|
+
});
|
|
46
57
|
|
|
47
58
|
interface Props {
|
|
48
59
|
messages: {
|
|
@@ -7,16 +7,18 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { useTranslation } from "react-i18next";
|
|
10
|
-
import styled from "@emotion/styled";
|
|
11
10
|
import { ButtonV2 } from "@ndla/button";
|
|
12
|
-
import { spacing } from "@ndla/core";
|
|
13
11
|
import { HumanMaleBoard, LogIn } from "@ndla/icons/common";
|
|
14
|
-
|
|
12
|
+
import { styled } from "@ndla/styled-system/jsx";
|
|
15
13
|
import ErrorMessage from "./ErrorMessage";
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
// TODO: This has not been redesignet yet. This is just a rewrite of the previous design in panda
|
|
16
|
+
|
|
17
|
+
const StyledLogInIconWrapper = styled("span", {
|
|
18
|
+
base: {
|
|
19
|
+
marginLeft: "3xsmall",
|
|
20
|
+
},
|
|
21
|
+
});
|
|
20
22
|
|
|
21
23
|
type Props = {
|
|
22
24
|
onAuthenticateClick: () => void;
|
package/src/FactBox/FactBox.tsx
CHANGED
|
@@ -6,14 +6,11 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
import { ComponentProps, ReactNode, forwardRef, useCallback, useEffect, useState } from "react";
|
|
9
|
+
import { ComponentProps, ReactNode, forwardRef, useCallback, useEffect, useId, useMemo, useState } from "react";
|
|
11
10
|
import { useTranslation } from "react-i18next";
|
|
12
|
-
import {
|
|
13
|
-
import
|
|
14
|
-
import {
|
|
15
|
-
import { breakpoints, colors, mq, spacing, stackOrder } from "@ndla/core";
|
|
16
|
-
import { ChevronDown, ChevronUp } from "@ndla/icons/common";
|
|
11
|
+
import { ChevronDown } from "@ndla/icons/common";
|
|
12
|
+
import { IconButton } from "@ndla/primitives";
|
|
13
|
+
import { styled } from "@ndla/styled-system/jsx";
|
|
17
14
|
|
|
18
15
|
interface Props extends ComponentProps<"aside"> {
|
|
19
16
|
children?: ReactNode;
|
|
@@ -22,129 +19,132 @@ interface Props extends ComponentProps<"aside"> {
|
|
|
22
19
|
onOpenChange?: (open: boolean) => void;
|
|
23
20
|
}
|
|
24
21
|
|
|
25
|
-
const StyledAside = styled
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
`;
|
|
112
|
-
|
|
113
|
-
const expandedStyle = css`
|
|
114
|
-
max-height: 500vh;
|
|
115
|
-
`;
|
|
22
|
+
const StyledAside = styled("aside", {
|
|
23
|
+
base: {
|
|
24
|
+
display: "flex",
|
|
25
|
+
flexDirection: "column",
|
|
26
|
+
alignItems: "center",
|
|
27
|
+
position: "relative",
|
|
28
|
+
padding: "medium",
|
|
29
|
+
transitionProperty: "max-height",
|
|
30
|
+
transitionDuration: "slow",
|
|
31
|
+
transitionTimingFunction: "ease-in-out",
|
|
32
|
+
border: "1px solid",
|
|
33
|
+
borderColor: "stroke.default",
|
|
34
|
+
borderRadius: "xsmall",
|
|
35
|
+
maxHeight: "surface.xxsmall",
|
|
36
|
+
_closed: {
|
|
37
|
+
_print: {
|
|
38
|
+
overflow: "visible",
|
|
39
|
+
maxHeight: "500vh",
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
_open: {
|
|
43
|
+
maxHeight: "500vh",
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
const StyledContent = styled("div", {
|
|
49
|
+
base: {
|
|
50
|
+
position: "relative",
|
|
51
|
+
width: "100%",
|
|
52
|
+
overflow: "hidden",
|
|
53
|
+
// Reset the top margin of the very first child.
|
|
54
|
+
"& :first-child": {
|
|
55
|
+
marginBlockStart: "0",
|
|
56
|
+
},
|
|
57
|
+
_after: {
|
|
58
|
+
content: '""',
|
|
59
|
+
textAlign: "center",
|
|
60
|
+
position: "absolute",
|
|
61
|
+
inset: "0",
|
|
62
|
+
transitionProperty: "opacity",
|
|
63
|
+
transitionDuration: "slow",
|
|
64
|
+
transitionTimingFunction: "ease-out",
|
|
65
|
+
// TODO: Consider improving this gradient. It's a little light up top.
|
|
66
|
+
gradientFrom: "surface.default/00",
|
|
67
|
+
gradientTo: "surface.default",
|
|
68
|
+
backgroundGradient: "to-b",
|
|
69
|
+
opacity: "1",
|
|
70
|
+
zIndex: "base",
|
|
71
|
+
},
|
|
72
|
+
_print: {
|
|
73
|
+
overflow: "visible",
|
|
74
|
+
_after: {
|
|
75
|
+
display: "none",
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
_open: {
|
|
79
|
+
paddingBlockEnd: "xsmall",
|
|
80
|
+
_after: {
|
|
81
|
+
opacity: "0",
|
|
82
|
+
zIndex: "hide",
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
const StyledIconButton = styled(IconButton, {
|
|
89
|
+
base: {
|
|
90
|
+
position: "absolute",
|
|
91
|
+
bottom: "-medium",
|
|
92
|
+
zIndex: "base",
|
|
93
|
+
"& svg": {
|
|
94
|
+
transitionProperty: "transform",
|
|
95
|
+
transitionTimingFunction: "ease-in-out",
|
|
96
|
+
transitionDuration: "fast",
|
|
97
|
+
},
|
|
98
|
+
_open: {
|
|
99
|
+
"& svg": {
|
|
100
|
+
transform: "rotate(180deg)",
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
_print: {
|
|
104
|
+
display: "none",
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
});
|
|
116
108
|
|
|
117
|
-
|
|
118
|
-
max-height: 500vh;
|
|
119
|
-
&:after {
|
|
120
|
-
opacity: 0;
|
|
121
|
-
z-index: ${stackOrder.hide};
|
|
122
|
-
}
|
|
123
|
-
`;
|
|
109
|
+
// TODO: Consider moving the open trigger depending on whether the content is open or closed.
|
|
124
110
|
|
|
125
111
|
const FactBox = forwardRef<HTMLElement, Props>(
|
|
126
112
|
({ children, open, onOpenChange, defaultOpen = false, ...rest }, ref) => {
|
|
127
113
|
const { t } = useTranslation();
|
|
128
|
-
const [
|
|
114
|
+
const [state, setState] = useState<"open" | "closed">(defaultOpen ? "open" : "closed");
|
|
115
|
+
const contentId = useId();
|
|
116
|
+
// Inert has existed since early 2023. It allows us to disable tabindex inside the content if it is closed, allowing us to be accessible for users with newish browsers. React 18 removes this because it doesn't recognize the attribute. This is a workaround for that.
|
|
117
|
+
// TODO: Remove this hack when we upgrade to React 19.
|
|
118
|
+
const inertAttribute = useMemo(() => {
|
|
119
|
+
return state === "closed" ? { inert: "" } : {};
|
|
120
|
+
}, [state]);
|
|
129
121
|
|
|
130
122
|
useEffect(() => {
|
|
131
123
|
if (open !== undefined) {
|
|
132
|
-
|
|
124
|
+
setState(open ? "open" : "closed");
|
|
133
125
|
}
|
|
134
126
|
}, [open]);
|
|
135
127
|
|
|
136
128
|
const onClick = useCallback(() => {
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
onOpenChange?.(
|
|
140
|
-
}, [
|
|
129
|
+
const newState = state === "open" ? "closed" : "open";
|
|
130
|
+
setState(newState);
|
|
131
|
+
onOpenChange?.(newState === "open");
|
|
132
|
+
}, [state, onOpenChange]);
|
|
141
133
|
|
|
142
134
|
return (
|
|
143
|
-
<StyledAside {
|
|
144
|
-
<
|
|
145
|
-
|
|
146
|
-
{
|
|
135
|
+
<StyledAside data-state={state} {...rest} ref={ref}>
|
|
136
|
+
<StyledIconButton
|
|
137
|
+
data-state={state}
|
|
138
|
+
onClick={onClick}
|
|
139
|
+
aria-expanded={state === "open"}
|
|
140
|
+
aria-controls={contentId}
|
|
141
|
+
aria-label={t(`factbox.${state === "open" ? "close" : "open"}`)}
|
|
142
|
+
>
|
|
143
|
+
<ChevronDown />
|
|
147
144
|
</StyledIconButton>
|
|
145
|
+
<StyledContent id={contentId} data-state={state} aria-hidden={state === "closed"} {...inertAttribute}>
|
|
146
|
+
{children}
|
|
147
|
+
</StyledContent>
|
|
148
148
|
</StyledAside>
|
|
149
149
|
);
|
|
150
150
|
},
|
|
@@ -6,16 +6,10 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import styled from "@emotion/styled";
|
|
10
9
|
import { Meta, StoryObj } from "@storybook/react";
|
|
11
|
-
import {
|
|
12
|
-
import { Heading, Text } from "@ndla/typography";
|
|
10
|
+
import { Button, UnOrderedList, OrderedList } from "@ndla/primitives";
|
|
13
11
|
import FactBox from "./FactBox";
|
|
14
12
|
|
|
15
|
-
const Wrapper = styled.div`
|
|
16
|
-
padding: ${spacing.normal};
|
|
17
|
-
`;
|
|
18
|
-
|
|
19
13
|
/**
|
|
20
14
|
*For alt nytt innhold på ndla.no skal ikke flytende høyrespalte benyttes. I stedet benytter vi faktabokser innenfor innholdsspalten.
|
|
21
15
|
*/
|
|
@@ -26,32 +20,54 @@ export default {
|
|
|
26
20
|
paramemeters: {
|
|
27
21
|
inlineStories: true,
|
|
28
22
|
},
|
|
29
|
-
decorators: [
|
|
30
|
-
(Story) => (
|
|
31
|
-
<Wrapper>
|
|
32
|
-
<Story />
|
|
33
|
-
</Wrapper>
|
|
34
|
-
),
|
|
35
|
-
],
|
|
23
|
+
decorators: [(Story) => <Story />],
|
|
36
24
|
args: {
|
|
37
25
|
children: (
|
|
38
26
|
<>
|
|
39
|
-
<
|
|
40
|
-
|
|
41
|
-
</
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
</Text>
|
|
45
|
-
<Text textStyle="content">
|
|
27
|
+
<h2>Faktaboks</h2>
|
|
28
|
+
<p>Innhold kan først nås etter at boksen er åpnet.</p>
|
|
29
|
+
<Button>Klikk meg</Button>
|
|
30
|
+
<p>En faktaboks kan inneholde punktlister eller korte fakta som er relevant for artikkelens innhold.</p>
|
|
31
|
+
<p>
|
|
46
32
|
Det anbefales å ikke ha for mye innhold i faktaboks, slik at lese-konteksten i størst mulig grad beholdes.
|
|
47
|
-
</
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
</Heading>
|
|
51
|
-
<Text textStyle="content">
|
|
33
|
+
</p>
|
|
34
|
+
<h2>Enkel tittel</h2>
|
|
35
|
+
<p>
|
|
52
36
|
Faktaboksen kan også brukes til å oppsummere innhold i slutten av en artikkel, og den kan inneholde
|
|
53
37
|
lisensiering om eksternt innhold er brukt.
|
|
54
|
-
</
|
|
38
|
+
</p>
|
|
39
|
+
<UnOrderedList>
|
|
40
|
+
<li>Punkt 1</li>
|
|
41
|
+
<li>Punkt 2</li>
|
|
42
|
+
<li>
|
|
43
|
+
<UnOrderedList>
|
|
44
|
+
<li>Punkt 1.1</li>
|
|
45
|
+
<li>Punkt 1.2</li>
|
|
46
|
+
<li>
|
|
47
|
+
<UnOrderedList>
|
|
48
|
+
<li>Punkt 1.1.1</li>
|
|
49
|
+
<li>Punkt 1.2.1</li>
|
|
50
|
+
</UnOrderedList>
|
|
51
|
+
</li>
|
|
52
|
+
</UnOrderedList>
|
|
53
|
+
</li>
|
|
54
|
+
</UnOrderedList>
|
|
55
|
+
<OrderedList>
|
|
56
|
+
<li>Punkt 1</li>
|
|
57
|
+
<li>Punkt 2</li>
|
|
58
|
+
<li>
|
|
59
|
+
<OrderedList>
|
|
60
|
+
<li>Punkt 1.1</li>
|
|
61
|
+
<li>Punkt 1.2</li>
|
|
62
|
+
<li>
|
|
63
|
+
<OrderedList>
|
|
64
|
+
<li>Punkt 1.1.1</li>
|
|
65
|
+
<li>Punkt 1.2.1</li>
|
|
66
|
+
</OrderedList>
|
|
67
|
+
</li>
|
|
68
|
+
</OrderedList>
|
|
69
|
+
</li>
|
|
70
|
+
</OrderedList>
|
|
55
71
|
</>
|
|
56
72
|
),
|
|
57
73
|
},
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import { Meta, StoryObj } from "@storybook/react";
|
|
10
10
|
import File from "./File";
|
|
11
11
|
import FileList from "./FileList";
|
|
12
|
+
import PdfFile from "./PdfFile";
|
|
12
13
|
|
|
13
14
|
export default {
|
|
14
15
|
title: "Components/FileList",
|
|
@@ -38,7 +39,11 @@ export const SeveralFiles: StoryObj<typeof File> = {
|
|
|
38
39
|
render: () => (
|
|
39
40
|
<FileList>
|
|
40
41
|
<File title="Fil 1" url="https://ndla.no/1" fileExists fileType="mp4" />
|
|
41
|
-
<File title="Fil 2" url="https://ndla.no/2" fileExists={false} fileType="
|
|
42
|
+
<File title="Fil 2" url="https://ndla.no/2" fileExists={false} fileType="png" />
|
|
43
|
+
<PdfFile
|
|
44
|
+
title="Fil 3"
|
|
45
|
+
url="https://api.test.ndla.no/files/131789/krypteringsaktivitet_-_til_fiendegruppe_bm.pdf"
|
|
46
|
+
/>
|
|
42
47
|
<File title="Fil 3" url="https://ndla.no/3" fileExists fileType="docx" />
|
|
43
48
|
<File title="Fil 4" url="https://ndla.no/4" fileExists fileType="docx" />
|
|
44
49
|
</FileList>
|
package/src/FileList/PdfFile.tsx
CHANGED
|
@@ -6,19 +6,36 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { Figure } from "
|
|
9
|
+
import { Heading, Figure } from "@ndla/primitives";
|
|
10
|
+
import { styled } from "@ndla/styled-system/jsx";
|
|
10
11
|
|
|
11
12
|
interface Props {
|
|
12
13
|
title: string;
|
|
13
14
|
url: string;
|
|
14
15
|
}
|
|
15
16
|
|
|
17
|
+
const StyledIframe = styled("iframe", {
|
|
18
|
+
base: {
|
|
19
|
+
width: "100%",
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const StyledFigure = styled(Figure, {
|
|
24
|
+
base: {
|
|
25
|
+
display: "flex",
|
|
26
|
+
flexDirection: "column",
|
|
27
|
+
gap: "xsmall",
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
|
|
16
31
|
const PdfFile = ({ title, url }: Props) => {
|
|
17
32
|
return (
|
|
18
|
-
<
|
|
19
|
-
<
|
|
20
|
-
|
|
21
|
-
|
|
33
|
+
<StyledFigure>
|
|
34
|
+
<Heading asChild consumeCss textStyle="title.medium">
|
|
35
|
+
<h4>{title}</h4>
|
|
36
|
+
</Heading>
|
|
37
|
+
<StyledIframe title={title} height="1050" src={url} />
|
|
38
|
+
</StyledFigure>
|
|
22
39
|
);
|
|
23
40
|
};
|
|
24
41
|
|