@ilo-org/react 0.2.1 → 0.3.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/CHANGELOG.md +10 -0
- package/lib/cjs/components/Navigation/Navigation.js +48 -0
- package/lib/cjs/components/Navigation/index.js +20 -0
- package/lib/cjs/components/index.js +2 -0
- package/lib/cjs/index.js +2 -0
- package/lib/esm/components/Navigation/Navigation.js +46 -0
- package/lib/esm/components/Navigation/index.js +14 -0
- package/lib/esm/components/index.js +1 -0
- package/lib/esm/index.js +1 -0
- package/lib/types/react/src/components/Navigation/Navigation.d.ts +4 -0
- package/lib/types/react/src/components/Navigation/Navigation.props.d.ts +99 -0
- package/lib/types/react/src/components/Navigation/index.d.ts +1 -0
- package/lib/types/react/src/components/index.d.ts +1 -0
- package/package.json +2 -1
- package/public/favicon.ico +0 -0
- package/src/components/Navigation/Navigation.args.ts +112 -0
- package/src/components/Navigation/Navigation.props.ts +120 -0
- package/src/components/Navigation/Navigation.tsx +246 -0
- package/src/components/Navigation/index.ts +1 -0
- package/src/components/index.ts +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var require$$0 = require('react');
|
|
5
|
+
var hooks_useGlobalSettings = require('../../hooks/useGlobalSettings.js');
|
|
6
|
+
var components_ContextMenu_ContextMenu = require('../ContextMenu/ContextMenu.js');
|
|
7
|
+
var components_SearchField_SearchField = require('../SearchField/SearchField.js');
|
|
8
|
+
var classNames = require('classnames');
|
|
9
|
+
require('tslib');
|
|
10
|
+
require('../../GlobalCtx-97e4b433.js');
|
|
11
|
+
require('../Input/Input.js');
|
|
12
|
+
require('../Fieldset/Fieldset.js');
|
|
13
|
+
require('../Tooltip/Tooltip.js');
|
|
14
|
+
require('react-dom');
|
|
15
|
+
require('../FormElement/FormElement.js');
|
|
16
|
+
|
|
17
|
+
const Navigation = ({ logo, mobilelogo, siteurl, tagline, primarynav, subnav, menulabel, menucloselabel, searchlabel, searchfield, languagelabel, languagecontextmenu, }) => {
|
|
18
|
+
const { prefix } = hooks_useGlobalSettings();
|
|
19
|
+
const [toggleMenuOpen, setMenuToggleOpen] = require$$0.useState(false);
|
|
20
|
+
const [toggleSearchOpen, setSearchToggleOpen] = require$$0.useState(false);
|
|
21
|
+
const [toggleSubnavOpen, setSubnavToggleOpen] = require$$0.useState(false);
|
|
22
|
+
const [toggleLanguageOpen, setLanguageToggleOpen] = require$$0.useState(false);
|
|
23
|
+
const baseClass = `${prefix}--header`;
|
|
24
|
+
const NavigationClasses = classNames(baseClass, {
|
|
25
|
+
[`${prefix}--mobile--open`]: toggleMenuOpen,
|
|
26
|
+
[`${prefix}--select--open`]: toggleLanguageOpen,
|
|
27
|
+
[`${prefix}--search--open`]: toggleSearchOpen,
|
|
28
|
+
[`${prefix}--subnav--open`]: toggleSubnavOpen,
|
|
29
|
+
});
|
|
30
|
+
const handleMenuToggle = () => {
|
|
31
|
+
setMenuToggleOpen(!toggleMenuOpen);
|
|
32
|
+
};
|
|
33
|
+
const handleLanguageToggle = () => {
|
|
34
|
+
setLanguageToggleOpen(!toggleLanguageOpen);
|
|
35
|
+
};
|
|
36
|
+
const handleSearchToggle = () => {
|
|
37
|
+
setSearchToggleOpen(!toggleSearchOpen);
|
|
38
|
+
};
|
|
39
|
+
const handleSubnavToggle = () => {
|
|
40
|
+
setSubnavToggleOpen(!toggleSubnavOpen);
|
|
41
|
+
};
|
|
42
|
+
return (jsxRuntime.jsxs("header", Object.assign({ className: NavigationClasses }, { children: [jsxRuntime.jsx("div", Object.assign({ className: `${baseClass}--utility-bar` }, { children: jsxRuntime.jsx("div", Object.assign({ className: `${prefix}--language-switcher` }, { children: jsxRuntime.jsxs("div", Object.assign({ className: `${prefix}--language-switcher--wrap` }, { children: [jsxRuntime.jsx("button", Object.assign({ className: `${prefix}--language-switcher--button`, type: "button" }, { children: languagelabel })), jsxRuntime.jsx(components_ContextMenu_ContextMenu, { links: languagecontextmenu === null || languagecontextmenu === void 0 ? void 0 : languagecontextmenu.links })] })) })) })), jsxRuntime.jsx("div", Object.assign({ className: `${baseClass}--logo-bar` }, { children: jsxRuntime.jsxs("div", Object.assign({ className: `${baseClass}--inner` }, { children: [jsxRuntime.jsx("a", Object.assign({ href: siteurl, className: `${baseClass}--logo-link` }, { children: jsxRuntime.jsx("img", { className: `${baseClass}--logo`, src: logo, alt: "ILO Logo" }) })), jsxRuntime.jsxs("p", Object.assign({ className: `${baseClass}--logo-tagline` }, { children: [tagline === null || tagline === void 0 ? void 0 : tagline.tag, jsxRuntime.jsx("span", Object.assign({ className: `${baseClass}--logo-tagline--small` }, { children: tagline === null || tagline === void 0 ? void 0 : tagline.small }))] })), jsxRuntime.jsx("button", Object.assign({ className: `${baseClass}--menu`, onClick: handleMenuToggle }, { children: menulabel }))] })) })), jsxRuntime.jsxs("div", Object.assign({ className: `${baseClass}--navigation` }, { children: [jsxRuntime.jsxs("div", Object.assign({ className: `${baseClass}--inner` }, { children: [jsxRuntime.jsxs("div", Object.assign({ className: `${prefix}--mobile--nav` }, { children: [jsxRuntime.jsxs("div", Object.assign({ className: `${prefix}--mobile--nav--logo` }, { children: [jsxRuntime.jsx("a", Object.assign({ href: siteurl, className: `${baseClass}--logo-link` }, { children: jsxRuntime.jsx("img", { className: `${baseClass}--logo`, src: mobilelogo, alt: "ILO Logo" }) })), jsxRuntime.jsx("button", Object.assign({ className: `${baseClass}--menu--close`, onClick: handleMenuToggle }, { children: menucloselabel }))] })), jsxRuntime.jsx("div", Object.assign({ className: `${prefix}--mobile--nav--search` }, { children: jsxRuntime.jsx(components_SearchField_SearchField, { input: searchfield === null || searchfield === void 0 ? void 0 : searchfield.input, action: searchfield === null || searchfield === void 0 ? void 0 : searchfield.action }) })), jsxRuntime.jsx("div", Object.assign({ className: `${prefix}--mobile--nav--language--switcher` }, { children: jsxRuntime.jsx("button", Object.assign({ className: `${prefix}--mobile--nav--language--switcher--button`, onClick: handleLanguageToggle, type: "button" }, { children: languagelabel })) })), jsxRuntime.jsx("div", Object.assign({ className: `${prefix}--mobile--nav--language--select` }, { children: jsxRuntime.jsxs("div", Object.assign({ className: `${baseClass}--inner` }, { children: [jsxRuntime.jsxs("div", Object.assign({ className: `${prefix}--mobile--subnav--menu` }, { children: [jsxRuntime.jsx("button", Object.assign({ className: `${prefix}--mobile--subnav--back`, onClick: handleLanguageToggle, type: "button" }, { children: subnav === null || subnav === void 0 ? void 0 : subnav.mobilebacklabel })), jsxRuntime.jsx("button", Object.assign({ className: `${baseClass}--menu--close`, onClick: handleMenuToggle }, { children: subnav === null || subnav === void 0 ? void 0 : subnav.mobilecloselabel })), jsxRuntime.jsx("h6", Object.assign({ className: `${prefix}--mobile--subnav--label` }, { children: languagelabel }))] })), jsxRuntime.jsx("ul", Object.assign({ className: `${prefix}--nav--set` }, { children: (languagecontextmenu === null || languagecontextmenu === void 0 ? void 0 : languagecontextmenu.links) &&
|
|
43
|
+
languagecontextmenu.links.map((item, index) => (jsxRuntime.jsx("li", Object.assign({ className: `${prefix}--nav--items` }, { children: jsxRuntime.jsx("a", Object.assign({ href: item.url, className: `${prefix}--nav--link ${prefix}--nav--language` }, { children: item.label })) }), index))) }))] })) }))] })), jsxRuntime.jsxs("nav", Object.assign({ className: `${prefix}--nav`, "aria-labelledby": "primary-navigation" }, { children: [jsxRuntime.jsx("h2", Object.assign({ className: `${prefix}--nav--label`, id: "primary-navigation" }, { children: primarynav === null || primarynav === void 0 ? void 0 : primarynav.navlabel })), jsxRuntime.jsxs("ul", Object.assign({ className: `${prefix}--nav--set` }, { children: [(primarynav === null || primarynav === void 0 ? void 0 : primarynav.items) &&
|
|
44
|
+
primarynav.items.map((item, index) => (jsxRuntime.jsx("li", Object.assign({ className: `${prefix}--nav--items` }, { children: jsxRuntime.jsx("a", Object.assign({ href: item.url, className: `${prefix}--nav--link` }, { children: item.label })) }), index))), subnav && (jsxRuntime.jsx("li", Object.assign({ className: `${prefix}--nav--items` }, { children: jsxRuntime.jsx("button", Object.assign({ className: `${prefix}--nav--trigger`, onClick: handleSubnavToggle }, { children: subnav.buttonlabel })) })))] }))] })), jsxRuntime.jsx("div", Object.assign({ className: `${prefix}--search` }, { children: jsxRuntime.jsx("button", Object.assign({ className: `${prefix}--search--button`, type: "button", onClick: handleSearchToggle }, { children: searchlabel })) }))] })), subnav && (jsxRuntime.jsx("nav", Object.assign({ className: `${prefix}--subnav`, "aria-labelledby": "secondary-navigation" }, { children: jsxRuntime.jsxs("div", Object.assign({ className: `${prefix}--subnav--inner` }, { children: [jsxRuntime.jsx("div", Object.assign({ className: `${prefix}--mobile--subnav` }, { children: jsxRuntime.jsxs("div", Object.assign({ className: `${prefix}--mobile--subnav--menu` }, { children: [jsxRuntime.jsx("button", Object.assign({ className: `${prefix}--mobile--subnav--back`, onClick: handleSubnavToggle, type: "button" }, { children: subnav.mobilebacklabel })), jsxRuntime.jsx("button", Object.assign({ className: `${prefix}--header--menu--close`, onClick: handleMenuToggle }, { children: subnav.mobilecloselabel })), jsxRuntime.jsx("h6", Object.assign({ className: `${prefix}--mobile--subnav--label` }, { children: subnav.buttonlabel }))] })) })), jsxRuntime.jsx("h2", Object.assign({ className: `${prefix}--nav--label`, id: "secondary-navigation" }, { children: subnav.navlabel })), jsxRuntime.jsx("ul", Object.assign({ className: `${prefix}--subnav--set` }, { children: (subnav === null || subnav === void 0 ? void 0 : subnav.items) &&
|
|
45
|
+
subnav.items.map((item, index) => (jsxRuntime.jsx("li", Object.assign({ className: `${prefix}--subnav--items` }, { children: jsxRuntime.jsx("a", Object.assign({ href: item.url, className: `${prefix}--subnav--link` }, { children: item.label })) }), index))) }))] })) }))), jsxRuntime.jsx("div", Object.assign({ className: `${prefix}--search-box` }, { children: jsxRuntime.jsx("div", Object.assign({ className: `${prefix}--header--inner` }, { children: jsxRuntime.jsx(components_SearchField_SearchField, { input: searchfield === null || searchfield === void 0 ? void 0 : searchfield.input, action: searchfield === null || searchfield === void 0 ? void 0 : searchfield.action }) })) }))] }))] })));
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
module.exports = Navigation;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var components_Navigation_Navigation = require('./Navigation.js');
|
|
4
|
+
require('react/jsx-runtime');
|
|
5
|
+
require('react');
|
|
6
|
+
require('../../hooks/useGlobalSettings.js');
|
|
7
|
+
require('tslib');
|
|
8
|
+
require('../../GlobalCtx-97e4b433.js');
|
|
9
|
+
require('../ContextMenu/ContextMenu.js');
|
|
10
|
+
require('classnames');
|
|
11
|
+
require('../SearchField/SearchField.js');
|
|
12
|
+
require('../Input/Input.js');
|
|
13
|
+
require('../Fieldset/Fieldset.js');
|
|
14
|
+
require('../Tooltip/Tooltip.js');
|
|
15
|
+
require('react-dom');
|
|
16
|
+
require('../FormElement/FormElement.js');
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
exports.Navigation = components_Navigation_Navigation;
|
|
@@ -52,6 +52,7 @@ var components_Profile_Profile = require('./Profile/Profile.js');
|
|
|
52
52
|
var components_TableOfContents_TableOfContents = require('./TableOfContents/TableOfContents.js');
|
|
53
53
|
var components_Footer_Footer = require('./Footer/Footer.js');
|
|
54
54
|
var components_LocalNav_LocalNav = require('./LocalNav/LocalNav.js');
|
|
55
|
+
var components_Navigation_Navigation = require('./Navigation/Navigation.js');
|
|
55
56
|
require('../hooks/useGlobalSettings.js');
|
|
56
57
|
require('../AccordionCtx-fe08ff45.js');
|
|
57
58
|
require('@ilo-org/utils');
|
|
@@ -115,3 +116,4 @@ exports.Profile = components_Profile_Profile;
|
|
|
115
116
|
exports.TableOfContents = components_TableOfContents_TableOfContents;
|
|
116
117
|
exports.Footer = components_Footer_Footer;
|
|
117
118
|
exports.LocalNav = components_LocalNav_LocalNav;
|
|
119
|
+
exports.Navigation = components_Navigation_Navigation;
|
package/lib/cjs/index.js
CHANGED
|
@@ -52,6 +52,7 @@ var components_Profile_Profile = require('./components/Profile/Profile.js');
|
|
|
52
52
|
var components_TableOfContents_TableOfContents = require('./components/TableOfContents/TableOfContents.js');
|
|
53
53
|
var components_Footer_Footer = require('./components/Footer/Footer.js');
|
|
54
54
|
var components_LocalNav_LocalNav = require('./components/LocalNav/LocalNav.js');
|
|
55
|
+
var components_Navigation_Navigation = require('./components/Navigation/Navigation.js');
|
|
55
56
|
require('./hooks/useGlobalSettings.js');
|
|
56
57
|
require('./AccordionCtx-fe08ff45.js');
|
|
57
58
|
require('@ilo-org/utils');
|
|
@@ -115,3 +116,4 @@ exports.Profile = components_Profile_Profile;
|
|
|
115
116
|
exports.TableOfContents = components_TableOfContents_TableOfContents;
|
|
116
117
|
exports.Footer = components_Footer_Footer;
|
|
117
118
|
exports.LocalNav = components_LocalNav_LocalNav;
|
|
119
|
+
exports.Navigation = components_Navigation_Navigation;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import useGlobalSettings from '../../hooks/useGlobalSettings.js';
|
|
4
|
+
import ContextMenu from '../ContextMenu/ContextMenu.js';
|
|
5
|
+
import SearchField from '../SearchField/SearchField.js';
|
|
6
|
+
import classNames from 'classnames';
|
|
7
|
+
import 'tslib';
|
|
8
|
+
import '../../GlobalCtx-7fb23cfa.js';
|
|
9
|
+
import '../Input/Input.js';
|
|
10
|
+
import '../Fieldset/Fieldset.js';
|
|
11
|
+
import '../Tooltip/Tooltip.js';
|
|
12
|
+
import 'react-dom';
|
|
13
|
+
import '../FormElement/FormElement.js';
|
|
14
|
+
|
|
15
|
+
const Navigation = ({ logo, mobilelogo, siteurl, tagline, primarynav, subnav, menulabel, menucloselabel, searchlabel, searchfield, languagelabel, languagecontextmenu, }) => {
|
|
16
|
+
const { prefix } = useGlobalSettings();
|
|
17
|
+
const [toggleMenuOpen, setMenuToggleOpen] = useState(false);
|
|
18
|
+
const [toggleSearchOpen, setSearchToggleOpen] = useState(false);
|
|
19
|
+
const [toggleSubnavOpen, setSubnavToggleOpen] = useState(false);
|
|
20
|
+
const [toggleLanguageOpen, setLanguageToggleOpen] = useState(false);
|
|
21
|
+
const baseClass = `${prefix}--header`;
|
|
22
|
+
const NavigationClasses = classNames(baseClass, {
|
|
23
|
+
[`${prefix}--mobile--open`]: toggleMenuOpen,
|
|
24
|
+
[`${prefix}--select--open`]: toggleLanguageOpen,
|
|
25
|
+
[`${prefix}--search--open`]: toggleSearchOpen,
|
|
26
|
+
[`${prefix}--subnav--open`]: toggleSubnavOpen,
|
|
27
|
+
});
|
|
28
|
+
const handleMenuToggle = () => {
|
|
29
|
+
setMenuToggleOpen(!toggleMenuOpen);
|
|
30
|
+
};
|
|
31
|
+
const handleLanguageToggle = () => {
|
|
32
|
+
setLanguageToggleOpen(!toggleLanguageOpen);
|
|
33
|
+
};
|
|
34
|
+
const handleSearchToggle = () => {
|
|
35
|
+
setSearchToggleOpen(!toggleSearchOpen);
|
|
36
|
+
};
|
|
37
|
+
const handleSubnavToggle = () => {
|
|
38
|
+
setSubnavToggleOpen(!toggleSubnavOpen);
|
|
39
|
+
};
|
|
40
|
+
return (jsxs("header", Object.assign({ className: NavigationClasses }, { children: [jsx("div", Object.assign({ className: `${baseClass}--utility-bar` }, { children: jsx("div", Object.assign({ className: `${prefix}--language-switcher` }, { children: jsxs("div", Object.assign({ className: `${prefix}--language-switcher--wrap` }, { children: [jsx("button", Object.assign({ className: `${prefix}--language-switcher--button`, type: "button" }, { children: languagelabel })), jsx(ContextMenu, { links: languagecontextmenu === null || languagecontextmenu === void 0 ? void 0 : languagecontextmenu.links })] })) })) })), jsx("div", Object.assign({ className: `${baseClass}--logo-bar` }, { children: jsxs("div", Object.assign({ className: `${baseClass}--inner` }, { children: [jsx("a", Object.assign({ href: siteurl, className: `${baseClass}--logo-link` }, { children: jsx("img", { className: `${baseClass}--logo`, src: logo, alt: "ILO Logo" }) })), jsxs("p", Object.assign({ className: `${baseClass}--logo-tagline` }, { children: [tagline === null || tagline === void 0 ? void 0 : tagline.tag, jsx("span", Object.assign({ className: `${baseClass}--logo-tagline--small` }, { children: tagline === null || tagline === void 0 ? void 0 : tagline.small }))] })), jsx("button", Object.assign({ className: `${baseClass}--menu`, onClick: handleMenuToggle }, { children: menulabel }))] })) })), jsxs("div", Object.assign({ className: `${baseClass}--navigation` }, { children: [jsxs("div", Object.assign({ className: `${baseClass}--inner` }, { children: [jsxs("div", Object.assign({ className: `${prefix}--mobile--nav` }, { children: [jsxs("div", Object.assign({ className: `${prefix}--mobile--nav--logo` }, { children: [jsx("a", Object.assign({ href: siteurl, className: `${baseClass}--logo-link` }, { children: jsx("img", { className: `${baseClass}--logo`, src: mobilelogo, alt: "ILO Logo" }) })), jsx("button", Object.assign({ className: `${baseClass}--menu--close`, onClick: handleMenuToggle }, { children: menucloselabel }))] })), jsx("div", Object.assign({ className: `${prefix}--mobile--nav--search` }, { children: jsx(SearchField, { input: searchfield === null || searchfield === void 0 ? void 0 : searchfield.input, action: searchfield === null || searchfield === void 0 ? void 0 : searchfield.action }) })), jsx("div", Object.assign({ className: `${prefix}--mobile--nav--language--switcher` }, { children: jsx("button", Object.assign({ className: `${prefix}--mobile--nav--language--switcher--button`, onClick: handleLanguageToggle, type: "button" }, { children: languagelabel })) })), jsx("div", Object.assign({ className: `${prefix}--mobile--nav--language--select` }, { children: jsxs("div", Object.assign({ className: `${baseClass}--inner` }, { children: [jsxs("div", Object.assign({ className: `${prefix}--mobile--subnav--menu` }, { children: [jsx("button", Object.assign({ className: `${prefix}--mobile--subnav--back`, onClick: handleLanguageToggle, type: "button" }, { children: subnav === null || subnav === void 0 ? void 0 : subnav.mobilebacklabel })), jsx("button", Object.assign({ className: `${baseClass}--menu--close`, onClick: handleMenuToggle }, { children: subnav === null || subnav === void 0 ? void 0 : subnav.mobilecloselabel })), jsx("h6", Object.assign({ className: `${prefix}--mobile--subnav--label` }, { children: languagelabel }))] })), jsx("ul", Object.assign({ className: `${prefix}--nav--set` }, { children: (languagecontextmenu === null || languagecontextmenu === void 0 ? void 0 : languagecontextmenu.links) &&
|
|
41
|
+
languagecontextmenu.links.map((item, index) => (jsx("li", Object.assign({ className: `${prefix}--nav--items` }, { children: jsx("a", Object.assign({ href: item.url, className: `${prefix}--nav--link ${prefix}--nav--language` }, { children: item.label })) }), index))) }))] })) }))] })), jsxs("nav", Object.assign({ className: `${prefix}--nav`, "aria-labelledby": "primary-navigation" }, { children: [jsx("h2", Object.assign({ className: `${prefix}--nav--label`, id: "primary-navigation" }, { children: primarynav === null || primarynav === void 0 ? void 0 : primarynav.navlabel })), jsxs("ul", Object.assign({ className: `${prefix}--nav--set` }, { children: [(primarynav === null || primarynav === void 0 ? void 0 : primarynav.items) &&
|
|
42
|
+
primarynav.items.map((item, index) => (jsx("li", Object.assign({ className: `${prefix}--nav--items` }, { children: jsx("a", Object.assign({ href: item.url, className: `${prefix}--nav--link` }, { children: item.label })) }), index))), subnav && (jsx("li", Object.assign({ className: `${prefix}--nav--items` }, { children: jsx("button", Object.assign({ className: `${prefix}--nav--trigger`, onClick: handleSubnavToggle }, { children: subnav.buttonlabel })) })))] }))] })), jsx("div", Object.assign({ className: `${prefix}--search` }, { children: jsx("button", Object.assign({ className: `${prefix}--search--button`, type: "button", onClick: handleSearchToggle }, { children: searchlabel })) }))] })), subnav && (jsx("nav", Object.assign({ className: `${prefix}--subnav`, "aria-labelledby": "secondary-navigation" }, { children: jsxs("div", Object.assign({ className: `${prefix}--subnav--inner` }, { children: [jsx("div", Object.assign({ className: `${prefix}--mobile--subnav` }, { children: jsxs("div", Object.assign({ className: `${prefix}--mobile--subnav--menu` }, { children: [jsx("button", Object.assign({ className: `${prefix}--mobile--subnav--back`, onClick: handleSubnavToggle, type: "button" }, { children: subnav.mobilebacklabel })), jsx("button", Object.assign({ className: `${prefix}--header--menu--close`, onClick: handleMenuToggle }, { children: subnav.mobilecloselabel })), jsx("h6", Object.assign({ className: `${prefix}--mobile--subnav--label` }, { children: subnav.buttonlabel }))] })) })), jsx("h2", Object.assign({ className: `${prefix}--nav--label`, id: "secondary-navigation" }, { children: subnav.navlabel })), jsx("ul", Object.assign({ className: `${prefix}--subnav--set` }, { children: (subnav === null || subnav === void 0 ? void 0 : subnav.items) &&
|
|
43
|
+
subnav.items.map((item, index) => (jsx("li", Object.assign({ className: `${prefix}--subnav--items` }, { children: jsx("a", Object.assign({ href: item.url, className: `${prefix}--subnav--link` }, { children: item.label })) }), index))) }))] })) }))), jsx("div", Object.assign({ className: `${prefix}--search-box` }, { children: jsx("div", Object.assign({ className: `${prefix}--header--inner` }, { children: jsx(SearchField, { input: searchfield === null || searchfield === void 0 ? void 0 : searchfield.input, action: searchfield === null || searchfield === void 0 ? void 0 : searchfield.action }) })) }))] }))] })));
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export { Navigation as default };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { default as Navigation } from './Navigation.js';
|
|
2
|
+
import 'react/jsx-runtime';
|
|
3
|
+
import 'react';
|
|
4
|
+
import '../../hooks/useGlobalSettings.js';
|
|
5
|
+
import 'tslib';
|
|
6
|
+
import '../../GlobalCtx-7fb23cfa.js';
|
|
7
|
+
import '../ContextMenu/ContextMenu.js';
|
|
8
|
+
import 'classnames';
|
|
9
|
+
import '../SearchField/SearchField.js';
|
|
10
|
+
import '../Input/Input.js';
|
|
11
|
+
import '../Fieldset/Fieldset.js';
|
|
12
|
+
import '../Tooltip/Tooltip.js';
|
|
13
|
+
import 'react-dom';
|
|
14
|
+
import '../FormElement/FormElement.js';
|
|
@@ -50,6 +50,7 @@ export { default as Profile } from './Profile/Profile.js';
|
|
|
50
50
|
export { default as TableOfContents } from './TableOfContents/TableOfContents.js';
|
|
51
51
|
export { default as Footer } from './Footer/Footer.js';
|
|
52
52
|
export { default as LocalNav } from './LocalNav/LocalNav.js';
|
|
53
|
+
export { default as Navigation } from './Navigation/Navigation.js';
|
|
53
54
|
import '../hooks/useGlobalSettings.js';
|
|
54
55
|
import '../AccordionCtx-8c051900.js';
|
|
55
56
|
import '@ilo-org/utils';
|
package/lib/esm/index.js
CHANGED
|
@@ -50,6 +50,7 @@ export { default as Profile } from './components/Profile/Profile.js';
|
|
|
50
50
|
export { default as TableOfContents } from './components/TableOfContents/TableOfContents.js';
|
|
51
51
|
export { default as Footer } from './components/Footer/Footer.js';
|
|
52
52
|
export { default as LocalNav } from './components/LocalNav/LocalNav.js';
|
|
53
|
+
export { default as Navigation } from './components/Navigation/Navigation.js';
|
|
53
54
|
import './hooks/useGlobalSettings.js';
|
|
54
55
|
import './AccordionCtx-8c051900.js';
|
|
55
56
|
import '@ilo-org/utils';
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { LinkProps, ContextMenuProps } from "../ContextMenu/ContextMenu.props";
|
|
2
|
+
import { SearchFieldProps } from "../SearchField/SearchField.props";
|
|
3
|
+
export interface NavigationProps {
|
|
4
|
+
/**
|
|
5
|
+
* Props for the logo of the Navigation
|
|
6
|
+
*/
|
|
7
|
+
logo?: Required<string>;
|
|
8
|
+
/**
|
|
9
|
+
* Props for the mobile logo of the Navigation
|
|
10
|
+
*/
|
|
11
|
+
mobilelogo?: Required<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Props for the home url of the Navigation
|
|
14
|
+
*/
|
|
15
|
+
siteurl?: Required<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Specify the tagline for the Navigation
|
|
18
|
+
*/
|
|
19
|
+
tagline?: Required<TaglineProps>;
|
|
20
|
+
/**
|
|
21
|
+
* Specify the primary items for the Navigation
|
|
22
|
+
*/
|
|
23
|
+
primarynav?: Required<PrimaryNavProps>;
|
|
24
|
+
/**
|
|
25
|
+
* Specify the secondary items for the Navigation
|
|
26
|
+
*/
|
|
27
|
+
subnav?: Required<SubNavProps>;
|
|
28
|
+
/**
|
|
29
|
+
* Specify the tagline for the Navigation
|
|
30
|
+
*/
|
|
31
|
+
searchlabel?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Specify the searchfield props for the Navigation
|
|
34
|
+
*/
|
|
35
|
+
searchfield?: SearchFieldProps;
|
|
36
|
+
/**
|
|
37
|
+
* Specify the menu label for the Navigation
|
|
38
|
+
*/
|
|
39
|
+
menulabel?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Specify the menu close label for the Navigation
|
|
42
|
+
*/
|
|
43
|
+
menucloselabel?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Specify the language label for the Navigation
|
|
46
|
+
*/
|
|
47
|
+
languagelabel?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Specify the language context menu for the Navigation
|
|
50
|
+
*/
|
|
51
|
+
languagecontextmenu?: ContextMenuProps;
|
|
52
|
+
}
|
|
53
|
+
interface PrimaryNavProps {
|
|
54
|
+
/**
|
|
55
|
+
* Specify the label for Navigation
|
|
56
|
+
*/
|
|
57
|
+
navlabel?: Required<string>;
|
|
58
|
+
/**
|
|
59
|
+
* Specify the close label for mobile Navigation
|
|
60
|
+
*/
|
|
61
|
+
mobilecloselabel?: Required<string>;
|
|
62
|
+
/**
|
|
63
|
+
* Specify the links
|
|
64
|
+
*/
|
|
65
|
+
items?: Required<Array<LinkProps>>;
|
|
66
|
+
}
|
|
67
|
+
interface SubNavProps {
|
|
68
|
+
/**
|
|
69
|
+
* Specify the label for sub Navigation
|
|
70
|
+
*/
|
|
71
|
+
navlabel?: Required<string>;
|
|
72
|
+
/**
|
|
73
|
+
* Specify the button label for sub Navigation
|
|
74
|
+
*/
|
|
75
|
+
buttonlabel?: Required<string>;
|
|
76
|
+
/**
|
|
77
|
+
* Specify the close label for mobile sub Navigation
|
|
78
|
+
*/
|
|
79
|
+
mobilecloselabel?: Required<string>;
|
|
80
|
+
/**
|
|
81
|
+
* Specify the back label for mobile sub Navigation
|
|
82
|
+
*/
|
|
83
|
+
mobilebacklabel?: Required<string>;
|
|
84
|
+
/**
|
|
85
|
+
* Specify the subnav links
|
|
86
|
+
*/
|
|
87
|
+
items?: Required<Array<LinkProps>>;
|
|
88
|
+
}
|
|
89
|
+
interface TaglineProps {
|
|
90
|
+
/**
|
|
91
|
+
* Specify the main tagline text
|
|
92
|
+
*/
|
|
93
|
+
tag?: Required<string>;
|
|
94
|
+
/**
|
|
95
|
+
* Specify the small tagline text
|
|
96
|
+
*/
|
|
97
|
+
small?: Required<string>;
|
|
98
|
+
}
|
|
99
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Navigation } from "./Navigation";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ilo-org/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "React components for the ILO's Design System",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ui_patterns",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"designsystem",
|
|
10
10
|
"components"
|
|
11
11
|
],
|
|
12
|
+
"homepage": "https://react.ui.ilo.org",
|
|
12
13
|
"repository": {
|
|
13
14
|
"type": "git",
|
|
14
15
|
"url": "https://github.com/international-labour-organization/designsystem.git",
|
|
Binary file
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { NavigationProps } from "./Navigation.props";
|
|
2
|
+
import ilo_logo_white from "@ilo-org/brand-assets/logo_en_horizontal_white.svg";
|
|
3
|
+
|
|
4
|
+
const basic: NavigationProps = {
|
|
5
|
+
logo: ilo_logo_white,
|
|
6
|
+
mobilelogo: ilo_logo_white,
|
|
7
|
+
siteurl: "https://www.ilo.org/",
|
|
8
|
+
tagline: {
|
|
9
|
+
tag: "Advancing social justice, promoting decent work",
|
|
10
|
+
small: "ILO is a specialized agency of the United Nations",
|
|
11
|
+
},
|
|
12
|
+
primarynav: {
|
|
13
|
+
navlabel: "Primary Navigation",
|
|
14
|
+
mobilecloselabel: "Close",
|
|
15
|
+
items: [
|
|
16
|
+
{
|
|
17
|
+
label: "Topics",
|
|
18
|
+
url: "https://www.ilo.org",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
label: "Countries",
|
|
22
|
+
url: "https://www.ilo.org",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
label: "Standards",
|
|
26
|
+
url: "https://www.ilo.org",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
label: "Statistics",
|
|
30
|
+
url: "https://www.ilo.org",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
label: "About",
|
|
34
|
+
url: "https://www.ilo.org",
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
subnav: {
|
|
39
|
+
navlabel: "Secondary Navigation",
|
|
40
|
+
buttonlabel: "More",
|
|
41
|
+
mobilecloselabel: "Close",
|
|
42
|
+
mobilebacklabel: "Menu Home",
|
|
43
|
+
items: [
|
|
44
|
+
{
|
|
45
|
+
label: "News",
|
|
46
|
+
url: "https://www.ilo.org",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
label: "Meeting & Events",
|
|
50
|
+
url: "https://www.ilo.org",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
label: "Publications",
|
|
54
|
+
url: "https://www.ilo.org",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
label: "Projects",
|
|
58
|
+
url: "https://www.ilo.org",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
label: "Partners",
|
|
62
|
+
url: "https://www.ilo.org",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
label: "Industries & Sectors",
|
|
66
|
+
url: "https://www.ilo.org",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
label: "About the ILO",
|
|
70
|
+
url: "https://www.ilo.org",
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
languagelabel: "English",
|
|
75
|
+
menulabel: "Menu",
|
|
76
|
+
menucloselabel: "Close",
|
|
77
|
+
languagecontextmenu: {
|
|
78
|
+
links: [
|
|
79
|
+
{
|
|
80
|
+
label: "Français",
|
|
81
|
+
url: "https://www.ilo.org",
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
label: "Español",
|
|
85
|
+
url: "https://www.ilo.org",
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
label: "中文",
|
|
89
|
+
url: "https://www.ilo.org",
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
label: "Русский",
|
|
93
|
+
url: "https://www.ilo.org",
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
searchlabel: "Search",
|
|
98
|
+
searchfield: {
|
|
99
|
+
action: "https://www.ilo.org",
|
|
100
|
+
input: {
|
|
101
|
+
label: "",
|
|
102
|
+
helper: "",
|
|
103
|
+
name: "text",
|
|
104
|
+
placeholder: "Search Field",
|
|
105
|
+
type: "text",
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const NavigationArgs = { basic };
|
|
111
|
+
|
|
112
|
+
export default NavigationArgs;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { LinkProps, ContextMenuProps } from "../ContextMenu/ContextMenu.props";
|
|
2
|
+
import { SearchFieldProps } from "../SearchField/SearchField.props";
|
|
3
|
+
|
|
4
|
+
export interface NavigationProps {
|
|
5
|
+
/**
|
|
6
|
+
* Props for the logo of the Navigation
|
|
7
|
+
*/
|
|
8
|
+
logo?: Required<string>;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Props for the mobile logo of the Navigation
|
|
12
|
+
*/
|
|
13
|
+
mobilelogo?: Required<string>;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Props for the home url of the Navigation
|
|
17
|
+
*/
|
|
18
|
+
siteurl?: Required<string>;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Specify the tagline for the Navigation
|
|
22
|
+
*/
|
|
23
|
+
tagline?: Required<TaglineProps>;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Specify the primary items for the Navigation
|
|
27
|
+
*/
|
|
28
|
+
primarynav?: Required<PrimaryNavProps>;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Specify the secondary items for the Navigation
|
|
32
|
+
*/
|
|
33
|
+
subnav?: Required<SubNavProps>;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Specify the tagline for the Navigation
|
|
37
|
+
*/
|
|
38
|
+
searchlabel?: string;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Specify the searchfield props for the Navigation
|
|
42
|
+
*/
|
|
43
|
+
searchfield?: SearchFieldProps;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Specify the menu label for the Navigation
|
|
47
|
+
*/
|
|
48
|
+
menulabel?: string;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Specify the menu close label for the Navigation
|
|
52
|
+
*/
|
|
53
|
+
menucloselabel?: string;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Specify the language label for the Navigation
|
|
57
|
+
*/
|
|
58
|
+
languagelabel?: string;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Specify the language context menu for the Navigation
|
|
62
|
+
*/
|
|
63
|
+
languagecontextmenu?: ContextMenuProps;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
interface PrimaryNavProps {
|
|
67
|
+
/**
|
|
68
|
+
* Specify the label for Navigation
|
|
69
|
+
*/
|
|
70
|
+
navlabel?: Required<string>;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Specify the close label for mobile Navigation
|
|
74
|
+
*/
|
|
75
|
+
mobilecloselabel?: Required<string>;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Specify the links
|
|
79
|
+
*/
|
|
80
|
+
items?: Required<Array<LinkProps>>;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
interface SubNavProps {
|
|
84
|
+
/**
|
|
85
|
+
* Specify the label for sub Navigation
|
|
86
|
+
*/
|
|
87
|
+
navlabel?: Required<string>;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Specify the button label for sub Navigation
|
|
91
|
+
*/
|
|
92
|
+
buttonlabel?: Required<string>;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Specify the close label for mobile sub Navigation
|
|
96
|
+
*/
|
|
97
|
+
mobilecloselabel?: Required<string>;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Specify the back label for mobile sub Navigation
|
|
101
|
+
*/
|
|
102
|
+
mobilebacklabel?: Required<string>;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Specify the subnav links
|
|
106
|
+
*/
|
|
107
|
+
items?: Required<Array<LinkProps>>;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
interface TaglineProps {
|
|
111
|
+
/**
|
|
112
|
+
* Specify the main tagline text
|
|
113
|
+
*/
|
|
114
|
+
tag?: Required<string>;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Specify the small tagline text
|
|
118
|
+
*/
|
|
119
|
+
small?: Required<string>;
|
|
120
|
+
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { FC, useState } from "react";
|
|
2
|
+
import useGlobalSettings from "../../hooks/useGlobalSettings";
|
|
3
|
+
import { ContextMenu } from "../ContextMenu";
|
|
4
|
+
import { SearchField } from "../SearchField";
|
|
5
|
+
import { NavigationProps } from "./Navigation.props";
|
|
6
|
+
import classnames from "classnames";
|
|
7
|
+
|
|
8
|
+
const Navigation: FC<NavigationProps> = ({
|
|
9
|
+
logo,
|
|
10
|
+
mobilelogo,
|
|
11
|
+
siteurl,
|
|
12
|
+
tagline,
|
|
13
|
+
primarynav,
|
|
14
|
+
subnav,
|
|
15
|
+
menulabel,
|
|
16
|
+
menucloselabel,
|
|
17
|
+
searchlabel,
|
|
18
|
+
searchfield,
|
|
19
|
+
languagelabel,
|
|
20
|
+
languagecontextmenu,
|
|
21
|
+
}) => {
|
|
22
|
+
const { prefix } = useGlobalSettings();
|
|
23
|
+
|
|
24
|
+
const [toggleMenuOpen, setMenuToggleOpen] = useState(false);
|
|
25
|
+
const [toggleSearchOpen, setSearchToggleOpen] = useState(false);
|
|
26
|
+
const [toggleSubnavOpen, setSubnavToggleOpen] = useState(false);
|
|
27
|
+
const [toggleLanguageOpen, setLanguageToggleOpen] = useState(false);
|
|
28
|
+
|
|
29
|
+
const baseClass = `${prefix}--header`;
|
|
30
|
+
const NavigationClasses = classnames(baseClass, {
|
|
31
|
+
[`${prefix}--mobile--open`]: toggleMenuOpen,
|
|
32
|
+
[`${prefix}--select--open`]: toggleLanguageOpen,
|
|
33
|
+
[`${prefix}--search--open`]: toggleSearchOpen,
|
|
34
|
+
[`${prefix}--subnav--open`]: toggleSubnavOpen,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const handleMenuToggle = () => {
|
|
38
|
+
setMenuToggleOpen(!toggleMenuOpen);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const handleLanguageToggle = () => {
|
|
42
|
+
setLanguageToggleOpen(!toggleLanguageOpen);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const handleSearchToggle = () => {
|
|
46
|
+
setSearchToggleOpen(!toggleSearchOpen);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const handleSubnavToggle = () => {
|
|
50
|
+
setSubnavToggleOpen(!toggleSubnavOpen);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<header className={NavigationClasses}>
|
|
55
|
+
<div className={`${baseClass}--utility-bar`}>
|
|
56
|
+
<div className={`${prefix}--language-switcher`}>
|
|
57
|
+
<div className={`${prefix}--language-switcher--wrap`}>
|
|
58
|
+
<button
|
|
59
|
+
className={`${prefix}--language-switcher--button`}
|
|
60
|
+
type="button"
|
|
61
|
+
>
|
|
62
|
+
{languagelabel}
|
|
63
|
+
</button>
|
|
64
|
+
<ContextMenu links={languagecontextmenu?.links}></ContextMenu>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
<div className={`${baseClass}--logo-bar`}>
|
|
69
|
+
<div className={`${baseClass}--inner`}>
|
|
70
|
+
<a href={siteurl} className={`${baseClass}--logo-link`}>
|
|
71
|
+
<img className={`${baseClass}--logo`} src={logo} alt="ILO Logo" />
|
|
72
|
+
</a>
|
|
73
|
+
<p className={`${baseClass}--logo-tagline`}>
|
|
74
|
+
{tagline?.tag}
|
|
75
|
+
<span className={`${baseClass}--logo-tagline--small`}>
|
|
76
|
+
{tagline?.small}
|
|
77
|
+
</span>
|
|
78
|
+
</p>
|
|
79
|
+
<button className={`${baseClass}--menu`} onClick={handleMenuToggle}>
|
|
80
|
+
{menulabel}
|
|
81
|
+
</button>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
<div className={`${baseClass}--navigation`}>
|
|
85
|
+
<div className={`${baseClass}--inner`}>
|
|
86
|
+
<div className={`${prefix}--mobile--nav`}>
|
|
87
|
+
<div className={`${prefix}--mobile--nav--logo`}>
|
|
88
|
+
<a href={siteurl} className={`${baseClass}--logo-link`}>
|
|
89
|
+
<img
|
|
90
|
+
className={`${baseClass}--logo`}
|
|
91
|
+
src={mobilelogo}
|
|
92
|
+
alt="ILO Logo"
|
|
93
|
+
/>
|
|
94
|
+
</a>
|
|
95
|
+
<button
|
|
96
|
+
className={`${baseClass}--menu--close`}
|
|
97
|
+
onClick={handleMenuToggle}
|
|
98
|
+
>
|
|
99
|
+
{menucloselabel}
|
|
100
|
+
</button>
|
|
101
|
+
</div>
|
|
102
|
+
<div className={`${prefix}--mobile--nav--search`}>
|
|
103
|
+
<SearchField
|
|
104
|
+
input={searchfield?.input}
|
|
105
|
+
action={searchfield?.action}
|
|
106
|
+
></SearchField>
|
|
107
|
+
</div>
|
|
108
|
+
<div className={`${prefix}--mobile--nav--language--switcher`}>
|
|
109
|
+
<button
|
|
110
|
+
className={`${prefix}--mobile--nav--language--switcher--button`}
|
|
111
|
+
onClick={handleLanguageToggle}
|
|
112
|
+
type="button"
|
|
113
|
+
>
|
|
114
|
+
{languagelabel}
|
|
115
|
+
</button>
|
|
116
|
+
</div>
|
|
117
|
+
<div className={`${prefix}--mobile--nav--language--select`}>
|
|
118
|
+
<div className={`${baseClass}--inner`}>
|
|
119
|
+
<div className={`${prefix}--mobile--subnav--menu`}>
|
|
120
|
+
<button
|
|
121
|
+
className={`${prefix}--mobile--subnav--back`}
|
|
122
|
+
onClick={handleLanguageToggle}
|
|
123
|
+
type="button"
|
|
124
|
+
>
|
|
125
|
+
{subnav?.mobilebacklabel}
|
|
126
|
+
</button>
|
|
127
|
+
<button
|
|
128
|
+
className={`${baseClass}--menu--close`}
|
|
129
|
+
onClick={handleMenuToggle}
|
|
130
|
+
>
|
|
131
|
+
{subnav?.mobilecloselabel}
|
|
132
|
+
</button>
|
|
133
|
+
<h6 className={`${prefix}--mobile--subnav--label`}>
|
|
134
|
+
{languagelabel}
|
|
135
|
+
</h6>
|
|
136
|
+
</div>
|
|
137
|
+
<ul className={`${prefix}--nav--set`}>
|
|
138
|
+
{languagecontextmenu?.links &&
|
|
139
|
+
languagecontextmenu.links.map((item, index) => (
|
|
140
|
+
<li className={`${prefix}--nav--items`} key={index}>
|
|
141
|
+
<a
|
|
142
|
+
href={item.url}
|
|
143
|
+
className={`${prefix}--nav--link ${prefix}--nav--language`}
|
|
144
|
+
>
|
|
145
|
+
{item.label}
|
|
146
|
+
</a>
|
|
147
|
+
</li>
|
|
148
|
+
))}
|
|
149
|
+
</ul>
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
<nav
|
|
154
|
+
className={`${prefix}--nav`}
|
|
155
|
+
aria-labelledby="primary-navigation"
|
|
156
|
+
>
|
|
157
|
+
<h2 className={`${prefix}--nav--label`} id="primary-navigation">
|
|
158
|
+
{primarynav?.navlabel}
|
|
159
|
+
</h2>
|
|
160
|
+
<ul className={`${prefix}--nav--set`}>
|
|
161
|
+
{primarynav?.items &&
|
|
162
|
+
primarynav.items.map((item, index) => (
|
|
163
|
+
<li className={`${prefix}--nav--items`} key={index}>
|
|
164
|
+
<a href={item.url} className={`${prefix}--nav--link`}>
|
|
165
|
+
{item.label}
|
|
166
|
+
</a>
|
|
167
|
+
</li>
|
|
168
|
+
))}
|
|
169
|
+
{subnav && (
|
|
170
|
+
<li className={`${prefix}--nav--items`}>
|
|
171
|
+
<button
|
|
172
|
+
className={`${prefix}--nav--trigger`}
|
|
173
|
+
onClick={handleSubnavToggle}
|
|
174
|
+
>
|
|
175
|
+
{subnav.buttonlabel}
|
|
176
|
+
</button>
|
|
177
|
+
</li>
|
|
178
|
+
)}
|
|
179
|
+
</ul>
|
|
180
|
+
</nav>
|
|
181
|
+
<div className={`${prefix}--search`}>
|
|
182
|
+
<button
|
|
183
|
+
className={`${prefix}--search--button`}
|
|
184
|
+
type="button"
|
|
185
|
+
onClick={handleSearchToggle}
|
|
186
|
+
>
|
|
187
|
+
{searchlabel}
|
|
188
|
+
</button>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
{subnav && (
|
|
192
|
+
<nav
|
|
193
|
+
className={`${prefix}--subnav`}
|
|
194
|
+
aria-labelledby="secondary-navigation"
|
|
195
|
+
>
|
|
196
|
+
<div className={`${prefix}--subnav--inner`}>
|
|
197
|
+
<div className={`${prefix}--mobile--subnav`}>
|
|
198
|
+
<div className={`${prefix}--mobile--subnav--menu`}>
|
|
199
|
+
<button
|
|
200
|
+
className={`${prefix}--mobile--subnav--back`}
|
|
201
|
+
onClick={handleSubnavToggle}
|
|
202
|
+
type="button"
|
|
203
|
+
>
|
|
204
|
+
{subnav.mobilebacklabel}
|
|
205
|
+
</button>
|
|
206
|
+
<button
|
|
207
|
+
className={`${prefix}--header--menu--close`}
|
|
208
|
+
onClick={handleMenuToggle}
|
|
209
|
+
>
|
|
210
|
+
{subnav.mobilecloselabel}
|
|
211
|
+
</button>
|
|
212
|
+
<h6 className={`${prefix}--mobile--subnav--label`}>
|
|
213
|
+
{subnav.buttonlabel}
|
|
214
|
+
</h6>
|
|
215
|
+
</div>
|
|
216
|
+
</div>
|
|
217
|
+
<h2 className={`${prefix}--nav--label`} id="secondary-navigation">
|
|
218
|
+
{subnav.navlabel}
|
|
219
|
+
</h2>
|
|
220
|
+
<ul className={`${prefix}--subnav--set`}>
|
|
221
|
+
{subnav?.items &&
|
|
222
|
+
subnav.items.map((item, index) => (
|
|
223
|
+
<li className={`${prefix}--subnav--items`} key={index}>
|
|
224
|
+
<a href={item.url} className={`${prefix}--subnav--link`}>
|
|
225
|
+
{item.label}
|
|
226
|
+
</a>
|
|
227
|
+
</li>
|
|
228
|
+
))}
|
|
229
|
+
</ul>
|
|
230
|
+
</div>
|
|
231
|
+
</nav>
|
|
232
|
+
)}
|
|
233
|
+
<div className={`${prefix}--search-box`}>
|
|
234
|
+
<div className={`${prefix}--header--inner`}>
|
|
235
|
+
<SearchField
|
|
236
|
+
input={searchfield?.input}
|
|
237
|
+
action={searchfield?.action}
|
|
238
|
+
></SearchField>
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
</header>
|
|
243
|
+
);
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
export default Navigation;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Navigation } from "./Navigation";
|
package/src/components/index.ts
CHANGED