@financial-times/dotcom-ui-header 2.5.2 → 3.0.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/browser.js +1 -1
- package/dist/node/components/drawer/additionalPartials.js +3 -3
- package/dist/node/components/drawer/topLevelPartials.js +2 -3
- package/dist/node/components/top/partials.js +1 -1
- package/package.json +15 -6
- package/src/components/drawer/additionalPartials.tsx +16 -10
- package/src/components/drawer/topLevelPartials.tsx +17 -6
- package/src/components/top/partials.tsx +11 -5
- package/styles.scss +1 -1
- package/bower.json +0 -9
package/browser.js
CHANGED
|
@@ -6,13 +6,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.EditionsSwitcher = exports.DrawerSpecialItem = exports.DrawerSingleItem = exports.DrawerParentItem = void 0;
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
8
|
const utils_1 = require("../../utils");
|
|
9
|
-
exports.DrawerParentItem = ({ item,
|
|
9
|
+
exports.DrawerParentItem = ({ item, idSuffix }) => {
|
|
10
10
|
const selected = item.selected ? 'selected' : 'unselected';
|
|
11
11
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
12
12
|
react_1.default.createElement("div", { key: item.url, className: "o-header__drawer-menu-toggle-wrapper" },
|
|
13
13
|
react_1.default.createElement("a", Object.assign({ className: `o-header__drawer-menu-link o-header__drawer-menu-link--${selected} o-header__drawer-menu-link--parent`, href: item.url }, utils_1.ariaSelected(item), { "data-trackable": item.label }), item.label),
|
|
14
|
-
react_1.default.createElement("button", { className: `o-header__drawer-menu-toggle o-header__drawer-menu-toggle--${selected}`, "aria-controls": `o-header-drawer-child-${
|
|
15
|
-
react_1.default.createElement("ul", { className: "o-header__drawer-menu-list o-header__drawer-menu-list--child", id: `o-header-drawer-child-${
|
|
14
|
+
react_1.default.createElement("button", { className: `o-header__drawer-menu-toggle o-header__drawer-menu-toggle--${selected}`, "aria-controls": `o-header-drawer-child-${idSuffix}`, "data-trackable": `sub-level-toggle | ${item.label}` }, `Show more ${item.label}`)),
|
|
15
|
+
react_1.default.createElement("ul", { className: "o-header__drawer-menu-list o-header__drawer-menu-list--child", id: `o-header-drawer-child-${idSuffix}`, "data-trackable": "sub-level" }, item.submenu.items.map((item) => {
|
|
16
16
|
const selected = item.selected ? 'selected' : 'unselected';
|
|
17
17
|
return (react_1.default.createElement("li", { key: item.url, className: "o-header__drawer-menu-item" },
|
|
18
18
|
react_1.default.createElement("a", Object.assign({ className: `o-header__drawer-menu-link o-header__drawer-menu-link--${selected} o-header__drawer-menu-link--child`, href: item.url, "data-trackable": item.label }, utils_1.ariaSelected(item)), item.label)));
|
|
@@ -41,12 +41,11 @@ const Search = () => (react_1.default.createElement("div", { className: "o-heade
|
|
|
41
41
|
const SectionPrimary = (props) => {
|
|
42
42
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
43
43
|
react_1.default.createElement("li", { className: "o-header__drawer-menu-item o-header__drawer-menu-item--heading" }, props.label),
|
|
44
|
-
props.submenu.items.map((item, index) => (react_1.default.createElement("li", { key: item.url, className: "o-header__drawer-menu-item" }, item.submenu ? react_1.default.createElement(additionalPartials_1.DrawerParentItem, { item: item,
|
|
44
|
+
props.submenu.items.map((item, index) => (react_1.default.createElement("li", { key: item.url, className: "o-header__drawer-menu-item" }, item.submenu ? (react_1.default.createElement(additionalPartials_1.DrawerParentItem, { item: item, idSuffix: `${index}` })) : (react_1.default.createElement(additionalPartials_1.DrawerSingleItem, Object.assign({}, item))))))));
|
|
45
45
|
};
|
|
46
46
|
const SectionSecondary = (props) => (react_1.default.createElement(react_1.default.Fragment, null,
|
|
47
47
|
react_1.default.createElement("li", { className: "o-header__drawer-menu-item o-header__drawer-menu-item--heading" }, props.label),
|
|
48
|
-
props.submenu.items.map((item) => (react_1.default.createElement("li", { key: item.url, className: "o-header__drawer-menu-item" },
|
|
49
|
-
react_1.default.createElement(additionalPartials_1.DrawerSingleItem, Object.assign({}, item)))))));
|
|
48
|
+
props.submenu.items.map((item, index) => (react_1.default.createElement("li", { key: item.url, className: "o-header__drawer-menu-item" }, item.submenu ? (react_1.default.createElement(additionalPartials_1.DrawerParentItem, { item: item, idSuffix: 'inner' + index })) : (react_1.default.createElement(additionalPartials_1.DrawerSingleItem, Object.assign({}, item))))))));
|
|
50
49
|
const SectionTertiary = (props) => (react_1.default.createElement(react_1.default.Fragment, null, props.submenu.items.map((item, index) => {
|
|
51
50
|
const divideItem = index === 0 ? 'o-header__drawer-menu-item--divide' : '';
|
|
52
51
|
return (react_1.default.createElement("li", { key: item.url, className: `o-header__drawer-menu-item ${divideItem}` },
|
|
@@ -12,7 +12,7 @@ const DrawerIcon = () => (react_1.default.createElement("a", { href: "#o-header-
|
|
|
12
12
|
react_1.default.createElement("span", { className: "o-header__top-link-label" }, "Open side navigation menu")));
|
|
13
13
|
const SearchIcon = () => (react_1.default.createElement("a", { href: `#o-header-search-primary`, className: "o-header__top-link o-header__top-link--search", "aria-controls": `o-header-search-primary`, title: "Open search bar", "data-trackable": "search-toggle" },
|
|
14
14
|
react_1.default.createElement("span", { className: "o-header__top-link-label" }, "Open search bar")));
|
|
15
|
-
const MyFt = () => (react_1.default.createElement("a", { className: "o-header__top-link o-header__top-link--myft", href: "/myft", "data-trackable": "my-ft", "data-tour-stage": "myFt", "aria-label": "My F T" },
|
|
15
|
+
const MyFt = () => (react_1.default.createElement("a", { className: "o-header__top-link o-header__top-link--myft", id: "o-header-top-link-myft", href: "/myft", "data-trackable": "my-ft", "data-tour-stage": "myFt", "aria-label": "My F T" },
|
|
16
16
|
react_1.default.createElement("span", { className: "o-header__visually-hidden" }, "myFT")));
|
|
17
17
|
const TopWrapper = (props) => (react_1.default.createElement("div", { className: "o-header__row o-header__top", "data-trackable": "header-top" },
|
|
18
18
|
react_1.default.createElement("div", { className: "o-header__container" },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@financial-times/dotcom-ui-header",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"browser": "browser.js",
|
|
6
6
|
"main": "component.js",
|
|
@@ -16,29 +16,38 @@
|
|
|
16
16
|
"build": "npm run build:node",
|
|
17
17
|
"build:node": "npm run tsc -- --module commonjs --outDir ./dist/node",
|
|
18
18
|
"build:svg-to-react": "node scripts/convertSvgsToReactComponents.js",
|
|
19
|
-
"dev": "npm run build:node -- --watch"
|
|
19
|
+
"dev": "npm run build:node -- --watch",
|
|
20
|
+
"preinstall": "[ \"$INIT_CWD\" != \"$PWD\" ] || npm_config_yes=true npx check-engine"
|
|
20
21
|
},
|
|
21
22
|
"keywords": [],
|
|
22
23
|
"author": "",
|
|
23
24
|
"license": "MIT",
|
|
24
25
|
"dependencies": {
|
|
25
|
-
"@financial-times/dotcom-types-navigation": "^
|
|
26
|
+
"@financial-times/dotcom-types-navigation": "^3.0.0",
|
|
27
|
+
"@financial-times/o-header": "^9.2.0",
|
|
28
|
+
"n-topic-search": "^3.0.0",
|
|
29
|
+
"n-ui-foundations": "^7.0.0"
|
|
26
30
|
},
|
|
27
31
|
"devDependencies": {
|
|
28
32
|
"@financial-times/logo-images": "^1.10.1",
|
|
29
33
|
"@svgr/core": "^5.0.0",
|
|
30
|
-
"camelcase": "^6.0.0"
|
|
34
|
+
"camelcase": "^6.0.0",
|
|
35
|
+
"check-engine": "^1.10.1"
|
|
31
36
|
},
|
|
32
37
|
"peerDependencies": {
|
|
33
38
|
"react": "^16.8.6"
|
|
34
39
|
},
|
|
35
40
|
"engines": {
|
|
36
|
-
"node": ">= 12.0.0"
|
|
41
|
+
"node": ">= 12.0.0",
|
|
42
|
+
"npm": "7.x || 8.x"
|
|
37
43
|
},
|
|
38
44
|
"repository": {
|
|
39
45
|
"type": "git",
|
|
40
46
|
"repository": "https://github.com/Financial-Times/dotcom-page-kit.git",
|
|
41
47
|
"directory": "packages/dotcom-ui-header"
|
|
42
48
|
},
|
|
43
|
-
"homepage": "https://github.com/Financial-Times/dotcom-page-kit/tree/HEAD/packages/dotcom-ui-header"
|
|
49
|
+
"homepage": "https://github.com/Financial-Times/dotcom-page-kit/tree/HEAD/packages/dotcom-ui-header",
|
|
50
|
+
"volta": {
|
|
51
|
+
"extends": "../../package.json"
|
|
52
|
+
}
|
|
44
53
|
}
|
|
@@ -4,10 +4,10 @@ import { TNavMenuItem, TNavEditions } from '@financial-times/dotcom-types-naviga
|
|
|
4
4
|
|
|
5
5
|
export type TDrawerParentItemProps = {
|
|
6
6
|
item: TNavMenuItem
|
|
7
|
-
|
|
7
|
+
idSuffix: string
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
export const DrawerParentItem = ({ item,
|
|
10
|
+
export const DrawerParentItem = ({ item, idSuffix }: TDrawerParentItemProps) => {
|
|
11
11
|
const selected = item.selected ? 'selected' : 'unselected'
|
|
12
12
|
return (
|
|
13
13
|
<React.Fragment>
|
|
@@ -16,20 +16,23 @@ export const DrawerParentItem = ({ item, index }: TDrawerParentItemProps) => {
|
|
|
16
16
|
className={`o-header__drawer-menu-link o-header__drawer-menu-link--${selected} o-header__drawer-menu-link--parent`}
|
|
17
17
|
href={item.url}
|
|
18
18
|
{...ariaSelected(item)}
|
|
19
|
-
data-trackable={item.label}
|
|
19
|
+
data-trackable={item.label}
|
|
20
|
+
>
|
|
20
21
|
{item.label}
|
|
21
22
|
</a>
|
|
22
23
|
<button
|
|
23
24
|
className={`o-header__drawer-menu-toggle o-header__drawer-menu-toggle--${selected}`}
|
|
24
|
-
aria-controls={`o-header-drawer-child-${
|
|
25
|
-
data-trackable={`sub-level-toggle | ${item.label}`}
|
|
25
|
+
aria-controls={`o-header-drawer-child-${idSuffix}`}
|
|
26
|
+
data-trackable={`sub-level-toggle | ${item.label}`}
|
|
27
|
+
>
|
|
26
28
|
{`Show more ${item.label}`}
|
|
27
29
|
</button>
|
|
28
30
|
</div>
|
|
29
31
|
<ul
|
|
30
32
|
className="o-header__drawer-menu-list o-header__drawer-menu-list--child"
|
|
31
|
-
id={`o-header-drawer-child-${
|
|
32
|
-
data-trackable="sub-level"
|
|
33
|
+
id={`o-header-drawer-child-${idSuffix}`}
|
|
34
|
+
data-trackable="sub-level"
|
|
35
|
+
>
|
|
33
36
|
{(item.submenu.items as TNavMenuItem[]).map((item) => {
|
|
34
37
|
const selected = item.selected ? 'selected' : 'unselected'
|
|
35
38
|
return (
|
|
@@ -38,7 +41,8 @@ export const DrawerParentItem = ({ item, index }: TDrawerParentItemProps) => {
|
|
|
38
41
|
className={`o-header__drawer-menu-link o-header__drawer-menu-link--${selected} o-header__drawer-menu-link--child`}
|
|
39
42
|
href={item.url}
|
|
40
43
|
data-trackable={item.label}
|
|
41
|
-
{...ariaSelected(item)}
|
|
44
|
+
{...ariaSelected(item)}
|
|
45
|
+
>
|
|
42
46
|
{item.label}
|
|
43
47
|
</a>
|
|
44
48
|
</li>
|
|
@@ -56,7 +60,8 @@ export const DrawerSingleItem = (item: TNavMenuItem) => {
|
|
|
56
60
|
className={`o-header__drawer-menu-link o-header__drawer-menu-link--${selected}`}
|
|
57
61
|
href={item.url}
|
|
58
62
|
data-trackable={item.label}
|
|
59
|
-
{...ariaSelected(item)}
|
|
63
|
+
{...ariaSelected(item)}
|
|
64
|
+
>
|
|
60
65
|
{item.label}
|
|
61
66
|
</a>
|
|
62
67
|
)
|
|
@@ -69,7 +74,8 @@ export const DrawerSpecialItem = (item: TNavMenuItem) => {
|
|
|
69
74
|
className={`o-header__drawer-menu-link o-header__drawer-menu-link--${selected} o-header__drawer-menu-link--secondary`}
|
|
70
75
|
href={item.url}
|
|
71
76
|
data-trackable={item.label}
|
|
72
|
-
{...ariaSelected(item)}
|
|
77
|
+
{...ariaSelected(item)}
|
|
78
|
+
>
|
|
73
79
|
{item.label}
|
|
74
80
|
</a>
|
|
75
81
|
)
|
|
@@ -19,7 +19,8 @@ const Drawer = (props: THeaderProps) => {
|
|
|
19
19
|
data-o-header-drawer
|
|
20
20
|
data-o-header-drawer--no-js
|
|
21
21
|
data-trackable="drawer"
|
|
22
|
-
data-trackable-terminate
|
|
22
|
+
data-trackable-terminate
|
|
23
|
+
>
|
|
23
24
|
<div className="o-header__drawer-inner">
|
|
24
25
|
<DrawerTools {...editions} />
|
|
25
26
|
<Search />
|
|
@@ -44,7 +45,8 @@ const DrawerTools = (props: TNavEditions) => (
|
|
|
44
45
|
className="o-header__drawer-tools-close"
|
|
45
46
|
title="Close drawer menu"
|
|
46
47
|
aria-controls="o-header-drawer"
|
|
47
|
-
data-trackable="close"
|
|
48
|
+
data-trackable="close"
|
|
49
|
+
>
|
|
48
50
|
<span className="o-header__visually-hidden">Close drawer menu</span>
|
|
49
51
|
</button>
|
|
50
52
|
<a className="o-header__drawer-tools-logo" href="/" data-trackable="logo">
|
|
@@ -63,7 +65,8 @@ const Search = () => (
|
|
|
63
65
|
aria-label="Site search"
|
|
64
66
|
data-n-topic-search
|
|
65
67
|
data-n-topic-search-categories="concepts,equities"
|
|
66
|
-
data-n-topic-search-view-all
|
|
68
|
+
data-n-topic-search-view-all
|
|
69
|
+
>
|
|
67
70
|
<label className="o-header__visually-hidden" htmlFor="o-header-drawer-search-term">
|
|
68
71
|
Search the <abbr title="Financial Times">FT</abbr>
|
|
69
72
|
</label>
|
|
@@ -93,7 +96,11 @@ const SectionPrimary = (props: TNavMenuItem) => {
|
|
|
93
96
|
<li className="o-header__drawer-menu-item o-header__drawer-menu-item--heading">{props.label}</li>
|
|
94
97
|
{(props.submenu.items as TNavMenuItem[]).map((item, index) => (
|
|
95
98
|
<li key={item.url} className="o-header__drawer-menu-item">
|
|
96
|
-
{item.submenu ?
|
|
99
|
+
{item.submenu ? (
|
|
100
|
+
<DrawerParentItem item={item} idSuffix={`${index}`} />
|
|
101
|
+
) : (
|
|
102
|
+
<DrawerSingleItem {...item} />
|
|
103
|
+
)}
|
|
97
104
|
</li>
|
|
98
105
|
))}
|
|
99
106
|
</React.Fragment>
|
|
@@ -103,9 +110,13 @@ const SectionPrimary = (props: TNavMenuItem) => {
|
|
|
103
110
|
const SectionSecondary = (props: TNavMenuItem) => (
|
|
104
111
|
<React.Fragment>
|
|
105
112
|
<li className="o-header__drawer-menu-item o-header__drawer-menu-item--heading">{props.label}</li>
|
|
106
|
-
{(props.submenu.items as TNavMenuItem[]).map((item) => (
|
|
113
|
+
{(props.submenu.items as TNavMenuItem[]).map((item, index) => (
|
|
107
114
|
<li key={item.url} className="o-header__drawer-menu-item">
|
|
108
|
-
|
|
115
|
+
{item.submenu ? (
|
|
116
|
+
<DrawerParentItem item={item} idSuffix={'inner' + index} />
|
|
117
|
+
) : (
|
|
118
|
+
<DrawerSingleItem {...item} />
|
|
119
|
+
)}
|
|
109
120
|
</li>
|
|
110
121
|
))}
|
|
111
122
|
</React.Fragment>
|
|
@@ -7,7 +7,8 @@ const HeaderWrapper = (props) => (
|
|
|
7
7
|
className={`o-header o-header--${props.variant || 'simple'}`}
|
|
8
8
|
data-o-component="o-header"
|
|
9
9
|
data-o-header--no-js={true}
|
|
10
|
-
tabIndex={-1}
|
|
10
|
+
tabIndex={-1}
|
|
11
|
+
>
|
|
11
12
|
{props.children}
|
|
12
13
|
</header>
|
|
13
14
|
)
|
|
@@ -18,7 +19,8 @@ const DrawerIcon = () => (
|
|
|
18
19
|
className="o-header__top-link o-header__top-link--menu"
|
|
19
20
|
aria-controls="o-header-drawer"
|
|
20
21
|
title="Open side navigation menu"
|
|
21
|
-
data-trackable="drawer-toggle"
|
|
22
|
+
data-trackable="drawer-toggle"
|
|
23
|
+
>
|
|
22
24
|
<span className="o-header__top-link-label">Open side navigation menu</span>
|
|
23
25
|
</a>
|
|
24
26
|
)
|
|
@@ -29,7 +31,8 @@ const SearchIcon = () => (
|
|
|
29
31
|
className="o-header__top-link o-header__top-link--search"
|
|
30
32
|
aria-controls={`o-header-search-primary`}
|
|
31
33
|
title="Open search bar"
|
|
32
|
-
data-trackable="search-toggle"
|
|
34
|
+
data-trackable="search-toggle"
|
|
35
|
+
>
|
|
33
36
|
<span className="o-header__top-link-label">Open search bar</span>
|
|
34
37
|
</a>
|
|
35
38
|
)
|
|
@@ -37,10 +40,12 @@ const SearchIcon = () => (
|
|
|
37
40
|
const MyFt = () => (
|
|
38
41
|
<a
|
|
39
42
|
className="o-header__top-link o-header__top-link--myft"
|
|
43
|
+
id="o-header-top-link-myft"
|
|
40
44
|
href="/myft"
|
|
41
45
|
data-trackable="my-ft"
|
|
42
46
|
data-tour-stage="myFt"
|
|
43
|
-
aria-label="My F T"
|
|
47
|
+
aria-label="My F T"
|
|
48
|
+
>
|
|
44
49
|
<span className="o-header__visually-hidden">myFT</span>
|
|
45
50
|
</a>
|
|
46
51
|
)
|
|
@@ -67,7 +72,8 @@ const TopColumnCenter = () => (
|
|
|
67
72
|
style={{ backgroundImage: 'none' }}
|
|
68
73
|
data-trackable="logo"
|
|
69
74
|
href="/"
|
|
70
|
-
title="Go to Financial Times homepage"
|
|
75
|
+
title="Go to Financial Times homepage"
|
|
76
|
+
>
|
|
71
77
|
<BrandFtMastheadSvg title="Financial Times" />
|
|
72
78
|
</a>
|
|
73
79
|
</div>
|
package/styles.scss
CHANGED
|
@@ -5,7 +5,7 @@ $system-code: 'page-kit-header' !default;
|
|
|
5
5
|
|
|
6
6
|
// We don't need the sub-brand or transparent header styles so disable them.
|
|
7
7
|
// TODO: move drawer styles into a separate stylesheet which can be lazy loaded?
|
|
8
|
-
@import "o-header/main";
|
|
8
|
+
@import "@financial-times/o-header/main";
|
|
9
9
|
@include oHeader(('top', 'nav', 'subnav', 'search', 'megamenu', 'drawer', 'anon', 'sticky', 'simple'));
|
|
10
10
|
|
|
11
11
|
@import "src/header";
|