@ndla/ui 55.0.13-alpha.0 → 55.0.15-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/panda.buildinfo.json +142 -1
- package/dist/styles.css +597 -0
- package/es/Article/ArticleByline.js +7 -7
- package/es/Article/ArticleParagraph.js +11 -13
- package/es/AudioPlayer/AudioPlayer.js +1 -0
- package/es/CampaignBlock/CampaignBlock.js +103 -68
- package/es/Concept/Concept.js +69 -0
- package/es/ContactBlock/ContactBlock.js +17 -17
- package/es/ContentTypeBadge/ContentTypeBadgeNew.js +48 -0
- package/es/Embed/AudioEmbed.js +1 -2
- package/es/Embed/BrightcoveEmbed.js +13 -25
- 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 +3 -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/LicenseByline/EmbedByline.js +143 -33
- package/es/LicenseByline/LicenseLink.js +16 -9
- package/es/LicenseByline/index.js +2 -2
- 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 -12
- 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 +597 -0
- package/lib/Article/ArticleByline.js +8 -8
- package/lib/Article/ArticleParagraph.js +12 -14
- package/lib/AudioPlayer/AudioPlayer.js +1 -0
- 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/ContactBlock/ContactBlock.js +18 -18
- 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 -26
- 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 +5 -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/LicenseByline/EmbedByline.d.ts +2 -4
- package/lib/LicenseByline/EmbedByline.js +145 -35
- package/lib/LicenseByline/LicenseLink.d.ts +2 -2
- package/lib/LicenseByline/LicenseLink.js +16 -9
- package/lib/LicenseByline/index.d.ts +2 -2
- package/lib/LicenseByline/index.js +4 -5
- 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 -15
- package/lib/index.js +70 -102
- 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 +597 -0
- package/package.json +11 -13
- package/src/Article/ArticleByline.tsx +1 -1
- package/src/Article/ArticleParagraph.tsx +11 -9
- package/src/AudioPlayer/AudioPlayer.tsx +1 -0
- package/src/CampaignBlock/CampaignBlock.tsx +92 -55
- package/src/Concept/Concept.stories.tsx +142 -0
- package/src/Concept/Concept.tsx +73 -0
- package/src/ContactBlock/ContactBlock.tsx +1 -1
- 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 +18 -20
- 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/LicenseByline/EmbedByline.stories.tsx +9 -4
- package/src/LicenseByline/EmbedByline.tsx +139 -53
- package/src/LicenseByline/LicenseLink.tsx +15 -15
- package/src/LicenseByline/index.tsx +2 -2
- 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 -19
- 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/LicenseByline/LicenseDescription.js +0 -63
- package/es/List/OrderedList.js +0 -41
- package/es/List/UnOrderedList.js +0 -28
- package/es/List/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/LicenseByline/LicenseDescription.d.ts +0 -15
- package/lib/LicenseByline/LicenseDescription.js +0 -70
- package/lib/List/OrderedList.d.ts +0 -16
- package/lib/List/OrderedList.js +0 -48
- package/lib/List/UnOrderedList.d.ts +0 -10
- package/lib/List/UnOrderedList.js +0 -35
- package/lib/List/index.d.ts +0 -9
- package/lib/List/index.js +0 -20
- 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/LicenseByline/LicenseDescription.tsx +0 -100
- package/src/List/OrderedList.stories.tsx +0 -135
- package/src/List/OrderedList.tsx +0 -158
- package/src/List/UnOrderedList.tsx +0 -43
- package/src/List/UnorderedList.stories.tsx +0 -72
- package/src/List/index.ts +0 -10
- 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,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
|
|
|
@@ -65,6 +65,32 @@ export const GlossStory: StoryFn<typeof Gloss> = ({ ...args }) => {
|
|
|
65
65
|
return <Gloss {...args} />;
|
|
66
66
|
};
|
|
67
67
|
|
|
68
|
+
export const Bordered: StoryObj<typeof Gloss> = {
|
|
69
|
+
args: {
|
|
70
|
+
variant: "bordered",
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export const NoExamples: StoryObj<typeof Gloss> = {
|
|
75
|
+
args: {
|
|
76
|
+
title: {
|
|
77
|
+
title: "Å angripe",
|
|
78
|
+
language: "nb",
|
|
79
|
+
},
|
|
80
|
+
glossData: {
|
|
81
|
+
gloss: "angreifen",
|
|
82
|
+
wordClass: wordClass.verb,
|
|
83
|
+
originalLanguage: "de",
|
|
84
|
+
transcriptions: {},
|
|
85
|
+
examples: [],
|
|
86
|
+
},
|
|
87
|
+
audio: {
|
|
88
|
+
title: "",
|
|
89
|
+
src: "",
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
|
|
68
94
|
export const GlossChineseStory: StoryObj<typeof Gloss> = {
|
|
69
95
|
args: {
|
|
70
96
|
title: {
|
|
@@ -103,6 +129,86 @@ export const GlossChineseStory: StoryObj<typeof Gloss> = {
|
|
|
103
129
|
},
|
|
104
130
|
};
|
|
105
131
|
|
|
132
|
+
export const BigExample: StoryObj<typeof Gloss> = {
|
|
133
|
+
args: {
|
|
134
|
+
title: {
|
|
135
|
+
title: "(spørsmålspartikkel); hva med…?",
|
|
136
|
+
language: "nb",
|
|
137
|
+
},
|
|
138
|
+
audio: {
|
|
139
|
+
src: "https://api.ndla.no/audio/files/ne.mp3",
|
|
140
|
+
title: "Spill av",
|
|
141
|
+
},
|
|
142
|
+
glossData: {
|
|
143
|
+
gloss: "呢",
|
|
144
|
+
wordClass: "particle",
|
|
145
|
+
originalLanguage: "zh",
|
|
146
|
+
transcriptions: {
|
|
147
|
+
pinyin: "ne",
|
|
148
|
+
},
|
|
149
|
+
examples: [
|
|
150
|
+
[
|
|
151
|
+
{
|
|
152
|
+
example: "我叫马红,你呢?//我叫馬紅,你呢?",
|
|
153
|
+
language: "zh",
|
|
154
|
+
transcriptions: {
|
|
155
|
+
pinyin: "Wǒ jiào Mǎ Hóng, nǐ ne?",
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
example: "Jeg heter Ma Hong, hva med deg?",
|
|
160
|
+
language: "nb",
|
|
161
|
+
transcriptions: {},
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
example: "Eg heiter Ma Hong, kva med deg?",
|
|
165
|
+
language: "nn",
|
|
166
|
+
transcriptions: {},
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
[
|
|
170
|
+
{
|
|
171
|
+
example: "我姓王,你呢?",
|
|
172
|
+
language: "zh",
|
|
173
|
+
transcriptions: {
|
|
174
|
+
pinyin: "Wǒ xìng Wáng, nǐ ne?",
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
example: "Jeg heter Wang til etternavn, hva med deg?",
|
|
179
|
+
language: "nb",
|
|
180
|
+
transcriptions: {},
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
example: "Eg heiter Wang til etternamn, kva med deg?",
|
|
184
|
+
language: "nn",
|
|
185
|
+
transcriptions: {},
|
|
186
|
+
},
|
|
187
|
+
],
|
|
188
|
+
[
|
|
189
|
+
{
|
|
190
|
+
example: "我是老师,你呢?//我是老師,你呢?",
|
|
191
|
+
language: "zh",
|
|
192
|
+
transcriptions: {
|
|
193
|
+
pinyin: "Wǒ shì lǎoshī, nǐ ne?",
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
example: "Jeg er lærer, hva med deg?",
|
|
198
|
+
language: "nb",
|
|
199
|
+
transcriptions: {},
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
example: "Eg er lærar, kva med deg?",
|
|
203
|
+
language: "nn",
|
|
204
|
+
transcriptions: {},
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
],
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
|
|
106
212
|
const GlossExampleText = {
|
|
107
213
|
example: "我叫马红",
|
|
108
214
|
language: "zh",
|
|
@@ -112,5 +218,5 @@ const GlossExampleText = {
|
|
|
112
218
|
};
|
|
113
219
|
|
|
114
220
|
export const GlossExampleStory: StoryFn<typeof Gloss> = () => {
|
|
115
|
-
return <GlossExample originalLanguage="zh"
|
|
221
|
+
return <GlossExample originalLanguage="zh" examples={[GlossExampleText]} />;
|
|
116
222
|
};
|