@eeacms/volto-eea-design-system 0.2.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/.coverage.babel.config.js +13 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +50 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +50 -0
- package/.github/workflows/node.js.yml +59 -0
- package/.prettierignore +4 -0
- package/.project.eslintrc.js +45 -0
- package/.release-it.json +17 -0
- package/.storybook/manager.js +15 -0
- package/CHANGELOG.md +1025 -0
- package/DEVELOP.md +51 -0
- package/LICENSE.md +9 -0
- package/README.md +196 -0
- package/bootstrap +41 -0
- package/cypress.json +17 -0
- package/jest-addon.config.js +36 -0
- package/locales/volto.pot +0 -0
- package/mockups/README.md +1 -0
- package/package.json +49 -0
- package/razzle.extend.js +23 -0
- package/src/helpers/index.js +2 -0
- package/src/helpers/useClickOutside.js +30 -0
- package/src/helpers/usePrevious.js +9 -0
- package/src/i18n.js +180 -0
- package/src/index.js +6 -0
- package/src/semantic.less +262 -0
- package/src/ui/Avatar/Avatar.jsx +32 -0
- package/src/ui/Avatar/Avatar.stories.jsx +61 -0
- package/src/ui/AvatarGrid/AvatarGrid.jsx +49 -0
- package/src/ui/AvatarGrid/AvatarGrid.stories.jsx +66 -0
- package/src/ui/Banner/Banner.jsx +59 -0
- package/src/ui/Banner/Banner.stories.jsx +121 -0
- package/src/ui/Blockquote/Blockquote.jsx +16 -0
- package/src/ui/Blockquote/Blockquote.stories.jsx +48 -0
- package/src/ui/Breadcrumbs/Breadcrumb.stories.jsx +76 -0
- package/src/ui/Breadcrumbs/Breadcrumbs.jsx +67 -0
- package/src/ui/Breadcrumbs/Breadcrumbs.stories.jsx +30 -0
- package/src/ui/Button/Button.stories.jsx +169 -0
- package/src/ui/Divider/Divider.jsx +7 -0
- package/src/ui/Footer/Contact.jsx +28 -0
- package/src/ui/Footer/Footer.jsx +52 -0
- package/src/ui/Footer/FooterActions.jsx +22 -0
- package/src/ui/Footer/FooterHeader.jsx +10 -0
- package/src/ui/Footer/FooterSites.jsx +33 -0
- package/src/ui/Footer/Social.jsx +25 -0
- package/src/ui/Footer/SubFooter.jsx +9 -0
- package/src/ui/FormFieldWrapper/FormFieldWrapper.jsx +51 -0
- package/src/ui/Header/Header.jsx +224 -0
- package/src/ui/Header/HeaderMenuPopUp.js +79 -0
- package/src/ui/Header/HeaderSearchPopUp.js +33 -0
- package/src/ui/InpageNavigation/InpageNavigation.jsx +61 -0
- package/src/ui/InpageNavigation/InpageNavigation.stories.jsx +166 -0
- package/src/ui/KeyContent/KeyContent.jsx +22 -0
- package/src/ui/KeyContent/KeyContent.stories.jsx +62 -0
- package/src/ui/Loader/Loader.stories.jsx +45 -0
- package/src/ui/Logo/Logo.jsx +31 -0
- package/src/ui/Popup/Popup.stories.jsx +97 -0
- package/src/ui/PublicationCard/PublicationCard.jsx +27 -0
- package/src/ui/PublicationCard/PublicationCard.stories.jsx +69 -0
- package/src/ui/Pullquote/Pullquote.jsx +44 -0
- package/src/ui/Pullquote/Pullquote.stories.jsx +101 -0
- package/src/ui/RelatedContent/RelatedContent.jsx +90 -0
- package/src/ui/RelatedContent/RelatedContent.stories.jsx +80 -0
- package/src/ui/Segment/Segment.stories.jsx +163 -0
- package/src/ui/Tag/Tag.jsx +13 -0
- package/src/ui/Tag/Tag.stories.jsx +21 -0
- package/src/ui/TagList/TagList.jsx +23 -0
- package/src/ui/TagList/TagList.stories.jsx +63 -0
- package/src/ui/Testimonial/Testimonial.jsx +53 -0
- package/src/ui/Testimonial/Testimonial.stories.jsx +51 -0
- package/src/ui/Timeline/Timeline.jsx +44 -0
- package/src/ui/Timeline/Timeline.stories.jsx +322 -0
- package/src/ui/index.js +31 -0
- package/templates/eea.hbs +50 -0
- package/theme/theme.config +122 -0
- package/theme/theme.less +64 -0
- package/theme/themes/eea/assets/images/EEA_Logo_Vertical.png +0 -0
- package/theme/themes/eea/assets/images/Footer/EEALogo.png +0 -0
- package/theme/themes/eea/assets/images/Footer/EULogo.png +0 -0
- package/theme/themes/eea/assets/images/Footer/Extras/Logo1.png +0 -0
- package/theme/themes/eea/assets/images/Footer/Extras/Logo10.png +0 -0
- package/theme/themes/eea/assets/images/Footer/Extras/Logo2.png +0 -0
- package/theme/themes/eea/assets/images/Footer/Extras/Logo3.png +0 -0
- package/theme/themes/eea/assets/images/Footer/Extras/Logo4.png +0 -0
- package/theme/themes/eea/assets/images/Footer/Extras/Logo5.png +0 -0
- package/theme/themes/eea/assets/images/Footer/Extras/Logo6.png +0 -0
- package/theme/themes/eea/assets/images/Footer/Extras/Logo7.png +0 -0
- package/theme/themes/eea/assets/images/Footer/Extras/Logo8.png +0 -0
- package/theme/themes/eea/assets/images/Footer/Extras/Logo9.png +0 -0
- package/theme/themes/eea/assets/images/Footer/Extras/abstract-visual.svg +32 -0
- package/theme/themes/eea/assets/images/Footer/Extras/footervisual.svg +1755 -0
- package/theme/themes/eea/assets/images/Footer/Vector1.png +0 -0
- package/theme/themes/eea/assets/images/Footer/Vector2.png +0 -0
- package/theme/themes/eea/assets/images/Header/EeaLogo.png +0 -0
- package/theme/themes/eea/assets/images/Header/Vector.png +0 -0
- package/theme/themes/eea/assets/images/Header/close-line.svg +1 -0
- package/theme/themes/eea/assets/images/Header/close.png +0 -0
- package/theme/themes/eea/assets/images/Header/down-arrow.png +0 -0
- package/theme/themes/eea/assets/images/Header/eea-logo.svg +14 -0
- package/theme/themes/eea/assets/images/Header/eea.png +0 -0
- package/theme/themes/eea/assets/images/Header/eeaIcon.png +0 -0
- package/theme/themes/eea/assets/images/Header/global-line.svg +1 -0
- package/theme/themes/eea/assets/images/Header/globeIcon.png +0 -0
- package/theme/themes/eea/assets/images/Header/hamburgerMenuIcon.png +0 -0
- package/theme/themes/eea/assets/images/Header/menu-left-arrow.svg +3 -0
- package/theme/themes/eea/assets/images/Header/menu-line.svg +1 -0
- package/theme/themes/eea/assets/images/Header/search-line.svg +1 -0
- package/theme/themes/eea/assets/images/Header/search.png +0 -0
- package/theme/themes/eea/assets/images/Header/searchIcon.png +0 -0
- package/theme/themes/eea/assets/images/arrow-down.svg +10 -0
- package/theme/themes/eea/assets/images/avatar.png +0 -0
- package/theme/themes/eea/assets/images/banner.png +0 -0
- package/theme/themes/eea/assets/images/eea-logo.png +0 -0
- package/theme/themes/eea/assets/images/eea_icon.png +0 -0
- package/theme/themes/eea/assets/images/europe-flag.svg +4 -0
- package/theme/themes/eea/assets/images/home-icon.svg +3 -0
- package/theme/themes/eea/assets/images/loaderImage.png +0 -0
- package/theme/themes/eea/assets/images/mega-menu-arrow.svg +3 -0
- package/theme/themes/eea/assets/logo/EEA-Logo-White-2.svg +9 -0
- package/theme/themes/eea/assets/logo/EEA-Logo-white.svg +9 -0
- package/theme/themes/eea/assets/logo/EIONETLogo.png +0 -0
- package/theme/themes/eea/assets/logo/bise.svg +47 -0
- package/theme/themes/eea/assets/logo/cca.svg +20 -0
- package/theme/themes/eea/assets/logo/copernicus.svg +62 -0
- package/theme/themes/eea/assets/logo/energy.svg +77 -0
- package/theme/themes/eea/assets/logo/fise.svg +37 -0
- package/theme/themes/eea/assets/logo/freshwater.svg +48 -0
- package/theme/themes/eea/assets/logo/industry.svg +40 -0
- package/theme/themes/eea/assets/logo/insitu.svg +43 -0
- package/theme/themes/eea/assets/logo/ipchem.svg +23 -0
- package/theme/themes/eea/assets/logo/marine.svg +63 -0
- package/theme/themes/eea/collections/breadcrumb.overrides +44 -0
- package/theme/themes/eea/collections/breadcrumb.variables +49 -0
- package/theme/themes/eea/collections/form.overrides +56 -0
- package/theme/themes/eea/collections/form.variables +211 -0
- package/theme/themes/eea/collections/grid.overrides +17 -0
- package/theme/themes/eea/collections/grid.variables +103 -0
- package/theme/themes/eea/collections/menu.overrides +84 -0
- package/theme/themes/eea/collections/menu.variables +471 -0
- package/theme/themes/eea/collections/message.overrides +34 -0
- package/theme/themes/eea/collections/message.variables +142 -0
- package/theme/themes/eea/collections/table.overrides +30 -0
- package/theme/themes/eea/collections/table.variables +249 -0
- package/theme/themes/eea/definitions/elements/icon.less +499 -0
- package/theme/themes/eea/elements/button.overrides +199 -0
- package/theme/themes/eea/elements/button.variables +405 -0
- package/theme/themes/eea/elements/container.overrides +98 -0
- package/theme/themes/eea/elements/container.variables +66 -0
- package/theme/themes/eea/elements/divider.overrides +17 -0
- package/theme/themes/eea/elements/divider.variables +53 -0
- package/theme/themes/eea/elements/flag.overrides +1235 -0
- package/theme/themes/eea/elements/flag.variables +13 -0
- package/theme/themes/eea/elements/header.overrides +205 -0
- package/theme/themes/eea/elements/header.variables +151 -0
- package/theme/themes/eea/elements/icon.overrides +5589 -0
- package/theme/themes/eea/elements/icon.variables +95 -0
- package/theme/themes/eea/elements/image.overrides +3 -0
- package/theme/themes/eea/elements/image.variables +44 -0
- package/theme/themes/eea/elements/input.overrides +83 -0
- package/theme/themes/eea/elements/input.variables +104 -0
- package/theme/themes/eea/elements/label.overrides +49 -0
- package/theme/themes/eea/elements/label.variables +267 -0
- package/theme/themes/eea/elements/list.overrides +28 -0
- package/theme/themes/eea/elements/list.variables +233 -0
- package/theme/themes/eea/elements/loader.overrides +3 -0
- package/theme/themes/eea/elements/loader.variables +73 -0
- package/theme/themes/eea/elements/placeholder.overrides +3 -0
- package/theme/themes/eea/elements/placeholder.variables +55 -0
- package/theme/themes/eea/elements/rail.overrides +3 -0
- package/theme/themes/eea/elements/rail.variables +34 -0
- package/theme/themes/eea/elements/reveal.overrides +3 -0
- package/theme/themes/eea/elements/reveal.variables +18 -0
- package/theme/themes/eea/elements/segment.overrides +8 -0
- package/theme/themes/eea/elements/segment.variables +154 -0
- package/theme/themes/eea/elements/step.overrides +18 -0
- package/theme/themes/eea/elements/step.variables +130 -0
- package/theme/themes/eea/extras/avatar.less +97 -0
- package/theme/themes/eea/extras/avatar.variables +34 -0
- package/theme/themes/eea/extras/avatarGrid.less +43 -0
- package/theme/themes/eea/extras/avatarGrid.variables +20 -0
- package/theme/themes/eea/extras/banner.less +213 -0
- package/theme/themes/eea/extras/banner.variables +77 -0
- package/theme/themes/eea/extras/blockquote.less +89 -0
- package/theme/themes/eea/extras/blockquote.variables +35 -0
- package/theme/themes/eea/extras/custom.overrides +0 -0
- package/theme/themes/eea/extras/custom.variables +0 -0
- package/theme/themes/eea/extras/divider.less +14 -0
- package/theme/themes/eea/extras/divider.variables +9 -0
- package/theme/themes/eea/extras/footer.less +273 -0
- package/theme/themes/eea/extras/footer.variables +109 -0
- package/theme/themes/eea/extras/header.less +691 -0
- package/theme/themes/eea/extras/header.variables +149 -0
- package/theme/themes/eea/extras/inpageNavigation.less +57 -0
- package/theme/themes/eea/extras/inpageNavigation.variables +30 -0
- package/theme/themes/eea/extras/keyContent.less +36 -0
- package/theme/themes/eea/extras/keyContent.variables +18 -0
- package/theme/themes/eea/extras/main.overrides +31 -0
- package/theme/themes/eea/extras/main.variables +33 -0
- package/theme/themes/eea/extras/publicationCard.less +62 -0
- package/theme/themes/eea/extras/publicationCard.variables +24 -0
- package/theme/themes/eea/extras/pullquote.less +76 -0
- package/theme/themes/eea/extras/pullquote.variables +34 -0
- package/theme/themes/eea/extras/select.overrides +0 -0
- package/theme/themes/eea/extras/select.variables +0 -0
- package/theme/themes/eea/extras/tag.less +37 -0
- package/theme/themes/eea/extras/tag.variables +22 -0
- package/theme/themes/eea/extras/tagList.less +50 -0
- package/theme/themes/eea/extras/tagList.variables +13 -0
- package/theme/themes/eea/extras/testimonial.less +28 -0
- package/theme/themes/eea/extras/testimonial.variables +13 -0
- package/theme/themes/eea/extras/timeline.less +114 -0
- package/theme/themes/eea/extras/timeline.variables +40 -0
- package/theme/themes/eea/globals/reset.overrides +454 -0
- package/theme/themes/eea/globals/reset.variables +6 -0
- package/theme/themes/eea/globals/site.overrides +27 -0
- package/theme/themes/eea/globals/site.variables +1135 -0
- package/theme/themes/eea/modules/accordion.overrides +83 -0
- package/theme/themes/eea/modules/accordion.variables +114 -0
- package/theme/themes/eea/modules/chatroom.overrides +3 -0
- package/theme/themes/eea/modules/chatroom.variables +3 -0
- package/theme/themes/eea/modules/checkbox.overrides +67 -0
- package/theme/themes/eea/modules/checkbox.variables +194 -0
- package/theme/themes/eea/modules/dimmer.overrides +3 -0
- package/theme/themes/eea/modules/dimmer.variables +58 -0
- package/theme/themes/eea/modules/dropdown.overrides +53 -0
- package/theme/themes/eea/modules/dropdown.variables +390 -0
- package/theme/themes/eea/modules/embed.overrides +3 -0
- package/theme/themes/eea/modules/embed.variables +53 -0
- package/theme/themes/eea/modules/modal.overrides +3 -0
- package/theme/themes/eea/modules/modal.variables +193 -0
- package/theme/themes/eea/modules/nag.overrides +3 -0
- package/theme/themes/eea/modules/nag.variables +74 -0
- package/theme/themes/eea/modules/popup.overrides +83 -0
- package/theme/themes/eea/modules/popup.variables +153 -0
- package/theme/themes/eea/modules/progress.overrides +3 -0
- package/theme/themes/eea/modules/progress.variables +113 -0
- package/theme/themes/eea/modules/rating.overrides +74 -0
- package/theme/themes/eea/modules/rating.variables +103 -0
- package/theme/themes/eea/modules/search.overrides +3 -0
- package/theme/themes/eea/modules/search.variables +163 -0
- package/theme/themes/eea/modules/shape.overrides +3 -0
- package/theme/themes/eea/modules/shape.variables +40 -0
- package/theme/themes/eea/modules/sidebar.overrides +3 -0
- package/theme/themes/eea/modules/sidebar.variables +45 -0
- package/theme/themes/eea/modules/sticky.overrides +3 -0
- package/theme/themes/eea/modules/sticky.variables +7 -0
- package/theme/themes/eea/modules/tab.overrides +13 -0
- package/theme/themes/eea/modules/tab.variables +17 -0
- package/theme/themes/eea/modules/transition.overrides +1087 -0
- package/theme/themes/eea/modules/transition.variables +10 -0
- package/theme/themes/eea/modules/video.overrides +3 -0
- package/theme/themes/eea/modules/video.variables +16 -0
- package/theme/themes/eea/views/ad.overrides +3 -0
- package/theme/themes/eea/views/ad.variables +13 -0
- package/theme/themes/eea/views/card.overrides +73 -0
- package/theme/themes/eea/views/card.variables +237 -0
- package/theme/themes/eea/views/comment.overrides +3 -0
- package/theme/themes/eea/views/comment.variables +98 -0
- package/theme/themes/eea/views/feed.overrides +3 -0
- package/theme/themes/eea/views/feed.variables +141 -0
- package/theme/themes/eea/views/item.overrides +8 -0
- package/theme/themes/eea/views/item.variables +157 -0
- package/theme/themes/eea/views/statistic.overrides +19 -0
- package/theme/themes/eea/views/statistic.variables +105 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Header component.
|
|
3
|
+
* @module components/theme/Header/Header
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import React from 'react'; // , { Component }
|
|
7
|
+
import cx from 'classnames';
|
|
8
|
+
import { Container, Image, Menu, Grid, Dropdown } from 'semantic-ui-react'; // Dropdown,
|
|
9
|
+
|
|
10
|
+
import closeIcon from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/images/Header/close-line.svg';
|
|
11
|
+
import searchIcon from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/images/Header/search-line.svg';
|
|
12
|
+
import burgerIcon from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/images/Header/menu-line.svg';
|
|
13
|
+
|
|
14
|
+
import HeaderSearchPopUp from './HeaderSearchPopUp';
|
|
15
|
+
import HeaderMenuPopUp from './HeaderMenuPopUp';
|
|
16
|
+
|
|
17
|
+
function Header({ children }) {
|
|
18
|
+
return <div className="eea header">{children}</div>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const TopHeader = ({ children }) => (
|
|
22
|
+
<div className="top bar">
|
|
23
|
+
<Container>{children}</Container>
|
|
24
|
+
</div>
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
const TopItem = ({ children, className, id }) => (
|
|
28
|
+
<div className={cx('item', 'header-top-item', className)} id={id}>
|
|
29
|
+
{children}
|
|
30
|
+
</div>
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
const TopDropdownMenu = ({
|
|
34
|
+
children,
|
|
35
|
+
className,
|
|
36
|
+
icon,
|
|
37
|
+
id,
|
|
38
|
+
mobileText,
|
|
39
|
+
text,
|
|
40
|
+
viewportWidth,
|
|
41
|
+
}) => {
|
|
42
|
+
const isMobile = viewportWidth < 480;
|
|
43
|
+
|
|
44
|
+
const Component = ({ mobileText }) => (
|
|
45
|
+
<Dropdown
|
|
46
|
+
id={id}
|
|
47
|
+
className={className}
|
|
48
|
+
text={mobileText || text}
|
|
49
|
+
icon={icon || 'chevron down'}
|
|
50
|
+
aria-label="dropdown"
|
|
51
|
+
>
|
|
52
|
+
<Dropdown.Menu role="group">{children}</Dropdown.Menu>
|
|
53
|
+
</Dropdown>
|
|
54
|
+
);
|
|
55
|
+
return (
|
|
56
|
+
<>{isMobile ? <Component mobileText={mobileText} /> : <Component />}</>
|
|
57
|
+
);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const Main = ({
|
|
61
|
+
logo,
|
|
62
|
+
menuItems,
|
|
63
|
+
renderMenuItem,
|
|
64
|
+
renderGlobalMenuItem,
|
|
65
|
+
pathname,
|
|
66
|
+
}) => {
|
|
67
|
+
const [activeItem, setActiveItem] = React.useState('');
|
|
68
|
+
const [menuIsActive, setMenuIsActive] = React.useState(false);
|
|
69
|
+
const [searchIsActive, setSearchIsActive] = React.useState(false);
|
|
70
|
+
const [burger, setBurger] = React.useState('');
|
|
71
|
+
|
|
72
|
+
React.useEffect(() => {
|
|
73
|
+
setMenuIsActive(false);
|
|
74
|
+
setSearchIsActive(false);
|
|
75
|
+
setBurger('');
|
|
76
|
+
}, [pathname]);
|
|
77
|
+
|
|
78
|
+
const searchOnClick = (e, x) => {
|
|
79
|
+
if (menuIsActive === true) {
|
|
80
|
+
setBurger('');
|
|
81
|
+
setMenuIsActive(false);
|
|
82
|
+
}
|
|
83
|
+
setSearchIsActive(!searchIsActive);
|
|
84
|
+
setActiveItem('');
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const mobileBurgerOnClick = () => {
|
|
88
|
+
if (searchIsActive === true) {
|
|
89
|
+
setSearchIsActive(false);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (burger === '') {
|
|
93
|
+
setBurger('open');
|
|
94
|
+
setMenuIsActive(true);
|
|
95
|
+
} else {
|
|
96
|
+
setBurger('');
|
|
97
|
+
setMenuIsActive(false);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const desktopBurgerOnClick = () => {
|
|
102
|
+
setMenuIsActive(false);
|
|
103
|
+
setActiveItem('');
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const menuOnClick = (e, item) => {
|
|
107
|
+
if (searchIsActive) setSearchIsActive(false);
|
|
108
|
+
setActiveItem(item['@id'] || item.url);
|
|
109
|
+
setMenuIsActive(true);
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
React.useEffect(() => {
|
|
113
|
+
if (searchIsActive || burger === 'open' || menuIsActive) {
|
|
114
|
+
document.body.style.overflow = 'hidden';
|
|
115
|
+
} else {
|
|
116
|
+
document.body.style.overflow = 'unset';
|
|
117
|
+
}
|
|
118
|
+
}, [searchIsActive, burger, menuIsActive]);
|
|
119
|
+
|
|
120
|
+
const node = React.useRef();
|
|
121
|
+
const searchButtonRef = React.useRef();
|
|
122
|
+
const desktopMenuBurgerRef = React.useRef();
|
|
123
|
+
const mobileMenuBurgerRef = React.useRef();
|
|
124
|
+
|
|
125
|
+
return (
|
|
126
|
+
<div className="main bar" ref={node}>
|
|
127
|
+
<Container>
|
|
128
|
+
<Grid>
|
|
129
|
+
<Grid.Column mobile={8} tablet={8} computer={4}>
|
|
130
|
+
{logo}
|
|
131
|
+
</Grid.Column>
|
|
132
|
+
<Grid.Column mobile={4} tablet={4} computer={8}>
|
|
133
|
+
<div className="main-menu">
|
|
134
|
+
{!menuIsActive && menuItems && (
|
|
135
|
+
<Menu className="eea-main-menu tablet or lower hidden" text>
|
|
136
|
+
{menuItems.map((item) => (
|
|
137
|
+
<Menu.Item
|
|
138
|
+
name={item['@id'] || item.url}
|
|
139
|
+
active={activeItem === item.key}
|
|
140
|
+
key={item['@id'] || item.url}
|
|
141
|
+
>
|
|
142
|
+
{renderGlobalMenuItem(item, {
|
|
143
|
+
onClick: menuOnClick,
|
|
144
|
+
})}
|
|
145
|
+
</Menu.Item>
|
|
146
|
+
))}
|
|
147
|
+
</Menu>
|
|
148
|
+
)}
|
|
149
|
+
{menuIsActive && (
|
|
150
|
+
<Header.BurgerAction
|
|
151
|
+
className="desktop"
|
|
152
|
+
onClick={desktopBurgerOnClick}
|
|
153
|
+
ref={desktopMenuBurgerRef}
|
|
154
|
+
>
|
|
155
|
+
{/* <Icon name="close" /> */}
|
|
156
|
+
<Image src={closeIcon} alt="menu close icon" />
|
|
157
|
+
</Header.BurgerAction>
|
|
158
|
+
)}
|
|
159
|
+
<div
|
|
160
|
+
className="search-action"
|
|
161
|
+
onClick={searchOnClick}
|
|
162
|
+
role="none"
|
|
163
|
+
ref={searchButtonRef}
|
|
164
|
+
>
|
|
165
|
+
{/* <Icon name={!state.activeSearch ? 'search' : 'close'} /> */}
|
|
166
|
+
<Image
|
|
167
|
+
src={!searchIsActive ? `${searchIcon}` : `${closeIcon}`}
|
|
168
|
+
alt="search button open/close"
|
|
169
|
+
/>
|
|
170
|
+
</div>
|
|
171
|
+
<Header.BurgerAction
|
|
172
|
+
className={`mobile ${burger}`}
|
|
173
|
+
onClick={mobileBurgerOnClick}
|
|
174
|
+
ref={mobileMenuBurgerRef}
|
|
175
|
+
>
|
|
176
|
+
{/* <Icon
|
|
177
|
+
name={this.state.burger === 'open' ? 'close' : 'bars'}
|
|
178
|
+
></Icon> */}
|
|
179
|
+
<Image
|
|
180
|
+
src={burger === 'open' ? `${closeIcon}` : `${burgerIcon}`}
|
|
181
|
+
alt="menu icon open/close"
|
|
182
|
+
/>
|
|
183
|
+
</Header.BurgerAction>
|
|
184
|
+
</div>
|
|
185
|
+
</Grid.Column>
|
|
186
|
+
</Grid>
|
|
187
|
+
</Container>
|
|
188
|
+
{searchIsActive && (
|
|
189
|
+
<HeaderSearchPopUp
|
|
190
|
+
onClose={searchOnClick}
|
|
191
|
+
triggerRefs={[searchButtonRef]}
|
|
192
|
+
/>
|
|
193
|
+
)}
|
|
194
|
+
{menuIsActive && (
|
|
195
|
+
<HeaderMenuPopUp
|
|
196
|
+
renderMenuItem={renderMenuItem}
|
|
197
|
+
activeItem={activeItem}
|
|
198
|
+
menuItems={menuItems}
|
|
199
|
+
onClose={mobileBurgerOnClick}
|
|
200
|
+
triggerRefs={[mobileMenuBurgerRef, desktopMenuBurgerRef]}
|
|
201
|
+
/>
|
|
202
|
+
)}
|
|
203
|
+
</div>
|
|
204
|
+
);
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
const BurgerAction = React.forwardRef((props, ref) => (
|
|
208
|
+
<div
|
|
209
|
+
ref={ref}
|
|
210
|
+
className={`burger-action ${props.className}`}
|
|
211
|
+
role="none"
|
|
212
|
+
onClick={props.onClick}
|
|
213
|
+
>
|
|
214
|
+
{props.children}
|
|
215
|
+
</div>
|
|
216
|
+
));
|
|
217
|
+
|
|
218
|
+
Header.BurgerAction = BurgerAction;
|
|
219
|
+
Header.Main = Main;
|
|
220
|
+
Header.TopDropdownMenu = TopDropdownMenu;
|
|
221
|
+
Header.TopHeader = TopHeader;
|
|
222
|
+
Header.TopItem = TopItem;
|
|
223
|
+
|
|
224
|
+
export default Header;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Container } from 'semantic-ui-react';
|
|
3
|
+
import cx from 'classnames';
|
|
4
|
+
|
|
5
|
+
import { useClickOutside } from '@eeacms/volto-eea-design-system/helpers';
|
|
6
|
+
|
|
7
|
+
const levels = ['first', 'second', 'third'];
|
|
8
|
+
|
|
9
|
+
const Item = ({ item, renderMenuItem }) => (
|
|
10
|
+
<>
|
|
11
|
+
{item.items.length > 0 && (
|
|
12
|
+
<label htmlFor={`drop-${item['@id'] || item.url}`} className="toggle">
|
|
13
|
+
{item.title}
|
|
14
|
+
</label>
|
|
15
|
+
)}
|
|
16
|
+
{renderMenuItem(item)}
|
|
17
|
+
{item.items.length > 0 && (
|
|
18
|
+
<input type="checkbox" id={`drop-${item['@id'] || item.url}`} />
|
|
19
|
+
)}
|
|
20
|
+
</>
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
const ItemsList = ({ items, renderMenuItem, level = 0, activeItem }) => (
|
|
24
|
+
<ul
|
|
25
|
+
className={cx(
|
|
26
|
+
level === 0 ? 'menu' : 'sub',
|
|
27
|
+
levels[level],
|
|
28
|
+
`level-${level}`,
|
|
29
|
+
)}
|
|
30
|
+
>
|
|
31
|
+
{items.map((item) => (
|
|
32
|
+
<li
|
|
33
|
+
key={item['@id'] || item.url}
|
|
34
|
+
className={cx({
|
|
35
|
+
hasSubMenu: item.items?.length > 0,
|
|
36
|
+
active: (item['@id'] || item.url) === activeItem,
|
|
37
|
+
})}
|
|
38
|
+
>
|
|
39
|
+
<Item item={item} renderMenuItem={renderMenuItem} />
|
|
40
|
+
|
|
41
|
+
{item.items.length > 0 && (
|
|
42
|
+
<ItemsList
|
|
43
|
+
items={item.items}
|
|
44
|
+
level={level + 1}
|
|
45
|
+
renderMenuItem={renderMenuItem}
|
|
46
|
+
activeItem={activeItem}
|
|
47
|
+
/>
|
|
48
|
+
)}
|
|
49
|
+
</li>
|
|
50
|
+
))}
|
|
51
|
+
</ul>
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
function HeaderMenuPopUp({
|
|
55
|
+
menuItems,
|
|
56
|
+
onClose,
|
|
57
|
+
triggerRefs,
|
|
58
|
+
renderMenuItem,
|
|
59
|
+
activeItem,
|
|
60
|
+
}) {
|
|
61
|
+
const nodeRef = React.useRef();
|
|
62
|
+
useClickOutside({ targetRefs: [nodeRef, ...triggerRefs], callback: onClose });
|
|
63
|
+
|
|
64
|
+
return (
|
|
65
|
+
<div id="mega-menu" ref={nodeRef}>
|
|
66
|
+
<Container>
|
|
67
|
+
<nav>
|
|
68
|
+
<ItemsList
|
|
69
|
+
items={menuItems}
|
|
70
|
+
renderMenuItem={renderMenuItem}
|
|
71
|
+
activeItem={activeItem}
|
|
72
|
+
/>
|
|
73
|
+
</nav>
|
|
74
|
+
</Container>
|
|
75
|
+
</div>
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export default HeaderMenuPopUp;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Container, Input, Button, Icon } from 'semantic-ui-react';
|
|
3
|
+
|
|
4
|
+
import { useClickOutside } from '@eeacms/volto-eea-design-system/helpers';
|
|
5
|
+
|
|
6
|
+
function HeaderSearchPopUp({ onClose, triggerRefs = [] }) {
|
|
7
|
+
const nodeRef = React.useRef();
|
|
8
|
+
|
|
9
|
+
useClickOutside({ targetRefs: [nodeRef, ...triggerRefs], callback: onClose });
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<div id="search-box" ref={nodeRef}>
|
|
13
|
+
<Container>
|
|
14
|
+
<div className="wrapper">
|
|
15
|
+
<Input
|
|
16
|
+
className="search"
|
|
17
|
+
icon="search"
|
|
18
|
+
placeholder="Search..."
|
|
19
|
+
fluid
|
|
20
|
+
/>
|
|
21
|
+
<div className="action">
|
|
22
|
+
<Button icon labelPosition="left" className="search">
|
|
23
|
+
<Icon name="search" />
|
|
24
|
+
Advanced Search
|
|
25
|
+
</Button>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
</Container>
|
|
29
|
+
</div>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export default HeaderSearchPopUp;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import React, { Component } from 'react';
|
|
2
|
+
import { Container, Icon } from 'semantic-ui-react';
|
|
3
|
+
|
|
4
|
+
class InpageNavigation extends Component {
|
|
5
|
+
constructor(props) {
|
|
6
|
+
super(props);
|
|
7
|
+
this.state = {
|
|
8
|
+
scrollPosition: 0,
|
|
9
|
+
removeClass: 'hidden',
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
handleInpageNavigationVisibility = () => {
|
|
14
|
+
const position = window.scrollY;
|
|
15
|
+
this.setState({ scrollPosition: position });
|
|
16
|
+
|
|
17
|
+
if (this.state.scrollPosition > 50) {
|
|
18
|
+
return this.setState({ removeClass: '' });
|
|
19
|
+
} else {
|
|
20
|
+
return this.setState({ removeClass: 'hidden' });
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
componentDidMount() {
|
|
25
|
+
window.addEventListener('scroll', this.handleInpageNavigationVisibility);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
componentWillUnmount() {
|
|
29
|
+
window.removeEventListener('scroll', this.handleInpageNavigationVisibility);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
onInpageNavigationClick = () => {
|
|
33
|
+
window.scrollTo({
|
|
34
|
+
top: 0,
|
|
35
|
+
behavior: 'smooth',
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
render() {
|
|
40
|
+
return (
|
|
41
|
+
<Container>
|
|
42
|
+
<div
|
|
43
|
+
id="inpage-navigation"
|
|
44
|
+
onClick={this.onInpageNavigationClick}
|
|
45
|
+
role="none"
|
|
46
|
+
className={this.state.removeClass}
|
|
47
|
+
>
|
|
48
|
+
<div className="mobile tablet only">
|
|
49
|
+
<Icon className="ri-arrow-up-s-line" />
|
|
50
|
+
</div>
|
|
51
|
+
<div className="tablet or lower hidden">
|
|
52
|
+
<Icon className="ri-arrow-up-s-line" />
|
|
53
|
+
<div className="text">top</div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
</Container>
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export default InpageNavigation;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import InpageNavigation from './InpageNavigation';
|
|
3
|
+
import { Container } from 'semantic-ui-react';
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
title: 'Components/Inpage Navigation',
|
|
7
|
+
component: InpageNavigation,
|
|
8
|
+
argTypes: {},
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
function InpageNavigationExample() {
|
|
12
|
+
return (
|
|
13
|
+
<div id="anchor">
|
|
14
|
+
<Container>
|
|
15
|
+
<p>
|
|
16
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mattis
|
|
17
|
+
arcu egestas ultrices mollis. In facilisis, velit vel varius
|
|
18
|
+
fermentum, libero nisi mollis eros, non blandit nisi orci vel urna.
|
|
19
|
+
Maecenas efficitur rhoncus lorem, vitae volutpat nisi varius ut.
|
|
20
|
+
Aenean mattis maximus odio in rutrum. Nullam semper non purus a
|
|
21
|
+
eleifend. Aenean placerat in ligula sed efficitur. Phasellus viverra
|
|
22
|
+
vitae libero sed vestibulum. Nulla mattis tortor at odio suscipit, sed
|
|
23
|
+
finibus nulla interdum. Nullam semper augue nulla, eget volutpat purus
|
|
24
|
+
tempor blandit. Curabitur iaculis risus ac ipsum semper egestas. Sed
|
|
25
|
+
in condimentum lacus. Donec ac efficitur sapien. Integer sit amet
|
|
26
|
+
bibendum urna, eget rhoncus elit. Nam a diam sed dui consectetur
|
|
27
|
+
aliquet.
|
|
28
|
+
</p>
|
|
29
|
+
<p>
|
|
30
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mattis
|
|
31
|
+
arcu egestas ultrices mollis. In facilisis, velit vel varius
|
|
32
|
+
fermentum, libero nisi mollis eros, non blandit nisi orci vel urna.
|
|
33
|
+
Maecenas efficitur rhoncus lorem, vitae volutpat nisi varius ut.
|
|
34
|
+
Aenean mattis maximus odio in rutrum. Nullam semper non purus a
|
|
35
|
+
eleifend. Aenean placerat in ligula sed efficitur. Phasellus viverra
|
|
36
|
+
vitae libero sed vestibulum. Nulla mattis tortor at odio suscipit, sed
|
|
37
|
+
finibus nulla interdum. Nullam semper augue nulla, eget volutpat purus
|
|
38
|
+
tempor blandit. Curabitur iaculis risus ac ipsum semper egestas. Sed
|
|
39
|
+
in condimentum lacus. Donec ac efficitur sapien. Integer sit amet
|
|
40
|
+
bibendum urna, eget rhoncus elit. Nam a diam sed dui consectetur
|
|
41
|
+
aliquet.
|
|
42
|
+
</p>
|
|
43
|
+
<p>
|
|
44
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mattis
|
|
45
|
+
arcu egestas ultrices mollis. In facilisis, velit vel varius
|
|
46
|
+
fermentum, libero nisi mollis eros, non blandit nisi orci vel urna.
|
|
47
|
+
Maecenas efficitur rhoncus lorem, vitae volutpat nisi varius ut.
|
|
48
|
+
Aenean mattis maximus odio in rutrum. Nullam semper non purus a
|
|
49
|
+
eleifend. Aenean placerat in ligula sed efficitur. Phasellus viverra
|
|
50
|
+
vitae libero sed vestibulum. Nulla mattis tortor at odio suscipit, sed
|
|
51
|
+
finibus nulla interdum. Nullam semper augue nulla, eget volutpat purus
|
|
52
|
+
tempor blandit. Curabitur iaculis risus ac ipsum semper egestas. Sed
|
|
53
|
+
in condimentum lacus. Donec ac efficitur sapien. Integer sit amet
|
|
54
|
+
bibendum urna, eget rhoncus elit. Nam a diam sed dui consectetur
|
|
55
|
+
aliquet.
|
|
56
|
+
</p>
|
|
57
|
+
<p>
|
|
58
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mattis
|
|
59
|
+
arcu egestas ultrices mollis. In facilisis, velit vel varius
|
|
60
|
+
fermentum, libero nisi mollis eros, non blandit nisi orci vel urna.
|
|
61
|
+
Maecenas efficitur rhoncus lorem, vitae volutpat nisi varius ut.
|
|
62
|
+
Aenean mattis maximus odio in rutrum. Nullam semper non purus a
|
|
63
|
+
eleifend. Aenean placerat in ligula sed efficitur. Phasellus viverra
|
|
64
|
+
vitae libero sed vestibulum. Nulla mattis tortor at odio suscipit, sed
|
|
65
|
+
finibus nulla interdum. Nullam semper augue nulla, eget volutpat purus
|
|
66
|
+
tempor blandit. Curabitur iaculis risus ac ipsum semper egestas. Sed
|
|
67
|
+
in condimentum lacus. Donec ac efficitur sapien. Integer sit amet
|
|
68
|
+
bibendum urna, eget rhoncus elit. Nam a diam sed dui consectetur
|
|
69
|
+
aliquet.
|
|
70
|
+
</p>
|
|
71
|
+
<p>
|
|
72
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mattis
|
|
73
|
+
arcu egestas ultrices mollis. In facilisis, velit vel varius
|
|
74
|
+
fermentum, libero nisi mollis eros, non blandit nisi orci vel urna.
|
|
75
|
+
Maecenas efficitur rhoncus lorem, vitae volutpat nisi varius ut.
|
|
76
|
+
Aenean mattis maximus odio in rutrum. Nullam semper non purus a
|
|
77
|
+
eleifend. Aenean placerat in ligula sed efficitur. Phasellus viverra
|
|
78
|
+
vitae libero sed vestibulum. Nulla mattis tortor at odio suscipit, sed
|
|
79
|
+
finibus nulla interdum. Nullam semper augue nulla, eget volutpat purus
|
|
80
|
+
tempor blandit. Curabitur iaculis risus ac ipsum semper egestas. Sed
|
|
81
|
+
in condimentum lacus. Donec ac efficitur sapien. Integer sit amet
|
|
82
|
+
bibendum urna, eget rhoncus elit. Nam a diam sed dui consectetur
|
|
83
|
+
aliquet.
|
|
84
|
+
</p>
|
|
85
|
+
<p>
|
|
86
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mattis
|
|
87
|
+
arcu egestas ultrices mollis. In facilisis, velit vel varius
|
|
88
|
+
fermentum, libero nisi mollis eros, non blandit nisi orci vel urna.
|
|
89
|
+
Maecenas efficitur rhoncus lorem, vitae volutpat nisi varius ut.
|
|
90
|
+
Aenean mattis maximus odio in rutrum. Nullam semper non purus a
|
|
91
|
+
eleifend. Aenean placerat in ligula sed efficitur. Phasellus viverra
|
|
92
|
+
vitae libero sed vestibulum. Nulla mattis tortor at odio suscipit, sed
|
|
93
|
+
finibus nulla interdum. Nullam semper augue nulla, eget volutpat purus
|
|
94
|
+
tempor blandit. Curabitur iaculis risus ac ipsum semper egestas. Sed
|
|
95
|
+
in condimentum lacus. Donec ac efficitur sapien. Integer sit amet
|
|
96
|
+
bibendum urna, eget rhoncus elit. Nam a diam sed dui consectetur
|
|
97
|
+
aliquet.
|
|
98
|
+
</p>
|
|
99
|
+
<p>
|
|
100
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mattis
|
|
101
|
+
arcu egestas ultrices mollis. In facilisis, velit vel varius
|
|
102
|
+
fermentum, libero nisi mollis eros, non blandit nisi orci vel urna.
|
|
103
|
+
Maecenas efficitur rhoncus lorem, vitae volutpat nisi varius ut.
|
|
104
|
+
Aenean mattis maximus odio in rutrum. Nullam semper non purus a
|
|
105
|
+
eleifend. Aenean placerat in ligula sed efficitur. Phasellus viverra
|
|
106
|
+
vitae libero sed vestibulum. Nulla mattis tortor at odio suscipit, sed
|
|
107
|
+
finibus nulla interdum. Nullam semper augue nulla, eget volutpat purus
|
|
108
|
+
tempor blandit. Curabitur iaculis risus ac ipsum semper egestas. Sed
|
|
109
|
+
in condimentum lacus. Donec ac efficitur sapien. Integer sit amet
|
|
110
|
+
bibendum urna, eget rhoncus elit. Nam a diam sed dui consectetur
|
|
111
|
+
aliquet.
|
|
112
|
+
</p>
|
|
113
|
+
<p>
|
|
114
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mattis
|
|
115
|
+
arcu egestas ultrices mollis. In facilisis, velit vel varius
|
|
116
|
+
fermentum, libero nisi mollis eros, non blandit nisi orci vel urna.
|
|
117
|
+
Maecenas efficitur rhoncus lorem, vitae volutpat nisi varius ut.
|
|
118
|
+
Aenean mattis maximus odio in rutrum. Nullam semper non purus a
|
|
119
|
+
eleifend. Aenean placerat in ligula sed efficitur. Phasellus viverra
|
|
120
|
+
vitae libero sed vestibulum. Nulla mattis tortor at odio suscipit, sed
|
|
121
|
+
finibus nulla interdum. Nullam semper augue nulla, eget volutpat purus
|
|
122
|
+
tempor blandit. Curabitur iaculis risus ac ipsum semper egestas. Sed
|
|
123
|
+
in condimentum lacus. Donec ac efficitur sapien. Integer sit amet
|
|
124
|
+
bibendum urna, eget rhoncus elit. Nam a diam sed dui consectetur
|
|
125
|
+
aliquet.
|
|
126
|
+
</p>
|
|
127
|
+
<p>
|
|
128
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mattis
|
|
129
|
+
arcu egestas ultrices mollis. In facilisis, velit vel varius
|
|
130
|
+
fermentum, libero nisi mollis eros, non blandit nisi orci vel urna.
|
|
131
|
+
Maecenas efficitur rhoncus lorem, vitae volutpat nisi varius ut.
|
|
132
|
+
Aenean mattis maximus odio in rutrum. Nullam semper non purus a
|
|
133
|
+
eleifend. Aenean placerat in ligula sed efficitur. Phasellus viverra
|
|
134
|
+
vitae libero sed vestibulum. Nulla mattis tortor at odio suscipit, sed
|
|
135
|
+
finibus nulla interdum. Nullam semper augue nulla, eget volutpat purus
|
|
136
|
+
tempor blandit. Curabitur iaculis risus ac ipsum semper egestas. Sed
|
|
137
|
+
in condimentum lacus. Donec ac efficitur sapien. Integer sit amet
|
|
138
|
+
bibendum urna, eget rhoncus elit. Nam a diam sed dui consectetur
|
|
139
|
+
aliquet.
|
|
140
|
+
</p>
|
|
141
|
+
<p>
|
|
142
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mattis
|
|
143
|
+
arcu egestas ultrices mollis. In facilisis, velit vel varius
|
|
144
|
+
fermentum, libero nisi mollis eros, non blandit nisi orci vel urna.
|
|
145
|
+
Maecenas efficitur rhoncus lorem, vitae volutpat nisi varius ut.
|
|
146
|
+
Aenean mattis maximus odio in rutrum. Nullam semper non purus a
|
|
147
|
+
eleifend. Aenean placerat in ligula sed efficitur. Phasellus viverra
|
|
148
|
+
vitae libero sed vestibulum. Nulla mattis tortor at odio suscipit, sed
|
|
149
|
+
finibus nulla interdum. Nullam semper augue nulla, eget volutpat purus
|
|
150
|
+
tempor blandit. Curabitur iaculis risus ac ipsum semper egestas. Sed
|
|
151
|
+
in condimentum lacus. Donec ac efficitur sapien. Integer sit amet
|
|
152
|
+
bibendum urna, eget rhoncus elit. Nam a diam sed dui consectetur
|
|
153
|
+
aliquet.
|
|
154
|
+
</p>
|
|
155
|
+
</Container>
|
|
156
|
+
<InpageNavigation linkId={'anchor'} />
|
|
157
|
+
</div>
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const Template = (args) => (
|
|
162
|
+
<InpageNavigationExample {...args}></InpageNavigationExample>
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
export const Default = Template.bind({});
|
|
166
|
+
Default.args = {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { List } from 'semantic-ui-react';
|
|
4
|
+
|
|
5
|
+
KeyContent.propTypes = {
|
|
6
|
+
title: PropTypes.string,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
function KeyContent({ children, ...rest }) {
|
|
10
|
+
return (
|
|
11
|
+
<div className={`eea key-content ${rest.variant}`} {...rest}>
|
|
12
|
+
{children}
|
|
13
|
+
</div>
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
KeyContent.Title = ({ children }) => <p className="title">{children}</p>;
|
|
18
|
+
KeyContent.List = ({ children, ...rest }) => (
|
|
19
|
+
<List bulleted horizontal={false} items={rest.items}></List>
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
export default KeyContent;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import KeyContent from './KeyContent';
|
|
3
|
+
// eslint-disable-next-line import/no-unresolved
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
title: 'Components/Key Content',
|
|
7
|
+
component: KeyContent,
|
|
8
|
+
argTypes: {
|
|
9
|
+
title: {
|
|
10
|
+
description: 'Key Content title',
|
|
11
|
+
table: {
|
|
12
|
+
defaultValue: { summary: '""' },
|
|
13
|
+
type: { summary: 'string' },
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
items: {
|
|
17
|
+
description: 'array of list content',
|
|
18
|
+
table: {
|
|
19
|
+
type: { summary: 'object' },
|
|
20
|
+
defaultValue: { summary: ' "" ' },
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const DefaultTemplate = (args) => (
|
|
27
|
+
<KeyContent variant="colored" {...args}>
|
|
28
|
+
<KeyContent.Title>{args.title}</KeyContent.Title>
|
|
29
|
+
<KeyContent.List {...args}></KeyContent.List>
|
|
30
|
+
</KeyContent>
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
export const Default = DefaultTemplate.bind({});
|
|
34
|
+
Default.args = {
|
|
35
|
+
title: 'Lorem ipsum',
|
|
36
|
+
items: [
|
|
37
|
+
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Massa volutpat, feugiat lacus libero morbi dui. Ipsum vestibulum, faucibus aliquam pharetra ullamcorper accumsan. Mauris et blandit magna velit aliquam mattis tristique cursus. Gravida quis porta dictum sed nisl gravida. Dictum sapien purus ultrices leo felis quis.',
|
|
38
|
+
'Turpis feugiat felis id imperdiet imperdiet suspendisse. Sed pulvinar nisi, convallis sed non non eu, erat. ',
|
|
39
|
+
'Felis malesuada in elementum turpis. Enim, eu adipiscing sit fames ornare amet, suscipit. Neque, faucibus facilisi egestas vitae viverra tristique cum viverra elit. Nunc fermentum bibendum fames ultricies turpis habitant. ',
|
|
40
|
+
],
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const SecondaryTemplate = (args) => (
|
|
44
|
+
<KeyContent {...args}>
|
|
45
|
+
<KeyContent.Title>{args.title}</KeyContent.Title>
|
|
46
|
+
<KeyContent.List {...args}></KeyContent.List>
|
|
47
|
+
</KeyContent>
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
export const Secondary = SecondaryTemplate.bind({});
|
|
51
|
+
Secondary.args = {
|
|
52
|
+
title: 'Lorem ipsum',
|
|
53
|
+
items: [
|
|
54
|
+
'Sed pulvinar nisi, convallis sed non non eu, erat.',
|
|
55
|
+
'Consectetur adipiscing elit ut aliquam, purus sit amet luctus venenatis',
|
|
56
|
+
'Lorem ipsum dolor sit amet, consectetur',
|
|
57
|
+
'Purus sit amet luctus venenatis, lectus',
|
|
58
|
+
'Sed placerat sit erat sed massa in leo sit in ac vivamus tincidunt tincidunt tristique mi molestie dictum faucibus mauris',
|
|
59
|
+
'Luctus malesuada non in adipiscing convallis consectetur egestas sed',
|
|
60
|
+
'Vulputate gravida amet amet convallis quis',
|
|
61
|
+
],
|
|
62
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Loader } from 'semantic-ui-react';
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title: 'Components/Loader',
|
|
6
|
+
component: Loader,
|
|
7
|
+
argTypes: {
|
|
8
|
+
content: {
|
|
9
|
+
description: 'loader primary content',
|
|
10
|
+
table: {
|
|
11
|
+
type: {
|
|
12
|
+
summary: 'custom',
|
|
13
|
+
},
|
|
14
|
+
defaultValue: {
|
|
15
|
+
summary: '',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const Template = (args) => <Loader {...args} inline="centered" />;
|
|
23
|
+
|
|
24
|
+
export const Default = Template.bind({});
|
|
25
|
+
Default.args = {
|
|
26
|
+
active: true,
|
|
27
|
+
content: '',
|
|
28
|
+
size: 'medium',
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
Default.argTypes = {
|
|
32
|
+
size: {
|
|
33
|
+
options: [
|
|
34
|
+
'mini',
|
|
35
|
+
'tiny',
|
|
36
|
+
'small',
|
|
37
|
+
'medium',
|
|
38
|
+
'large',
|
|
39
|
+
'big',
|
|
40
|
+
'huge',
|
|
41
|
+
'massive',
|
|
42
|
+
],
|
|
43
|
+
control: { type: 'select' },
|
|
44
|
+
},
|
|
45
|
+
};
|