@ndlib/component-library 0.0.7-9.1
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/README.md +101 -0
- package/dist/FontLoader.d.ts +1 -0
- package/dist/FontLoader.js +4 -0
- package/dist/components/composites/Card/Card.stories.d.ts +13 -0
- package/dist/components/composites/Card/Card.stories.js +122 -0
- package/dist/components/composites/Card/Card.test.d.ts +1 -0
- package/dist/components/composites/Card/Card.test.js +37 -0
- package/dist/components/composites/Card/index.d.ts +36 -0
- package/dist/components/composites/Card/index.js +89 -0
- package/dist/components/composites/DragDropList/DragDropList.stories.d.ts +7 -0
- package/dist/components/composites/DragDropList/DragDropList.stories.js +32 -0
- package/dist/components/composites/DragDropList/index.d.ts +25 -0
- package/dist/components/composites/DragDropList/index.js +48 -0
- package/dist/components/composites/DropdownLinks/DropdownLinks.stories.d.ts +8 -0
- package/dist/components/composites/DropdownLinks/DropdownLinks.stories.js +25 -0
- package/dist/components/composites/DropdownLinks/DropdownLinks.test.d.ts +1 -0
- package/dist/components/composites/DropdownLinks/DropdownLinks.test.js +27 -0
- package/dist/components/composites/DropdownLinks/index.d.ts +15 -0
- package/dist/components/composites/DropdownLinks/index.js +28 -0
- package/dist/components/composites/EmptyState/EmptyState.stories.d.ts +10 -0
- package/dist/components/composites/EmptyState/EmptyState.stories.js +31 -0
- package/dist/components/composites/EmptyState/EmptyState.test.d.ts +1 -0
- package/dist/components/composites/EmptyState/EmptyState.test.js +20 -0
- package/dist/components/composites/EmptyState/index.d.ts +15 -0
- package/dist/components/composites/EmptyState/index.js +32 -0
- package/dist/components/composites/Modal/Modal.stories.d.ts +6 -0
- package/dist/components/composites/Modal/Modal.stories.js +40 -0
- package/dist/components/composites/Modal/index.d.ts +21 -0
- package/dist/components/composites/Modal/index.js +64 -0
- package/dist/components/composites/NavMenu/NavMenu.stories.d.ts +6 -0
- package/dist/components/composites/NavMenu/NavMenu.stories.js +12 -0
- package/dist/components/composites/NavMenu/NavMenu.test.d.ts +1 -0
- package/dist/components/composites/NavMenu/NavMenu.test.js +96 -0
- package/dist/components/composites/NavMenu/demo.d.ts +1 -0
- package/dist/components/composites/NavMenu/demo.js +172 -0
- package/dist/components/composites/NavMenu/index.d.ts +5 -0
- package/dist/components/composites/NavMenu/index.js +52 -0
- package/dist/components/composites/Seo/SeoDataDisplay/index.d.ts +2 -0
- package/dist/components/composites/Seo/SeoDataDisplay/index.js +9 -0
- package/dist/components/composites/Seo/index.d.ts +11 -0
- package/dist/components/composites/Seo/index.js +16 -0
- package/dist/components/composites/Seo/seo.stories.d.ts +6 -0
- package/dist/components/composites/Seo/seo.stories.js +12 -0
- package/dist/components/composites/Seo/seo.test.d.ts +1 -0
- package/dist/components/composites/Seo/seo.test.js +56 -0
- package/dist/components/composites/Seo/siteMetadata.d.ts +9 -0
- package/dist/components/composites/Seo/siteMetadata.js +16 -0
- package/dist/components/composites/SnackBar/SnackBar.stories.d.ts +8 -0
- package/dist/components/composites/SnackBar/SnackBar.stories.js +20 -0
- package/dist/components/composites/SnackBar/SnackBar.test.d.ts +1 -0
- package/dist/components/composites/SnackBar/SnackBar.test.js +75 -0
- package/dist/components/composites/SnackBar/examples.d.ts +3 -0
- package/dist/components/composites/SnackBar/examples.js +35 -0
- package/dist/components/composites/SnackBar/index.d.ts +1 -0
- package/dist/components/composites/SnackBar/index.js +45 -0
- package/dist/components/composites/StructuredData/StructuredData.stories.d.ts +6 -0
- package/dist/components/composites/StructuredData/StructuredData.stories.js +12 -0
- package/dist/components/composites/StructuredData/StructuredData.test.d.ts +1 -0
- package/dist/components/composites/StructuredData/StructuredData.test.js +48 -0
- package/dist/components/composites/StructuredData/StructuredDataDisplay/index.d.ts +2 -0
- package/dist/components/composites/StructuredData/StructuredDataDisplay/index.js +37 -0
- package/dist/components/composites/StructuredData/index.d.ts +38 -0
- package/dist/components/composites/StructuredData/index.js +58 -0
- package/dist/components/composites/StructuredData/sdEvent/index.d.ts +13 -0
- package/dist/components/composites/StructuredData/sdEvent/index.js +16 -0
- package/dist/components/composites/StructuredData/sdEvent/makeEventSchema.d.ts +15 -0
- package/dist/components/composites/StructuredData/sdEvent/makeEventSchema.js +16 -0
- package/dist/components/composites/StructuredData/sdNews/index.d.ts +11 -0
- package/dist/components/composites/StructuredData/sdNews/index.js +14 -0
- package/dist/components/composites/StructuredData/sdNews/makeNewsSchema.d.ts +12 -0
- package/dist/components/composites/StructuredData/sdNews/makeNewsSchema.js +11 -0
- package/dist/components/composites/StructuredData/sdWebsite/index.d.ts +8 -0
- package/dist/components/composites/StructuredData/sdWebsite/index.js +11 -0
- package/dist/components/composites/StructuredData/sdWebsite/makeWebPageSchema.d.ts +9 -0
- package/dist/components/composites/StructuredData/sdWebsite/makeWebPageSchema.js +9 -0
- package/dist/components/composites/StructuredData/siteMetadata.d.ts +9 -0
- package/dist/components/composites/StructuredData/siteMetadata.js +12 -0
- package/dist/components/elements/Alerts/Alert.stories.d.ts +9 -0
- package/dist/components/elements/Alerts/Alert.stories.js +41 -0
- package/dist/components/elements/Alerts/Alerts.stories.d.ts +6 -0
- package/dist/components/elements/Alerts/Alerts.stories.js +12 -0
- package/dist/components/elements/Alerts/Alerts.test.d.ts +1 -0
- package/dist/components/elements/Alerts/Alerts.test.js +61 -0
- package/dist/components/elements/Alerts/index.d.ts +14 -0
- package/dist/components/elements/Alerts/index.js +64 -0
- package/dist/components/elements/ArrowLink/ArrowLink.stories.d.ts +6 -0
- package/dist/components/elements/ArrowLink/ArrowLink.stories.js +12 -0
- package/dist/components/elements/ArrowLink/ArrowLink.test.d.ts +1 -0
- package/dist/components/elements/ArrowLink/ArrowLink.test.js +34 -0
- package/dist/components/elements/ArrowLink/index.d.ts +7 -0
- package/dist/components/elements/ArrowLink/index.js +39 -0
- package/dist/components/elements/BrandingBar/BrandingBar.stories.d.ts +6 -0
- package/dist/components/elements/BrandingBar/BrandingBar.stories.js +11 -0
- package/dist/components/elements/BrandingBar/index.d.ts +2 -0
- package/dist/components/elements/BrandingBar/index.js +52 -0
- package/dist/components/elements/Button/Button.stories.d.ts +15 -0
- package/dist/components/elements/Button/Button.stories.js +88 -0
- package/dist/components/elements/Button/Button.test.d.ts +1 -0
- package/dist/components/elements/Button/Button.test.js +39 -0
- package/dist/components/elements/Button/index.d.ts +49 -0
- package/dist/components/elements/Button/index.js +138 -0
- package/dist/components/elements/Dropdown/Dropdown.stories.d.ts +7 -0
- package/dist/components/elements/Dropdown/Dropdown.stories.js +20 -0
- package/dist/components/elements/Dropdown/index.d.ts +24 -0
- package/dist/components/elements/Dropdown/index.js +87 -0
- package/dist/components/elements/Fields/AutoComplete/AutoComplete.stories.d.ts +6 -0
- package/dist/components/elements/Fields/AutoComplete/AutoComplete.stories.js +60 -0
- package/dist/components/elements/Fields/AutoComplete/index.d.ts +11 -0
- package/dist/components/elements/Fields/AutoComplete/index.js +26 -0
- package/dist/components/elements/Fields/Checkbox/Checkbox.stories.d.ts +6 -0
- package/dist/components/elements/Fields/Checkbox/Checkbox.stories.js +17 -0
- package/dist/components/elements/Fields/Checkbox/index.d.ts +8 -0
- package/dist/components/elements/Fields/Checkbox/index.js +22 -0
- package/dist/components/elements/Fields/CheckboxGroup/CheckboxGroup.stories.d.ts +7 -0
- package/dist/components/elements/Fields/CheckboxGroup/CheckboxGroup.stories.js +26 -0
- package/dist/components/elements/Fields/CheckboxGroup/index.d.ts +16 -0
- package/dist/components/elements/Fields/CheckboxGroup/index.js +49 -0
- package/dist/components/elements/Fields/DatePicker/DatePicker.stories.d.ts +8 -0
- package/dist/components/elements/Fields/DatePicker/DatePicker.stories.js +31 -0
- package/dist/components/elements/Fields/DatePicker/index.d.ts +20 -0
- package/dist/components/elements/Fields/DatePicker/index.js +48 -0
- package/dist/components/elements/Fields/MonthPicker/MonthPicker.stories.d.ts +7 -0
- package/dist/components/elements/Fields/MonthPicker/MonthPicker.stories.js +20 -0
- package/dist/components/elements/Fields/MonthPicker/index.d.ts +13 -0
- package/dist/components/elements/Fields/MonthPicker/index.js +24 -0
- package/dist/components/elements/Fields/Radio/Radio.stories.d.ts +6 -0
- package/dist/components/elements/Fields/Radio/Radio.stories.js +17 -0
- package/dist/components/elements/Fields/Radio/index.d.ts +8 -0
- package/dist/components/elements/Fields/Radio/index.js +22 -0
- package/dist/components/elements/Fields/RadioGroup/RadioGroup.stories.d.ts +6 -0
- package/dist/components/elements/Fields/RadioGroup/RadioGroup.stories.js +23 -0
- package/dist/components/elements/Fields/RadioGroup/index.d.ts +14 -0
- package/dist/components/elements/Fields/RadioGroup/index.js +28 -0
- package/dist/components/elements/Fields/Select/Select.stories.d.ts +8 -0
- package/dist/components/elements/Fields/Select/Select.stories.js +39 -0
- package/dist/components/elements/Fields/Select/index.d.ts +18 -0
- package/dist/components/elements/Fields/Select/index.js +178 -0
- package/dist/components/elements/Fields/TextInput/TextInput.stories.d.ts +9 -0
- package/dist/components/elements/Fields/TextInput/TextInput.stories.js +35 -0
- package/dist/components/elements/Fields/TextInput/index.d.ts +45 -0
- package/dist/components/elements/Fields/TextInput/index.js +119 -0
- package/dist/components/elements/Fields/option.d.ts +16 -0
- package/dist/components/elements/Fields/option.js +3 -0
- package/dist/components/elements/Group/index.d.ts +22 -0
- package/dist/components/elements/Group/index.js +69 -0
- package/dist/components/elements/Icon/Icon.stories.d.ts +7 -0
- package/dist/components/elements/Icon/Icon.stories.js +29 -0
- package/dist/components/elements/Icon/Icon.test.d.ts +1 -0
- package/dist/components/elements/Icon/Icon.test.js +26 -0
- package/dist/components/elements/Icon/index.d.ts +10 -0
- package/dist/components/elements/Icon/index.js +34 -0
- package/dist/components/elements/Link/Link.stories.d.ts +6 -0
- package/dist/components/elements/Link/Link.stories.js +21 -0
- package/dist/components/elements/Link/Link.test.d.ts +1 -0
- package/dist/components/elements/Link/Link.test.js +58 -0
- package/dist/components/elements/Link/index.d.ts +14 -0
- package/dist/components/elements/Link/index.js +41 -0
- package/dist/components/elements/List/List.stories.d.ts +10 -0
- package/dist/components/elements/List/List.stories.js +37 -0
- package/dist/components/elements/List/List.test.d.ts +1 -0
- package/dist/components/elements/List/List.test.js +24 -0
- package/dist/components/elements/List/index.d.ts +27 -0
- package/dist/components/elements/List/index.js +103 -0
- package/dist/components/elements/ListBox/Listbox.stories.d.ts +6 -0
- package/dist/components/elements/ListBox/Listbox.stories.js +17 -0
- package/dist/components/elements/ListBox/index.d.ts +33 -0
- package/dist/components/elements/ListBox/index.js +51 -0
- package/dist/components/elements/Markdown/Markdown.stories.d.ts +10 -0
- package/dist/components/elements/Markdown/Markdown.stories.js +97 -0
- package/dist/components/elements/Markdown/Markdown.test.d.ts +1 -0
- package/dist/components/elements/Markdown/Markdown.test.js +91 -0
- package/dist/components/elements/Markdown/index.d.ts +21 -0
- package/dist/components/elements/Markdown/index.js +75 -0
- package/dist/components/elements/Pill/Pill.stories.d.ts +8 -0
- package/dist/components/elements/Pill/Pill.stories.js +40 -0
- package/dist/components/elements/Pill/Pill.test.d.ts +1 -0
- package/dist/components/elements/Pill/Pill.test.js +18 -0
- package/dist/components/elements/Pill/index.d.ts +21 -0
- package/dist/components/elements/Pill/index.js +117 -0
- package/dist/components/elements/Spinner/Spinner.stories.d.ts +7 -0
- package/dist/components/elements/Spinner/Spinner.stories.js +26 -0
- package/dist/components/elements/Spinner/Spinner.test.d.ts +1 -0
- package/dist/components/elements/Spinner/Spinner.test.js +9 -0
- package/dist/components/elements/Spinner/index.d.ts +14 -0
- package/dist/components/elements/Spinner/index.js +49 -0
- package/dist/components/elements/TabList/TabList.stories.d.ts +6 -0
- package/dist/components/elements/TabList/TabList.stories.js +12 -0
- package/dist/components/elements/TabList/TabList.test.d.ts +1 -0
- package/dist/components/elements/TabList/TabList.test.js +19 -0
- package/dist/components/elements/TabList/example.d.ts +7 -0
- package/dist/components/elements/TabList/example.js +36 -0
- package/dist/components/elements/TabList/index.d.ts +10 -0
- package/dist/components/elements/TabList/index.js +30 -0
- package/dist/components/elements/Table/Table.stories.d.ts +10 -0
- package/dist/components/elements/Table/Table.stories.js +96 -0
- package/dist/components/elements/Table/Table.test.d.ts +1 -0
- package/dist/components/elements/Table/Table.test.js +36 -0
- package/dist/components/elements/Table/index.d.ts +30 -0
- package/dist/components/elements/Table/index.js +100 -0
- package/dist/components/elements/layout/Box.d.ts +9 -0
- package/dist/components/elements/layout/Box.js +3 -0
- package/dist/components/elements/layout/Box.stories.d.ts +6 -0
- package/dist/components/elements/layout/Box.stories.js +12 -0
- package/dist/components/elements/layout/Column.d.ts +8 -0
- package/dist/components/elements/layout/Column.js +19 -0
- package/dist/components/elements/layout/Flex.stories.d.ts +10 -0
- package/dist/components/elements/layout/Flex.stories.js +26 -0
- package/dist/components/elements/layout/Flex.test.d.ts +1 -0
- package/dist/components/elements/layout/Flex.test.js +34 -0
- package/dist/components/elements/layout/Row.d.ts +20 -0
- package/dist/components/elements/layout/Row.js +52 -0
- package/dist/components/elements/text/Heading/Heading.stories.d.ts +8 -0
- package/dist/components/elements/text/Heading/Heading.stories.js +35 -0
- package/dist/components/elements/text/Heading/Heading.test.d.ts +1 -0
- package/dist/components/elements/text/Heading/Heading.test.js +51 -0
- package/dist/components/elements/text/Heading/index.d.ts +20 -0
- package/dist/components/elements/text/Heading/index.js +62 -0
- package/dist/components/elements/text/Inline/Inline.stories.d.ts +6 -0
- package/dist/components/elements/text/Inline/Inline.stories.js +12 -0
- package/dist/components/elements/text/Inline/index.d.ts +6 -0
- package/dist/components/elements/text/Inline/index.js +21 -0
- package/dist/components/elements/text/Label/Label.stories.d.ts +6 -0
- package/dist/components/elements/text/Label/Label.stories.js +20 -0
- package/dist/components/elements/text/Label/Label.test.d.ts +1 -0
- package/dist/components/elements/text/Label/Label.test.js +56 -0
- package/dist/components/elements/text/Label/index.d.ts +20 -0
- package/dist/components/elements/text/Label/index.js +38 -0
- package/dist/components/elements/text/Paragraph/Paragraph.stories.d.ts +6 -0
- package/dist/components/elements/text/Paragraph/Paragraph.stories.js +25 -0
- package/dist/components/elements/text/Paragraph/Paragraph.test.d.ts +1 -0
- package/dist/components/elements/text/Paragraph/Paragraph.test.js +9 -0
- package/dist/components/elements/text/Paragraph/index.d.ts +14 -0
- package/dist/components/elements/text/Paragraph/index.js +29 -0
- package/dist/components/elements/text/ReadMore/ReadMore.stories.d.ts +8 -0
- package/dist/components/elements/text/ReadMore/ReadMore.stories.js +26 -0
- package/dist/components/elements/text/ReadMore/index.d.ts +12 -0
- package/dist/components/elements/text/ReadMore/index.js +71 -0
- package/dist/components/providers/alerts.d.ts +41 -0
- package/dist/components/providers/alerts.js +133 -0
- package/dist/components/providers/componentConfig.d.ts +25 -0
- package/dist/components/providers/componentConfig.js +37 -0
- package/dist/components/providers/dialogs.d.ts +9 -0
- package/dist/components/providers/dialogs.js +32 -0
- package/dist/components/providers/env.d.ts +14 -0
- package/dist/components/providers/env.js +25 -0
- package/dist/components/providers/media.d.ts +8 -0
- package/dist/components/providers/media.js +43 -0
- package/dist/components/providers/menu.d.ts +46 -0
- package/dist/components/providers/menu.js +304 -0
- package/dist/components/providers/snackBar.d.ts +23 -0
- package/dist/components/providers/snackBar.js +53 -0
- package/dist/components/providers/ui.d.ts +18 -0
- package/dist/components/providers/ui.js +16 -0
- package/dist/components/providers/uniqueIds.d.ts +3 -0
- package/dist/components/providers/uniqueIds.js +23 -0
- package/dist/components/providers/uniqueIds.test.d.ts +1 -0
- package/dist/components/providers/uniqueIds.test.js +26 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.js +51 -0
- package/dist/theme/Color.stories.d.ts +5 -0
- package/dist/theme/Color.stories.js +63 -0
- package/dist/theme/GlobalStyles.d.ts +1 -0
- package/dist/theme/GlobalStyles.js +167 -0
- package/dist/theme/Typography.stories.d.ts +5 -0
- package/dist/theme/Typography.stories.js +44 -0
- package/dist/theme/colors.d.ts +51 -0
- package/dist/theme/colors.js +97 -0
- package/dist/theme/custom.d.ts +11 -0
- package/dist/theme/custom.js +13 -0
- package/dist/theme/index.d.ts +185 -0
- package/dist/theme/index.js +25 -0
- package/dist/theme/spacing.d.ts +0 -0
- package/dist/theme/spacing.js +1 -0
- package/dist/theme/typography.d.ts +100 -0
- package/dist/theme/typography.js +206 -0
- package/dist/utils/hooks/useCheckMidClick.d.ts +8 -0
- package/dist/utils/hooks/useCheckMidClick.js +17 -0
- package/dist/utils/hooks/useCheckMidKeyPress.d.ts +9 -0
- package/dist/utils/hooks/useCheckMidKeyPress.js +23 -0
- package/dist/utils/hooks/useHover.d.ts +7 -0
- package/dist/utils/hooks/useHover.js +12 -0
- package/dist/utils/hooks/useStorage.d.ts +14 -0
- package/dist/utils/hooks/useStorage.js +37 -0
- package/dist/utils/misc.d.ts +14 -0
- package/dist/utils/misc.js +19 -0
- package/dist/utils/sortByKey.d.ts +12 -0
- package/dist/utils/sortByKey.js +20 -0
- package/dist/utils/test.d.ts +2 -0
- package/dist/utils/test.js +9 -0
- package/package.json +98 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { siteMetadata } from './siteMetadata';
|
|
3
|
+
export const Seo = ({ title, description, image, nofollow, noindex, }) => {
|
|
4
|
+
const { title: defaultTitle, description: defaultDescription, image: defaultImage, nofollow: defaultNoindex, noindex: defaultNofollow, siteUrl, twitterUsername, } = siteMetadata();
|
|
5
|
+
const seo = {
|
|
6
|
+
title: title || defaultTitle,
|
|
7
|
+
description: description || defaultDescription,
|
|
8
|
+
image: image ? image : defaultImage,
|
|
9
|
+
url: siteUrl + location.pathname || '',
|
|
10
|
+
nofollow: nofollow || defaultNofollow,
|
|
11
|
+
noindex: noindex || defaultNoindex,
|
|
12
|
+
twitterUsername,
|
|
13
|
+
};
|
|
14
|
+
return (_jsxs("head", { children: [seo.title ? _jsx("title", Object.assign({ "data-testid": "seo-title" }, { children: seo.title })) : null, seo.title ? (_jsx("meta", { "data-testid": "seo-twitter-title", name: "twitter:title", content: seo.title })) : null, seo.title ? (_jsx("meta", { "data-testid": "seo-og-title", property: "og:title", content: seo.title })) : null, seo.url ? (_jsx("meta", { "data-testid": "seo-twitter-url", name: "twitter:url", content: seo.url })) : null, seo.url ? (_jsx("meta", { "data-testid": "seo-og-url", property: "og:url", content: seo.url })) : null, seo.description ? (_jsx("meta", { "data-testid": "seo-twitter-description", name: "twitter:description", content: seo.description })) : null, seo.description ? (_jsx("meta", { "data-testid": "seo-og-description", property: "og:description", content: seo.description })) : null, seo.image ? (_jsx("meta", { "data-testid": "seo-twitter-image", name: "twitter:image", content: seo.image })) : null, seo.image ? (_jsx("meta", { "data-testid": "seo-og-image", name: "og:image", content: seo.image })) : null, seo.twitterUsername ? (_jsx("meta", { "data-testid": "seo-twitter-creator", name: "twitter:creator", content: seo.twitterUsername })) : null, seo.nofollow ? (_jsx("meta", { "data-testid": "seo-nofollow", name: "robots", content: "nofollow" })) : null, seo.noindex ? (_jsx("meta", { "data-testid": "seo-noindex", name: "robots", content: "noindex" })) : null, _jsx("meta", { name: "twitter:card", content: "summary_large_image" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1" })] }));
|
|
15
|
+
};
|
|
16
|
+
export default Seo;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import SeoDataDisplay from './SeoDataDisplay';
|
|
3
|
+
import Seo from './index';
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Composites/Seo',
|
|
6
|
+
component: Seo,
|
|
7
|
+
tags: ['autodocs'],
|
|
8
|
+
};
|
|
9
|
+
export default meta;
|
|
10
|
+
export const Default = {
|
|
11
|
+
render: () => (_jsx(_Fragment, { children: _jsx(SeoDataDisplay, {}) })),
|
|
12
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { render } from '../../../utils/test';
|
|
3
|
+
import { screen } from '@testing-library/dom';
|
|
4
|
+
import { Seo } from './index';
|
|
5
|
+
const title = 'Component Library';
|
|
6
|
+
const description = 'Component Library for the Hesburgh Libraries';
|
|
7
|
+
const image = '/image.png';
|
|
8
|
+
const nofollow = true;
|
|
9
|
+
const noindex = true;
|
|
10
|
+
describe('Seo', () => {
|
|
11
|
+
it('renders meta tag for title', () => {
|
|
12
|
+
render(_jsx(Seo, { title: title }));
|
|
13
|
+
const element = screen.getByTestId('seo-title');
|
|
14
|
+
expect(element).toContainHTML('Component Library');
|
|
15
|
+
});
|
|
16
|
+
it('renders meta tag for twitter title', () => {
|
|
17
|
+
render(_jsx(Seo, { title: title }));
|
|
18
|
+
const element = screen.getByTestId('seo-twitter-title');
|
|
19
|
+
expect(element).toContainHTML('Component Library');
|
|
20
|
+
});
|
|
21
|
+
it('renders meta tag for open graph title', () => {
|
|
22
|
+
render(_jsx(Seo, { title: title }));
|
|
23
|
+
const element = screen.getByTestId('seo-og-title');
|
|
24
|
+
expect(element).toContainHTML('Component Library');
|
|
25
|
+
});
|
|
26
|
+
it('renders meta tag for twitter description', () => {
|
|
27
|
+
render(_jsx(Seo, { description: description }));
|
|
28
|
+
const element = screen.getByTestId('seo-twitter-description');
|
|
29
|
+
expect(element).toContainHTML('Component Library for the Hesburgh Libraries');
|
|
30
|
+
});
|
|
31
|
+
it('renders meta tag for open graph description', () => {
|
|
32
|
+
render(_jsx(Seo, { description: description }));
|
|
33
|
+
const element = screen.getByTestId('seo-og-description');
|
|
34
|
+
expect(element).toContainHTML('Component Library for the Hesburgh Libraries');
|
|
35
|
+
});
|
|
36
|
+
it('renders meta tag for twitter image', () => {
|
|
37
|
+
render(_jsx(Seo, { image: image }));
|
|
38
|
+
const element = screen.getByTestId('seo-twitter-image');
|
|
39
|
+
expect(element).toContainHTML('/image.png');
|
|
40
|
+
});
|
|
41
|
+
it('renders meta tag for og image', () => {
|
|
42
|
+
render(_jsx(Seo, { image: image }));
|
|
43
|
+
const element = screen.getByTestId('seo-og-image');
|
|
44
|
+
expect(element).toContainHTML('/image.png');
|
|
45
|
+
});
|
|
46
|
+
it('renders meta tag for nofollow', () => {
|
|
47
|
+
render(_jsx(Seo, { nofollow: nofollow }));
|
|
48
|
+
const element = screen.getByTestId('seo-nofollow');
|
|
49
|
+
expect(element).toContainHTML('nofollow');
|
|
50
|
+
});
|
|
51
|
+
it('renders meta tag for noindex', () => {
|
|
52
|
+
render(_jsx(Seo, { noindex: noindex }));
|
|
53
|
+
const element = screen.getByTestId('seo-noindex');
|
|
54
|
+
expect(element).toContainHTML('noindex');
|
|
55
|
+
});
|
|
56
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const siteMetadata = () => {
|
|
2
|
+
const data = {
|
|
3
|
+
site: {
|
|
4
|
+
siteMetadata: {
|
|
5
|
+
title: 'Hesburgh Component Library',
|
|
6
|
+
image: '/images/fakeimage.png',
|
|
7
|
+
description: 'Component library for the Hesburgh Libraries',
|
|
8
|
+
twitterUsername: 'hlibraries',
|
|
9
|
+
siteUrl: 'https://www.library.nd.edu',
|
|
10
|
+
nofollow: false,
|
|
11
|
+
noindex: false,
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
return data.site.siteMetadata;
|
|
16
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SnackBar } from './';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
declare const meta: Meta<typeof SnackBar>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof SnackBar>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const ReplaceMessage: Story;
|
|
8
|
+
export declare const WipeMessages: Story;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { SnackBar } from './';
|
|
3
|
+
import { BasicExample, ReplaceMessageExample, WipeMessagesExample, } from './examples';
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Composites/SnackBar',
|
|
6
|
+
component: SnackBar,
|
|
7
|
+
};
|
|
8
|
+
export default meta;
|
|
9
|
+
export const Default = {
|
|
10
|
+
render: () => _jsx(BasicExample, {}),
|
|
11
|
+
args: {},
|
|
12
|
+
};
|
|
13
|
+
export const ReplaceMessage = {
|
|
14
|
+
render: () => _jsx(ReplaceMessageExample, {}),
|
|
15
|
+
args: {},
|
|
16
|
+
};
|
|
17
|
+
export const WipeMessages = {
|
|
18
|
+
render: () => _jsx(WipeMessagesExample, {}),
|
|
19
|
+
args: {},
|
|
20
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { act, fireEvent, waitFor } from '@testing-library/react';
|
|
3
|
+
import { vi } from 'vitest';
|
|
4
|
+
import { render } from '../../../utils/test';
|
|
5
|
+
import { BasicExample, ReplaceMessageExample, WipeMessagesExample, } from './examples';
|
|
6
|
+
vi.useFakeTimers();
|
|
7
|
+
describe('SnackBar', () => {
|
|
8
|
+
it('supports adding messages', () => {
|
|
9
|
+
const { getByText } = render(_jsx(BasicExample, {}));
|
|
10
|
+
expect(() => getByText('Message 1')).toThrow();
|
|
11
|
+
const addButton = getByText('Add Message');
|
|
12
|
+
act(() => {
|
|
13
|
+
fireEvent.click(addButton);
|
|
14
|
+
});
|
|
15
|
+
expect(getByText('Message 1')).toBeInTheDocument();
|
|
16
|
+
act(() => {
|
|
17
|
+
fireEvent.click(addButton);
|
|
18
|
+
});
|
|
19
|
+
expect(getByText('Message 1')).toBeInTheDocument();
|
|
20
|
+
expect(getByText('Message 2')).toBeInTheDocument();
|
|
21
|
+
act(() => {
|
|
22
|
+
vi.runAllTimers();
|
|
23
|
+
});
|
|
24
|
+
waitFor(() => {
|
|
25
|
+
expect(() => getByText('Message 1')).toThrow();
|
|
26
|
+
expect(() => getByText('Message 2')).toThrow();
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
it('supports replacing messages', () => {
|
|
30
|
+
const { getByText } = render(_jsx(ReplaceMessageExample, {}));
|
|
31
|
+
expect(() => getByText('Message 1')).toThrow();
|
|
32
|
+
const addButton = getByText('Add Message');
|
|
33
|
+
act(() => {
|
|
34
|
+
fireEvent.click(addButton);
|
|
35
|
+
});
|
|
36
|
+
expect(getByText('Message 1')).toBeInTheDocument();
|
|
37
|
+
act(() => {
|
|
38
|
+
fireEvent.click(addButton);
|
|
39
|
+
});
|
|
40
|
+
expect(() => getByText('Message 1')).toThrow();
|
|
41
|
+
expect(getByText('Message 2')).toBeInTheDocument();
|
|
42
|
+
act(() => {
|
|
43
|
+
vi.runAllTimers();
|
|
44
|
+
});
|
|
45
|
+
waitFor(() => {
|
|
46
|
+
expect(() => getByText('Message 2')).toThrow();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
it('supports wiping messages', () => {
|
|
50
|
+
const { getByText } = render(_jsx(WipeMessagesExample, {}));
|
|
51
|
+
expect(() => getByText('Message 1')).toThrow();
|
|
52
|
+
const addButton = getByText('Add Message');
|
|
53
|
+
act(() => {
|
|
54
|
+
fireEvent.click(addButton);
|
|
55
|
+
});
|
|
56
|
+
act(() => {
|
|
57
|
+
fireEvent.click(addButton);
|
|
58
|
+
});
|
|
59
|
+
expect(getByText('Message 1')).toBeInTheDocument();
|
|
60
|
+
expect(getByText('Message 2')).toBeInTheDocument();
|
|
61
|
+
const wipeButton = getByText('Wipe and Add');
|
|
62
|
+
act(() => {
|
|
63
|
+
fireEvent.click(wipeButton);
|
|
64
|
+
});
|
|
65
|
+
expect(() => getByText('Message 1')).toThrow();
|
|
66
|
+
expect(() => getByText('Message 2')).toThrow();
|
|
67
|
+
expect(getByText('Message 3')).toBeInTheDocument();
|
|
68
|
+
act(() => {
|
|
69
|
+
vi.runAllTimers();
|
|
70
|
+
});
|
|
71
|
+
waitFor(() => {
|
|
72
|
+
expect(() => getByText('Message 3')).toThrow();
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { useSnackBar } from '../../providers/snackBar';
|
|
4
|
+
import { Row } from '../../elements/layout/Row';
|
|
5
|
+
import { Button } from '../../elements/Button';
|
|
6
|
+
import { SnackBar } from '.';
|
|
7
|
+
export const BasicExample = () => {
|
|
8
|
+
const { addMessage } = useSnackBar();
|
|
9
|
+
const [messageCount, setMessageCount] = useState(1);
|
|
10
|
+
return (_jsxs(_Fragment, { children: [_jsx(Button, Object.assign({ onClick: () => {
|
|
11
|
+
setMessageCount(messageCount + 1);
|
|
12
|
+
addMessage({ message: `Message ${messageCount}` });
|
|
13
|
+
} }, { children: "Add Message" })), _jsx(SnackBar, {})] }));
|
|
14
|
+
};
|
|
15
|
+
export const ReplaceMessageExample = () => {
|
|
16
|
+
const { addMessage } = useSnackBar();
|
|
17
|
+
const [messageCount, setMessageCount] = useState(1);
|
|
18
|
+
return (_jsxs(_Fragment, { children: [_jsx(Button, Object.assign({ onClick: () => {
|
|
19
|
+
setMessageCount(messageCount + 1);
|
|
20
|
+
addMessage({ message: `Message ${messageCount}`, id: 'same-id' });
|
|
21
|
+
} }, { children: "Add Message" })), _jsx(SnackBar, {})] }));
|
|
22
|
+
};
|
|
23
|
+
export const WipeMessagesExample = () => {
|
|
24
|
+
const { addMessage } = useSnackBar();
|
|
25
|
+
const [messageCount, setMessageCount] = useState(1);
|
|
26
|
+
return (_jsxs(Row, { children: [_jsx(Button, Object.assign({ onClick: () => {
|
|
27
|
+
setMessageCount((count) => count + 1);
|
|
28
|
+
addMessage({ message: `Message ${messageCount}` });
|
|
29
|
+
}, sx: { mr: 1 } }, { children: "Add Message" })), _jsx(Button, Object.assign({ onClick: () => {
|
|
30
|
+
setMessageCount((count) => count + 1);
|
|
31
|
+
addMessage({ message: `Message ${messageCount}` }, {
|
|
32
|
+
wipePrevious: true,
|
|
33
|
+
});
|
|
34
|
+
} }, { children: "Wipe and Add" })), _jsx(SnackBar, {})] }));
|
|
35
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const SnackBar: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { keyframes } from '@emotion/react';
|
|
3
|
+
import { COLOR } from '../../../theme/colors';
|
|
4
|
+
import { TYPOGRAPHY_TYPE, getTypographyStyles } from '../../../theme/typography';
|
|
5
|
+
import { BUTTON_TYPE, Button } from '../../elements/Button';
|
|
6
|
+
import { Box } from '../../elements/layout/Box';
|
|
7
|
+
import { Column } from '../../elements/layout/Column';
|
|
8
|
+
import { Row } from '../../elements/layout/Row';
|
|
9
|
+
import { useSnackBar } from '../../providers/snackBar';
|
|
10
|
+
import CloseIcon from '@mui/icons-material/Close';
|
|
11
|
+
import { Z_INDEX } from '../../../theme/custom';
|
|
12
|
+
const getTransformForMessageCount = (messageCount) => messageCount ? `translateY(-${messageCount * 4 + 1}rem)` : '0rem';
|
|
13
|
+
const getAnimation = (messageCount, previousMessageCount) => {
|
|
14
|
+
return keyframes `
|
|
15
|
+
from {
|
|
16
|
+
transform: ${getTransformForMessageCount(previousMessageCount)};
|
|
17
|
+
}
|
|
18
|
+
to {
|
|
19
|
+
transform: ${getTransformForMessageCount(messageCount)};
|
|
20
|
+
}
|
|
21
|
+
`;
|
|
22
|
+
};
|
|
23
|
+
export const SnackBar = () => {
|
|
24
|
+
const { messages, removeMessage, previousMessageCount } = useSnackBar();
|
|
25
|
+
const typographyStyles = getTypographyStyles(TYPOGRAPHY_TYPE.CONDENSED_TEXT_MEDIUM);
|
|
26
|
+
const animation = getAnimation(messages.length, previousMessageCount);
|
|
27
|
+
const animationStyle = `${animation} 100ms linear 1 forwards`;
|
|
28
|
+
return (_jsx(Column, Object.assign({ sx: {
|
|
29
|
+
position: 'fixed',
|
|
30
|
+
left: 0,
|
|
31
|
+
top: '100%',
|
|
32
|
+
width: '100vw',
|
|
33
|
+
display: 'flex',
|
|
34
|
+
alignItems: 'center',
|
|
35
|
+
pb: 3,
|
|
36
|
+
animation: animationStyle,
|
|
37
|
+
zIndex: Z_INDEX.DIALOG,
|
|
38
|
+
} }, { children: messages.map((message) => (_jsxs(Row, Object.assign({ sx: Object.assign({ width: ['90vw', '500px'], height: '56px', borderRadius: '4px', p: 4, mt: '0.5rem', border: '1px solid', bg: COLOR.PRIMARY, color: COLOR.WHITE, justifyContent: 'space-between', alignItems: 'center' }, typographyStyles) }, { children: [_jsx(Box, Object.assign({ sx: {
|
|
39
|
+
overflow: 'hidden',
|
|
40
|
+
whiteSpace: 'nowrap',
|
|
41
|
+
textOverflow: 'ellipsis',
|
|
42
|
+
}, "aria-live": "polite" }, { children: message.message })), _jsx(Box, { children: _jsx(Button, { "aria-label": "Dismiss Notice", type: BUTTON_TYPE.TEXT, primaryIcon: CloseIcon, onClick: () => {
|
|
43
|
+
removeMessage(message.id);
|
|
44
|
+
}, textColor: COLOR.WHITE }) })] }), message.id))) })));
|
|
45
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import StructuredDataDisplay from './StructuredDataDisplay';
|
|
3
|
+
import StructuredData from './index';
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Composites/StructuredData',
|
|
6
|
+
component: StructuredData,
|
|
7
|
+
tags: ['autodocs'],
|
|
8
|
+
};
|
|
9
|
+
export default meta;
|
|
10
|
+
export const Default = {
|
|
11
|
+
render: () => (_jsx(_Fragment, { children: _jsx(StructuredDataDisplay, {}) })),
|
|
12
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { getStructuredDataSchemas } from './';
|
|
2
|
+
describe('getStructuredDataSchemas', () => {
|
|
3
|
+
it('should generate structured data schemas with default data', () => {
|
|
4
|
+
const schemas = getStructuredDataSchemas({});
|
|
5
|
+
expect(schemas[0]).toContain('Hesburgh Component Library');
|
|
6
|
+
expect(schemas).toHaveLength(1);
|
|
7
|
+
console.log(schemas);
|
|
8
|
+
});
|
|
9
|
+
it('should generate structured data schemas with custom data', () => {
|
|
10
|
+
const customData = {
|
|
11
|
+
title: 'Custom Title',
|
|
12
|
+
description: 'Custom Description',
|
|
13
|
+
events: [
|
|
14
|
+
{
|
|
15
|
+
title: 'Archival Research Lab II: Inside the Archive',
|
|
16
|
+
startDate: '2021-10-13T14:00:00.000Z',
|
|
17
|
+
endDate: '2021-10-13T15:15:00.000Z',
|
|
18
|
+
slug: 'archival-research-lab-2-inside-the-archive-2021-10-13',
|
|
19
|
+
shortDescription: 'This two-session workshop provides an introduction to advanced archival research.',
|
|
20
|
+
representationalImage: {
|
|
21
|
+
url: 'https://strapi-prod-library-website-contentbucket52d4b12c-1whgwwl6746tz.s3.amazonaws.com/events_hl_workshop_1403f3079f.jpg?AWSAccessKeyId=AKIATLJDMPVTNRHRTTAL&Expires=1698764137&Signature=oDIw1iGhnDLsDcvvlSHOn5KSRrI%3D',
|
|
22
|
+
},
|
|
23
|
+
location: {
|
|
24
|
+
address: '103 Hesburgh Library, Rare Books & Special Collections',
|
|
25
|
+
},
|
|
26
|
+
locationText: {
|
|
27
|
+
name: 'Hesburgh Concourse',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
news: [
|
|
32
|
+
{
|
|
33
|
+
title: 'Preservation Week 2023: Tips from the Hesburgh Libraries Preservation Team',
|
|
34
|
+
author: 'Hesburgh Libraries Analog Preservation and Conservation Unit',
|
|
35
|
+
shortDescription: 'Hesburgh Libraries preservation experts offer some helpful tips on safely preserving your valued collections.',
|
|
36
|
+
image: {
|
|
37
|
+
url: 'https://strapi-prod-library-website-contentbucket52d4b12c-1whgwwl6746tz.s3.amazonaws.com/Preservation_Week_Rep_f85c55dd55.png?AWSAccessKeyId=AKIATLJDMPVTNRHRTTAL&Expires=1698764137&Signature=9jjAAAXWqJ7kBK4Tn5G7jvGK%2BfA%3D',
|
|
38
|
+
},
|
|
39
|
+
slug: 'preservation-week-2023',
|
|
40
|
+
publishedDate: '2023-04-30T04:00:00.000Z',
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
const schemas = getStructuredDataSchemas(customData);
|
|
45
|
+
expect(schemas).toHaveLength(3);
|
|
46
|
+
expect(schemas[0]).toContain('Custom Title');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { getStructuredDataSchemas } from '../index';
|
|
3
|
+
export const StructuredDataDisplay = () => {
|
|
4
|
+
const events = [
|
|
5
|
+
{
|
|
6
|
+
title: 'Archival Research Lab II: Inside the Archive',
|
|
7
|
+
startDate: '2021-10-13T14:00:00.000Z',
|
|
8
|
+
endDate: '2021-10-13T15:15:00.000Z',
|
|
9
|
+
slug: 'archival-research-lab-2-inside-the-archive-2021-10-13',
|
|
10
|
+
shortDescription: 'This two-session workshop provides an introduction to advanced archival research.',
|
|
11
|
+
representationalImage: {
|
|
12
|
+
url: 'https://strapi-prod-library-website-contentbucket52d4b12c-1whgwwl6746tz.s3.amazonaws.com/events_hl_workshop_1403f3079f.jpg?AWSAccessKeyId=AKIATLJDMPVTNRHRTTAL&Expires=1698764137&Signature=oDIw1iGhnDLsDcvvlSHOn5KSRrI%3D',
|
|
13
|
+
},
|
|
14
|
+
location: {
|
|
15
|
+
address: '103 Hesburgh Library, Rare Books & Special Collections',
|
|
16
|
+
},
|
|
17
|
+
locationText: {
|
|
18
|
+
name: 'Hesburgh Concourse',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
const news = [
|
|
23
|
+
{
|
|
24
|
+
title: 'Preservation Week 2023: Tips from the Hesburgh Libraries Preservation Team',
|
|
25
|
+
author: 'Hesburgh Libraries Analog Preservation and Conservation Unit',
|
|
26
|
+
shortDescription: 'Hesburgh Libraries preservation experts offer some helpful tips on safely preserving your valued collections.',
|
|
27
|
+
image: {
|
|
28
|
+
url: 'https://strapi-prod-library-website-contentbucket52d4b12c-1whgwwl6746tz.s3.amazonaws.com/Preservation_Week_Rep_f85c55dd55.png?AWSAccessKeyId=AKIATLJDMPVTNRHRTTAL&Expires=1698764137&Signature=9jjAAAXWqJ7kBK4Tn5G7jvGK%2BfA%3D',
|
|
29
|
+
},
|
|
30
|
+
slug: 'preservation-week-2023',
|
|
31
|
+
publishedDate: '2023-04-30T04:00:00.000Z',
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
const schemas = getStructuredDataSchemas({ events: events, news: news });
|
|
35
|
+
return (_jsx(_Fragment, { children: schemas.map((schema, index) => (_jsxs("pre", { children: [_jsx("code", { children: schema }), _jsx("br", {})] }, index))) }));
|
|
36
|
+
};
|
|
37
|
+
export default StructuredDataDisplay;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export type StructuredDataProps = {
|
|
3
|
+
title?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
siteUrl?: string;
|
|
6
|
+
nofollow?: string;
|
|
7
|
+
noindex?: string;
|
|
8
|
+
image?: string;
|
|
9
|
+
events?: {
|
|
10
|
+
title: string;
|
|
11
|
+
startDate: string;
|
|
12
|
+
endDate: string;
|
|
13
|
+
slug: string;
|
|
14
|
+
shortDescription: string;
|
|
15
|
+
representationalImage: {
|
|
16
|
+
url: string;
|
|
17
|
+
};
|
|
18
|
+
location: {
|
|
19
|
+
address: string;
|
|
20
|
+
};
|
|
21
|
+
locationText: {
|
|
22
|
+
name: string;
|
|
23
|
+
};
|
|
24
|
+
}[];
|
|
25
|
+
news?: {
|
|
26
|
+
title: string;
|
|
27
|
+
author: string;
|
|
28
|
+
shortDescription: string;
|
|
29
|
+
image: {
|
|
30
|
+
url: string;
|
|
31
|
+
};
|
|
32
|
+
slug: string;
|
|
33
|
+
publishedDate: string;
|
|
34
|
+
}[];
|
|
35
|
+
};
|
|
36
|
+
export declare const getStructuredDataSchemas: ({ title, description, nofollow, noindex, image, events, news, }: StructuredDataProps) => string[];
|
|
37
|
+
export declare const StructuredData: React.FC<StructuredDataProps>;
|
|
38
|
+
export default StructuredData;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { siteMetadata } from './siteMetadata';
|
|
3
|
+
import { stringifyWebpageSchema } from './sdWebsite';
|
|
4
|
+
import { stringifyEventSchema } from './sdEvent';
|
|
5
|
+
import { stringifyNewsSchema } from './sdNews';
|
|
6
|
+
export const getStructuredDataSchemas = ({ title, description, nofollow, noindex, image, events, news, }) => {
|
|
7
|
+
const { title: defaultTitle, description: defaultDescription, image: defaultImage, siteUrl, nofollow: defaultNofollow, noindex: defaultNoindex, } = siteMetadata();
|
|
8
|
+
const metadata = {
|
|
9
|
+
title: title || defaultTitle,
|
|
10
|
+
description: description || defaultDescription,
|
|
11
|
+
nofollow: nofollow || defaultNofollow,
|
|
12
|
+
noindex: noindex || defaultNoindex,
|
|
13
|
+
image: image || defaultImage,
|
|
14
|
+
url: `${siteUrl}${location.pathname || ''}`,
|
|
15
|
+
lang: 'en',
|
|
16
|
+
events: events,
|
|
17
|
+
news: news,
|
|
18
|
+
};
|
|
19
|
+
const schemas = [];
|
|
20
|
+
if (location.pathname !== '') {
|
|
21
|
+
schemas.push(stringifyWebpageSchema({
|
|
22
|
+
name: metadata.title,
|
|
23
|
+
description: metadata.description,
|
|
24
|
+
url: metadata.url,
|
|
25
|
+
lang: metadata.lang,
|
|
26
|
+
}));
|
|
27
|
+
events === null || events === void 0 ? void 0 : events.map((event) => {
|
|
28
|
+
schemas.push(stringifyEventSchema({
|
|
29
|
+
title: event.title,
|
|
30
|
+
description: event.shortDescription,
|
|
31
|
+
image: event.representationalImage.url,
|
|
32
|
+
url: event.slug,
|
|
33
|
+
startDate: event.startDate,
|
|
34
|
+
endDate: event.endDate,
|
|
35
|
+
eventLocation: event.location.address,
|
|
36
|
+
eventLocationName: event.locationText.name,
|
|
37
|
+
siteUrl: siteUrl,
|
|
38
|
+
}));
|
|
39
|
+
});
|
|
40
|
+
news === null || news === void 0 ? void 0 : news.map((article) => {
|
|
41
|
+
schemas.push(stringifyNewsSchema({
|
|
42
|
+
title: article.title,
|
|
43
|
+
abstract: article.shortDescription,
|
|
44
|
+
author: article.author,
|
|
45
|
+
image: article.image.url,
|
|
46
|
+
url: article.slug,
|
|
47
|
+
publishedDate: article.publishedDate,
|
|
48
|
+
siteUrl: siteUrl,
|
|
49
|
+
}));
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return schemas;
|
|
53
|
+
};
|
|
54
|
+
export const StructuredData = (props) => {
|
|
55
|
+
const schemas = getStructuredDataSchemas(props);
|
|
56
|
+
return (_jsx(_Fragment, { children: schemas.map((schema, index) => (_jsx("script", Object.assign({ type: "application/ld+json" }, { children: schema }), index))) }));
|
|
57
|
+
};
|
|
58
|
+
export default StructuredData;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface SdEventProps {
|
|
2
|
+
title: string;
|
|
3
|
+
startDate?: string;
|
|
4
|
+
endDate?: string;
|
|
5
|
+
description: string;
|
|
6
|
+
eventLocation?: string;
|
|
7
|
+
eventLocationName?: string;
|
|
8
|
+
image?: string;
|
|
9
|
+
url?: string;
|
|
10
|
+
siteUrl?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const stringifyEventSchema: (props: SdEventProps) => string;
|
|
13
|
+
export default stringifyEventSchema;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { makeEventSchema } from './makeEventSchema';
|
|
2
|
+
export const stringifyEventSchema = ({ title, description, startDate, endDate, eventLocation, eventLocationName, image, url, siteUrl, }) => {
|
|
3
|
+
const eventSchema = makeEventSchema({
|
|
4
|
+
title: title,
|
|
5
|
+
startDate: startDate,
|
|
6
|
+
endDate: endDate,
|
|
7
|
+
description: description,
|
|
8
|
+
image: image,
|
|
9
|
+
eventLocation: eventLocation,
|
|
10
|
+
eventLocationName: eventLocationName,
|
|
11
|
+
url: url,
|
|
12
|
+
siteUrl: siteUrl,
|
|
13
|
+
});
|
|
14
|
+
return JSON.stringify(eventSchema, null, 2);
|
|
15
|
+
};
|
|
16
|
+
export default stringifyEventSchema;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Event } from 'schema-dts';
|
|
2
|
+
type Params = {
|
|
3
|
+
title: string;
|
|
4
|
+
startDate?: string;
|
|
5
|
+
endDate?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
location?: string;
|
|
8
|
+
eventLocation?: string;
|
|
9
|
+
eventLocationName?: string;
|
|
10
|
+
image?: string;
|
|
11
|
+
url?: string;
|
|
12
|
+
siteUrl?: string;
|
|
13
|
+
};
|
|
14
|
+
export declare const makeEventSchema: (params: Params) => Event;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const makeEventSchema = (params) => {
|
|
2
|
+
return {
|
|
3
|
+
'@type': 'Event',
|
|
4
|
+
name: params.title,
|
|
5
|
+
startDate: params.startDate,
|
|
6
|
+
endDate: params.endDate,
|
|
7
|
+
description: params.description,
|
|
8
|
+
image: params.image,
|
|
9
|
+
url: params.siteUrl + '/event/' + params.url,
|
|
10
|
+
location: {
|
|
11
|
+
'@type': 'Place',
|
|
12
|
+
name: params.eventLocationName,
|
|
13
|
+
address: params.eventLocation,
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface SdNewsProps {
|
|
2
|
+
title: string;
|
|
3
|
+
author: string;
|
|
4
|
+
abstract: string;
|
|
5
|
+
image?: string;
|
|
6
|
+
url?: string;
|
|
7
|
+
publishedDate?: string;
|
|
8
|
+
siteUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const stringifyNewsSchema: (props: SdNewsProps) => string;
|
|
11
|
+
export default stringifyNewsSchema;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { makeNewsSchema } from './makeNewsSchema';
|
|
2
|
+
export const stringifyNewsSchema = ({ title, author, abstract, image, url, publishedDate, siteUrl, }) => {
|
|
3
|
+
const newsSchema = makeNewsSchema({
|
|
4
|
+
title: title,
|
|
5
|
+
author: author,
|
|
6
|
+
abstract: abstract,
|
|
7
|
+
image: image,
|
|
8
|
+
url: url,
|
|
9
|
+
publishedDate: publishedDate,
|
|
10
|
+
siteUrl: siteUrl,
|
|
11
|
+
});
|
|
12
|
+
return JSON.stringify(newsSchema, null, 2);
|
|
13
|
+
};
|
|
14
|
+
export default stringifyNewsSchema;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { NewsArticle } from 'schema-dts';
|
|
2
|
+
type Params = {
|
|
3
|
+
title: string;
|
|
4
|
+
author: string;
|
|
5
|
+
abstract?: string;
|
|
6
|
+
image?: string;
|
|
7
|
+
url?: string;
|
|
8
|
+
publishedDate?: string;
|
|
9
|
+
siteUrl?: string;
|
|
10
|
+
};
|
|
11
|
+
export declare const makeNewsSchema: (params: Params) => NewsArticle;
|
|
12
|
+
export {};
|