@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
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2023-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { ComponentPropsWithRef, forwardRef } from "react";
|
|
10
|
-
import styled from "@emotion/styled";
|
|
11
|
-
import { colors, spacing } from "@ndla/core";
|
|
12
|
-
|
|
13
|
-
const StyledFramedContent = styled.div`
|
|
14
|
-
padding: ${spacing.mediumlarge};
|
|
15
|
-
margin: ${spacing.large} 0;
|
|
16
|
-
border: 1px solid ${colors.brand.tertiary};
|
|
17
|
-
overflow: hidden;
|
|
18
|
-
`;
|
|
19
|
-
|
|
20
|
-
const FramedContent = forwardRef<HTMLDivElement, ComponentPropsWithRef<"div">>(({ children, ...rest }, ref) => (
|
|
21
|
-
<StyledFramedContent {...rest} ref={ref}>
|
|
22
|
-
{children}
|
|
23
|
-
</StyledFramedContent>
|
|
24
|
-
));
|
|
25
|
-
|
|
26
|
-
export default FramedContent;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2023-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import FramedContent from "./FramedContent";
|
|
10
|
-
export default FramedContent;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2023-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { Meta, StoryObj } from "@storybook/react";
|
|
10
|
-
import Image from "./Image";
|
|
11
|
-
|
|
12
|
-
export default {
|
|
13
|
-
title: "Components/Image",
|
|
14
|
-
tags: ["autodocs"],
|
|
15
|
-
component: Image,
|
|
16
|
-
parameters: {
|
|
17
|
-
inlineStories: true,
|
|
18
|
-
},
|
|
19
|
-
args: {
|
|
20
|
-
alt: "Mann med maske",
|
|
21
|
-
src: "https://api.test.ndla.no/image-api/raw/id/604",
|
|
22
|
-
},
|
|
23
|
-
} as Meta<typeof Image>;
|
|
24
|
-
|
|
25
|
-
export const Default: StoryObj<typeof Image> = {};
|
|
26
|
-
|
|
27
|
-
export const Crop: StoryObj<typeof Image> = {
|
|
28
|
-
args: {
|
|
29
|
-
crop: {
|
|
30
|
-
startX: 14.59,
|
|
31
|
-
endX: 79.63,
|
|
32
|
-
startY: 20,
|
|
33
|
-
endY: 100,
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export const FocalPoint: StoryObj<typeof Image> = {
|
|
39
|
-
args: {
|
|
40
|
-
focalPoint: {
|
|
41
|
-
x: 65.08,
|
|
42
|
-
y: 45.28,
|
|
43
|
-
},
|
|
44
|
-
sizes: "(min-width: 320px) 320px",
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
export const LazyLoad: StoryObj<typeof Image> = {
|
|
49
|
-
args: {
|
|
50
|
-
alt: "Lyspære",
|
|
51
|
-
src: "https://api.staging.ndla.no/image-api/raw/Ide.jpg",
|
|
52
|
-
lazyLoad: true,
|
|
53
|
-
lazyLoadSrc: `data:image/svg+xml;utf8,
|
|
54
|
-
<svg xmlns="http://www.w3.org/2000/svg" height="400" width="100%">
|
|
55
|
-
<rect x="0" y="0" width="100%" height="100%" style="fill:#EFF0F2;">
|
|
56
|
-
<animate attributeType="XML" attributeName="fill" values="#EFF0F2;#E8E3E3;#EFF0F2;" dur="3s" repeatCount="indefinite"/>
|
|
57
|
-
</rect>
|
|
58
|
-
</svg>
|
|
59
|
-
`,
|
|
60
|
-
},
|
|
61
|
-
};
|
package/src/Image/Image.tsx
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2017-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { ReactNode } from "react";
|
|
10
|
-
import styled from "@emotion/styled";
|
|
11
|
-
import { colors, misc } from "@ndla/core";
|
|
12
|
-
|
|
13
|
-
export interface ImageCrop {
|
|
14
|
-
startX: number;
|
|
15
|
-
startY: number;
|
|
16
|
-
endX: number;
|
|
17
|
-
endY: number;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface ImageFocalPoint {
|
|
21
|
-
x: number;
|
|
22
|
-
y: number;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export const makeSrcQueryString = (width: number | undefined, crop?: ImageCrop, focalPoint?: ImageFocalPoint) => {
|
|
26
|
-
const widthParams = width && `width=${width}`;
|
|
27
|
-
const cropParams =
|
|
28
|
-
crop && `cropStartX=${crop.startX}&cropEndX=${crop.endX}&cropStartY=${crop.startY}&cropEndY=${crop.endY}`;
|
|
29
|
-
const focalPointParams = focalPoint && `focalX=${focalPoint.x}&focalY=${focalPoint.y}`;
|
|
30
|
-
const params = [widthParams, cropParams, focalPointParams].filter((p) => p).join("&");
|
|
31
|
-
|
|
32
|
-
return params;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const getSrcSet = (src: string, crop: ImageCrop | undefined, focalPoint: ImageFocalPoint | undefined) => {
|
|
36
|
-
const widths = [2720, 2080, 1760, 1440, 1120, 1000, 960, 800, 640, 480, 320, 240, 180];
|
|
37
|
-
return widths.map((width) => `${src}?${makeSrcQueryString(width, crop, focalPoint)} ${width}w`).join(", ");
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const StyledImageWrapper = styled.div`
|
|
41
|
-
overflow: hidden;
|
|
42
|
-
position: relative;
|
|
43
|
-
|
|
44
|
-
&[data-expanded="true"] {
|
|
45
|
-
width: 100%;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
picture {
|
|
49
|
-
width: 100%;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
&[data-svg="true"] {
|
|
53
|
-
display: flex;
|
|
54
|
-
justify-content: center;
|
|
55
|
-
}
|
|
56
|
-
&[data-border="true"] {
|
|
57
|
-
border: 1px solid ${colors.brand.tertiary};
|
|
58
|
-
border-bottom: 0;
|
|
59
|
-
border-radius: ${misc.borderRadius};
|
|
60
|
-
border-bottom-left-radius: 0;
|
|
61
|
-
border-bottom-right-radius: 0;
|
|
62
|
-
}
|
|
63
|
-
&[data-expandable="true"] {
|
|
64
|
-
cursor: pointer;
|
|
65
|
-
}
|
|
66
|
-
`;
|
|
67
|
-
|
|
68
|
-
const StyledImage = styled.img`
|
|
69
|
-
&[data-border="true"] {
|
|
70
|
-
border-radius: 3px;
|
|
71
|
-
border-bottom-left-radius: 0;
|
|
72
|
-
border-bottom-right-radius: 0;
|
|
73
|
-
}
|
|
74
|
-
`;
|
|
75
|
-
|
|
76
|
-
interface Props {
|
|
77
|
-
alt: string;
|
|
78
|
-
src: string;
|
|
79
|
-
sizes?: string;
|
|
80
|
-
fallbackWidth?: number;
|
|
81
|
-
contentType?: string;
|
|
82
|
-
srcSet?: string;
|
|
83
|
-
lazyLoad?: boolean;
|
|
84
|
-
lazyLoadSrc?: string;
|
|
85
|
-
expandButton?: ReactNode;
|
|
86
|
-
crop?: ImageCrop;
|
|
87
|
-
focalPoint?: ImageFocalPoint;
|
|
88
|
-
border?: string;
|
|
89
|
-
lang?: string;
|
|
90
|
-
onExpand?: () => void;
|
|
91
|
-
expanded?: boolean;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const Image = ({
|
|
95
|
-
alt,
|
|
96
|
-
src,
|
|
97
|
-
lazyLoad,
|
|
98
|
-
lazyLoadSrc,
|
|
99
|
-
crop,
|
|
100
|
-
focalPoint,
|
|
101
|
-
contentType,
|
|
102
|
-
sizes = "(min-width: 1024px) 1024px, 100vw",
|
|
103
|
-
expandButton,
|
|
104
|
-
fallbackWidth = 1024,
|
|
105
|
-
border,
|
|
106
|
-
lang,
|
|
107
|
-
onExpand,
|
|
108
|
-
expanded,
|
|
109
|
-
...rest
|
|
110
|
-
}: Props) => {
|
|
111
|
-
const srcSet = rest.srcSet ?? getSrcSet(src, crop, focalPoint);
|
|
112
|
-
const queryString = makeSrcQueryString(fallbackWidth, crop, focalPoint);
|
|
113
|
-
const loading = lazyLoad ? "lazy" : undefined;
|
|
114
|
-
|
|
115
|
-
if (contentType && contentType === "image/gif") {
|
|
116
|
-
return (
|
|
117
|
-
<StyledImageWrapper data-border={border} data-expanded={expanded} data-expandable={!!onExpand} onClick={onExpand}>
|
|
118
|
-
<StyledImage alt={alt} loading={loading} src={`${src}`} {...rest} data-border={border} lang={lang} />
|
|
119
|
-
</StyledImageWrapper>
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return (
|
|
124
|
-
<StyledImageWrapper
|
|
125
|
-
data-svg={contentType === "image/svg+xml"}
|
|
126
|
-
data-border={border}
|
|
127
|
-
data-expandable={!!onExpand}
|
|
128
|
-
data-expanded={expanded}
|
|
129
|
-
onClick={onExpand}
|
|
130
|
-
>
|
|
131
|
-
<picture>
|
|
132
|
-
<source type={contentType} srcSet={srcSet} sizes={sizes} />
|
|
133
|
-
<StyledImage
|
|
134
|
-
alt={alt}
|
|
135
|
-
loading={loading}
|
|
136
|
-
src={`${src}?${queryString}`}
|
|
137
|
-
{...rest}
|
|
138
|
-
data-border={border}
|
|
139
|
-
lang={lang}
|
|
140
|
-
/>
|
|
141
|
-
</picture>
|
|
142
|
-
{expandButton}
|
|
143
|
-
</StyledImageWrapper>
|
|
144
|
-
);
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
export default Image;
|
package/src/Image/ImageLink.tsx
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2019-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { ReactNode } from "react";
|
|
10
|
-
import styled from "@emotion/styled";
|
|
11
|
-
import { ImageCrop, ImageFocalPoint } from ".";
|
|
12
|
-
import { makeSrcQueryString } from "./Image";
|
|
13
|
-
|
|
14
|
-
const StyledLink = styled.a`
|
|
15
|
-
box-shadow: inset 0 0;
|
|
16
|
-
`;
|
|
17
|
-
|
|
18
|
-
interface Props {
|
|
19
|
-
src: string;
|
|
20
|
-
children: ReactNode;
|
|
21
|
-
sizes?: string;
|
|
22
|
-
crop?: ImageCrop;
|
|
23
|
-
focalPoint?: ImageFocalPoint;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export function ImageLink({ src, crop, children, ...rest }: Props) {
|
|
27
|
-
return (
|
|
28
|
-
<StyledLink
|
|
29
|
-
target="_blank"
|
|
30
|
-
href={`${src}?${makeSrcQueryString(undefined, crop)}`}
|
|
31
|
-
rel="noopener noreferrer"
|
|
32
|
-
{...rest}
|
|
33
|
-
>
|
|
34
|
-
{children}
|
|
35
|
-
</StyledLink>
|
|
36
|
-
);
|
|
37
|
-
}
|
package/src/Image/index.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2017-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import Image from "./Image";
|
|
10
|
-
export { makeSrcQueryString } from "./Image";
|
|
11
|
-
export { ImageLink } from "./ImageLink";
|
|
12
|
-
export type { ImageCrop, ImageFocalPoint } from "./Image";
|
|
13
|
-
|
|
14
|
-
export default Image;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2022-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { useArgs } from "@storybook/preview-api";
|
|
10
|
-
import { Meta, StoryFn } from "@storybook/react";
|
|
11
|
-
import LetterFilter from "./LetterFilter";
|
|
12
|
-
|
|
13
|
-
export default {
|
|
14
|
-
title: "Components/LetterFilter",
|
|
15
|
-
component: LetterFilter,
|
|
16
|
-
tags: ["autodocs"],
|
|
17
|
-
args: {
|
|
18
|
-
enabledLetters: ["a", "c"],
|
|
19
|
-
onChange: (value?: string) => {},
|
|
20
|
-
},
|
|
21
|
-
} as Meta<typeof LetterFilter>;
|
|
22
|
-
|
|
23
|
-
export const LetterFilterStory: StoryFn<typeof LetterFilter> = (args) => {
|
|
24
|
-
const [, updateArgs] = useArgs();
|
|
25
|
-
|
|
26
|
-
return <LetterFilter {...args} onChange={(val) => updateArgs({ value: val })} />;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
LetterFilterStory.storyName = "LetterFilter";
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2022-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { useMemo } from "react";
|
|
10
|
-
import { useTranslation } from "react-i18next";
|
|
11
|
-
import styled from "@emotion/styled";
|
|
12
|
-
import { IconButtonV2 as IconButton } from "@ndla/button";
|
|
13
|
-
import { colors, fonts, spacing } from "@ndla/core";
|
|
14
|
-
import { alphabet } from "./alphabet";
|
|
15
|
-
|
|
16
|
-
const StyledUL = styled.ul`
|
|
17
|
-
list-style: none;
|
|
18
|
-
display: flex;
|
|
19
|
-
flex-direction: row;
|
|
20
|
-
flex-wrap: wrap;
|
|
21
|
-
gap: ${spacing.xsmall};
|
|
22
|
-
`;
|
|
23
|
-
|
|
24
|
-
const StyledButton = styled(IconButton)`
|
|
25
|
-
display: flex;
|
|
26
|
-
align-items: center;
|
|
27
|
-
justify-content: center;
|
|
28
|
-
width: ${spacing.normal};
|
|
29
|
-
height: ${spacing.normal};
|
|
30
|
-
padding: 0;
|
|
31
|
-
${fonts.sizes(18)};
|
|
32
|
-
&& {
|
|
33
|
-
font-weight: ${fonts.weight.semibold};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
:disabled {
|
|
37
|
-
pointer-events: none;
|
|
38
|
-
color: ${colors.brand.light};
|
|
39
|
-
}
|
|
40
|
-
`;
|
|
41
|
-
|
|
42
|
-
interface Props {
|
|
43
|
-
value?: string | undefined;
|
|
44
|
-
onChange: (value?: string) => void;
|
|
45
|
-
enabledLetters: string[];
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const LetterFilter = ({ value, onChange, enabledLetters }: Props) => {
|
|
49
|
-
const { t } = useTranslation();
|
|
50
|
-
const uppercaseLetters = useMemo(() => enabledLetters.map((letter) => letter.toUpperCase()), [enabledLetters]);
|
|
51
|
-
|
|
52
|
-
return (
|
|
53
|
-
<StyledUL>
|
|
54
|
-
{alphabet.map((letter) => {
|
|
55
|
-
const disabled = !uppercaseLetters.includes(letter.toUpperCase());
|
|
56
|
-
const selected = letter.toUpperCase() === value?.toUpperCase();
|
|
57
|
-
return (
|
|
58
|
-
<li key={letter}>
|
|
59
|
-
<StyledButton
|
|
60
|
-
onClick={() => (selected ? onChange(undefined) : onChange(letter))}
|
|
61
|
-
aria-label={t("listview.filters.alphabet.letterFilter", {
|
|
62
|
-
letter,
|
|
63
|
-
})}
|
|
64
|
-
variant={!selected ? "ghost" : undefined}
|
|
65
|
-
colorTheme={!selected ? "lighter" : "primary"}
|
|
66
|
-
disabled={disabled}
|
|
67
|
-
size="xsmall"
|
|
68
|
-
>
|
|
69
|
-
{letter}
|
|
70
|
-
</StyledButton>
|
|
71
|
-
</li>
|
|
72
|
-
);
|
|
73
|
-
})}
|
|
74
|
-
</StyledUL>
|
|
75
|
-
);
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
export default LetterFilter;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2022-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
export const alphabet = [
|
|
10
|
-
"A",
|
|
11
|
-
"B",
|
|
12
|
-
"C",
|
|
13
|
-
"D",
|
|
14
|
-
"E",
|
|
15
|
-
"F",
|
|
16
|
-
"G",
|
|
17
|
-
"H",
|
|
18
|
-
"I",
|
|
19
|
-
"J",
|
|
20
|
-
"K",
|
|
21
|
-
"L",
|
|
22
|
-
"M",
|
|
23
|
-
"N",
|
|
24
|
-
"O",
|
|
25
|
-
"P",
|
|
26
|
-
"Q",
|
|
27
|
-
"R",
|
|
28
|
-
"S",
|
|
29
|
-
"T",
|
|
30
|
-
"U",
|
|
31
|
-
"V",
|
|
32
|
-
"W",
|
|
33
|
-
"X",
|
|
34
|
-
"Y",
|
|
35
|
-
"Z",
|
|
36
|
-
"Æ",
|
|
37
|
-
"Ø",
|
|
38
|
-
"Å",
|
|
39
|
-
];
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2022-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import LetterFilter from "./LetterFilter";
|
|
10
|
-
|
|
11
|
-
export default LetterFilter;
|
package/src/Notion/Notion.tsx
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2021-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
import { Fragment, ReactNode } from "react";
|
|
9
|
-
import { useTranslation } from "react-i18next";
|
|
10
|
-
import styled from "@emotion/styled";
|
|
11
|
-
import { breakpoints, fonts, mq, spacing } from "@ndla/core";
|
|
12
|
-
|
|
13
|
-
const ContentWrapper = styled.div`
|
|
14
|
-
${mq.range({ until: breakpoints.tabletWide })} {
|
|
15
|
-
display: flex;
|
|
16
|
-
flex-direction: column-reverse;
|
|
17
|
-
}
|
|
18
|
-
figure {
|
|
19
|
-
margin: 0;
|
|
20
|
-
}
|
|
21
|
-
`;
|
|
22
|
-
const TextWrapper = styled.div<{ hasVisualElement: boolean }>`
|
|
23
|
-
width: ${(props) => (props.hasVisualElement ? "75%" : "100%")};
|
|
24
|
-
|
|
25
|
-
${mq.range({ until: breakpoints.tabletWide })} {
|
|
26
|
-
width: 100%;
|
|
27
|
-
}
|
|
28
|
-
font-family: ${fonts.sans};
|
|
29
|
-
${fonts.sizes("18px", "28px")};
|
|
30
|
-
${mq.range({ from: breakpoints.desktop })} {
|
|
31
|
-
ul,
|
|
32
|
-
ol {
|
|
33
|
-
margin: ${spacing.small} 0;
|
|
34
|
-
padding: 0 1rem 0 2rem;
|
|
35
|
-
}
|
|
36
|
-
ol > li {
|
|
37
|
-
margin-left: ${spacing.normal};
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
`;
|
|
41
|
-
|
|
42
|
-
const ClearWrapper = styled.div`
|
|
43
|
-
clear: both;
|
|
44
|
-
`;
|
|
45
|
-
|
|
46
|
-
const LabelsContainer = styled.div`
|
|
47
|
-
display: flex;
|
|
48
|
-
align-items: center;
|
|
49
|
-
${fonts.sizes("14px", "24px")};
|
|
50
|
-
font-family: ${fonts.sans};
|
|
51
|
-
margin: ${spacing.small} 0;
|
|
52
|
-
`;
|
|
53
|
-
|
|
54
|
-
export type NotionProps = {
|
|
55
|
-
id: string | number;
|
|
56
|
-
labels?: string[];
|
|
57
|
-
text: ReactNode;
|
|
58
|
-
title: string;
|
|
59
|
-
visualElement: ReactNode;
|
|
60
|
-
imageElement?: ReactNode;
|
|
61
|
-
children?: ReactNode;
|
|
62
|
-
lang?: string;
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
const Notion = ({ id, labels = [], text, title, visualElement, imageElement, children, lang }: NotionProps) => {
|
|
66
|
-
const { t } = useTranslation();
|
|
67
|
-
|
|
68
|
-
return (
|
|
69
|
-
<div>
|
|
70
|
-
<ContentWrapper>
|
|
71
|
-
{imageElement}
|
|
72
|
-
{visualElement}
|
|
73
|
-
<TextWrapper hasVisualElement={!!(imageElement || visualElement)} lang={lang}>
|
|
74
|
-
<b>{title.trim()}</b>
|
|
75
|
-
{text}
|
|
76
|
-
{!!labels.length && (
|
|
77
|
-
<LabelsContainer>
|
|
78
|
-
{t("searchPage.resultType.notionLabels")}
|
|
79
|
-
{labels.map((label, i) => (
|
|
80
|
-
<Fragment key={`notion-${id}-label-${i + 1}`}>
|
|
81
|
-
{" "}
|
|
82
|
-
{label}
|
|
83
|
-
{i < labels?.length - 1 && <> •</>}
|
|
84
|
-
</Fragment>
|
|
85
|
-
))}
|
|
86
|
-
</LabelsContainer>
|
|
87
|
-
)}
|
|
88
|
-
</TextWrapper>
|
|
89
|
-
<ClearWrapper />
|
|
90
|
-
</ContentWrapper>
|
|
91
|
-
{children}
|
|
92
|
-
</div>
|
|
93
|
-
);
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
export default Notion;
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2022-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/** @jsxImportSource @emotion/react */
|
|
10
|
-
import styled from "@emotion/styled";
|
|
11
|
-
import { animations, breakpoints, colors, mq, spacing } from "@ndla/core";
|
|
12
|
-
import { Image } from "@ndla/primitives";
|
|
13
|
-
import { Figure } from "../Figure";
|
|
14
|
-
|
|
15
|
-
const StyledImageWrapper = styled.div`
|
|
16
|
-
overflow: hidden;
|
|
17
|
-
width: 260px;
|
|
18
|
-
padding-top: ${spacing.small};
|
|
19
|
-
${mq.range({ until: breakpoints.tabletWide })} {
|
|
20
|
-
margin: 0 auto;
|
|
21
|
-
}
|
|
22
|
-
&:hover {
|
|
23
|
-
img {
|
|
24
|
-
transform: scale(1.1);
|
|
25
|
-
opacity: 1.1;
|
|
26
|
-
transition-duration: 0.5s;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
`;
|
|
30
|
-
|
|
31
|
-
const StyledImage = styled(Image)`
|
|
32
|
-
object-fit: cover;
|
|
33
|
-
max-height: 162px;
|
|
34
|
-
transition: transform ${animations.durations.fast};
|
|
35
|
-
${mq.range({ until: breakpoints.tabletWide })} {
|
|
36
|
-
min-width: 260px;
|
|
37
|
-
}
|
|
38
|
-
`;
|
|
39
|
-
|
|
40
|
-
interface Props {
|
|
41
|
-
src: string;
|
|
42
|
-
alt: string;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const StyledFigure = styled(Figure)`
|
|
46
|
-
&:hover {
|
|
47
|
-
[data-open-button] {
|
|
48
|
-
background: ${colors.white};
|
|
49
|
-
svg {
|
|
50
|
-
transform: scale(1.2);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
`;
|
|
55
|
-
|
|
56
|
-
export const NotionImage = ({ src, alt }: Props) => {
|
|
57
|
-
return (
|
|
58
|
-
<StyledFigure type={"full-column"}>
|
|
59
|
-
<StyledImageWrapper>
|
|
60
|
-
<StyledImage alt={alt} src={src} />
|
|
61
|
-
</StyledImageWrapper>
|
|
62
|
-
</StyledFigure>
|
|
63
|
-
);
|
|
64
|
-
};
|
package/src/Notion/index.ts
DELETED