@financial-times/dotcom-ui-header 7.2.6 → 7.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.
@@ -13,22 +13,21 @@ const Drawer = (props) => {
13
13
  const subscribeAction = props.data.subscribeAction;
14
14
  const [primary, secondary, tertiary] = props.data.drawer.items;
15
15
  const user = props.userIsLoggedIn ? props.data.user : props.data.anon;
16
- return (react_1.default.createElement("div", { className: "o-header__drawer", id: "o-header-drawer", role: "navigation", "aria-label": "Drawer menu", "data-o-header-drawer": true, "data-o-header-drawer--no-js": true, "data-trackable": "drawer", "data-trackable-terminate": true },
16
+ return (react_1.default.createElement("div", { className: "o-header__drawer", id: "o-header-drawer", role: "modal", "aria-label": "Drawer menu", "aria-modal": "true", "data-o-header-drawer": true, "data-o-header-drawer--no-js": true, "data-trackable": "drawer", "data-trackable-terminate": true },
17
17
  react_1.default.createElement("div", { className: "o-header__drawer-inner" },
18
18
  react_1.default.createElement(DrawerTools, Object.assign({}, editions)),
19
19
  !props.userIsSubscribed && subscribeAction && react_1.default.createElement(additionalPartials_1.SubscribeButton, Object.assign({}, subscribeAction)),
20
20
  react_1.default.createElement(Search, null),
21
- react_1.default.createElement("nav", { className: "o-header__drawer-menu o-header__drawer-menu--primary o-header__drawer-menu--border" },
22
- editions && react_1.default.createElement(additionalPartials_1.EditionsSwitcher, Object.assign({}, editions)),
23
- react_1.default.createElement("ul", { "data-component": "drawer-menu--primary__drawer-menu-list", className: "o-header__drawer-menu-list" },
24
- primary ? react_1.default.createElement(SectionPrimary, Object.assign({}, primary)) : null,
25
- secondary ? react_1.default.createElement(SectionSecondary, Object.assign({}, secondary)) : null,
26
- tertiary ? react_1.default.createElement(SectionTertiary, Object.assign({}, tertiary)) : null)),
21
+ react_1.default.createElement("nav", { className: "o-header__drawer-menu", "aria-label": "Edition switcher" }, editions && react_1.default.createElement(additionalPartials_1.EditionsSwitcher, Object.assign({}, editions))),
22
+ react_1.default.createElement("nav", { className: "o-header__drawer-menu o-header__drawer-menu--primary" },
23
+ primary ? react_1.default.createElement(SectionPrimary, Object.assign({}, primary)) : null,
24
+ secondary ? react_1.default.createElement(SectionSecondary, Object.assign({}, secondary)) : null,
25
+ tertiary ? react_1.default.createElement(SectionTertiary, Object.assign({}, tertiary)) : null),
27
26
  react_1.default.createElement(UserMenu, Object.assign({}, user)))));
28
27
  };
29
28
  const DrawerTools = (props) => (react_1.default.createElement("div", { className: "o-header__drawer-tools" },
30
- react_1.default.createElement("button", { type: "button", className: "o-header__drawer-tools-close", title: "Close drawer menu", "aria-controls": "o-header-drawer", "data-trackable": "close" },
31
- react_1.default.createElement("span", { className: "o-header__visually-hidden" }, "Close drawer menu")),
29
+ react_1.default.createElement("button", { type: "button", className: "o-header__drawer-tools-close", title: "Close side navigation menu", "aria-controls": "o-header-drawer", "data-trackable": "close" },
30
+ react_1.default.createElement("span", { className: "o-header__visually-hidden" }, "Close side navigation menu")),
32
31
  react_1.default.createElement("a", { className: "o-header__drawer-tools-logo", href: "/", "data-trackable": "logo" },
33
32
  react_1.default.createElement("span", { className: "o-header__visually-hidden" }, "Financial Times")),
34
33
  props.current && react_1.default.createElement("p", { className: "o-header__drawer-current-edition" }, `${props.current.name} Edition`)));
@@ -42,23 +41,23 @@ const Search = () => (react_1.default.createElement("div", { className: "o-heade
42
41
  react_1.default.createElement("span", { className: "o-header__visually-hidden" }, "Search")))));
43
42
  const SectionPrimary = (props) => {
44
43
  var _a;
44
+ const sectionId = props.label.toLowerCase().replace(' ', '-');
45
45
  return (react_1.default.createElement(react_1.default.Fragment, null,
46
- react_1.default.createElement("li", { className: "o-header__drawer-menu-item o-header__drawer-menu-item--heading" }, props.label),
47
- ((_a = props.submenu) === null || _a === void 0 ? void 0 : _a.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))))))));
46
+ react_1.default.createElement("h2", { id: sectionId, className: "o-header__drawer-menu-item o-header__drawer-menu-item--heading" }, props.label),
47
+ react_1.default.createElement("ul", { "aria-labelledby": sectionId, className: "o-header__drawer-menu-list" }, ((_a = props.submenu) === null || _a === void 0 ? void 0 : _a.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)))))))));
48
48
  };
49
49
  const SectionSecondary = (props) => {
50
50
  var _a;
51
+ const sectionId = props.label.toLowerCase().replace(' ', '-');
51
52
  return (react_1.default.createElement(react_1.default.Fragment, null,
52
- react_1.default.createElement("li", { className: "o-header__drawer-menu-item o-header__drawer-menu-item--heading" }, props.label),
53
- ((_a = props.submenu) === null || _a === void 0 ? void 0 : _a.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))))))));
53
+ react_1.default.createElement("h2", { id: sectionId, className: "o-header__drawer-menu-item o-header__drawer-menu-item--heading" }, props.label),
54
+ react_1.default.createElement("ul", { "aria-labelledby": sectionId, className: "o-header__drawer-menu-list" }, ((_a = props.submenu) === null || _a === void 0 ? void 0 : _a.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)))))))));
54
55
  };
55
56
  const SectionTertiary = (props) => {
56
57
  var _a;
57
- return (react_1.default.createElement(react_1.default.Fragment, null, ((_a = props.submenu) === null || _a === void 0 ? void 0 : _a.items).map((item, index) => {
58
- const divideItem = index === 0 ? 'o-header__drawer-menu-item--divide' : '';
59
- return (react_1.default.createElement("li", { "data-component": divideItem ? 'drawer-menu-item--divide' : undefined, key: item.url, className: `o-header__drawer-menu-item ${divideItem}` },
60
- react_1.default.createElement(additionalPartials_1.DrawerSpecialItem, Object.assign({}, item))));
61
- })));
58
+ return (react_1.default.createElement(react_1.default.Fragment, null,
59
+ react_1.default.createElement("ul", { className: "o-header__drawer-menu-list o-header__drawer-menu-list--divide" }, ((_a = props.submenu) === null || _a === void 0 ? void 0 : _a.items).map((item) => (react_1.default.createElement("li", { key: item.url, className: `o-header__drawer-menu-item` },
60
+ react_1.default.createElement(additionalPartials_1.DrawerSpecialItem, Object.assign({}, item))))))));
62
61
  };
63
62
  const UserMenu = (props) => (react_1.default.createElement("nav", { className: "o-header__drawer-menu o-header__drawer-menu--user", "data-trackable": "user-nav" },
64
63
  react_1.default.createElement("ul", { className: "o-header__drawer-menu-list" }, props.items.map((item) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@financial-times/dotcom-ui-header",
3
- "version": "7.2.6",
3
+ "version": "7.3.0",
4
4
  "description": "",
5
5
  "browser": "browser.js",
6
6
  "main": "component.js",
@@ -23,7 +23,7 @@
23
23
  "author": "",
24
24
  "license": "MIT",
25
25
  "dependencies": {
26
- "@financial-times/dotcom-types-navigation": "^7.2.6",
26
+ "@financial-times/dotcom-types-navigation": "^7.3.0",
27
27
  "n-topic-search": "^4.0.0",
28
28
  "n-ui-foundations": "^9.0.0"
29
29
  },
@@ -32,11 +32,11 @@
32
32
  "@svgr/core": "^5.0.0",
33
33
  "camelcase": "^6.0.0",
34
34
  "check-engine": "^1.10.1",
35
- "@financial-times/o-header": "^10.0.0",
35
+ "@financial-times/o-header": "^11.0.4",
36
36
  "react": "^16.8.6"
37
37
  },
38
38
  "peerDependencies": {
39
- "@financial-times/o-header": "^10.0.0",
39
+ "@financial-times/o-header": "^11.0.4",
40
40
  "@financial-times/logo-images": "^1.10.1",
41
41
  "react": "16.x || 17.x"
42
42
  },
@@ -21,8 +21,9 @@ const Drawer = (props: THeaderProps) => {
21
21
  <div
22
22
  className="o-header__drawer"
23
23
  id="o-header-drawer"
24
- role="navigation"
24
+ role="modal"
25
25
  aria-label="Drawer menu"
26
+ aria-modal="true"
26
27
  data-o-header-drawer
27
28
  data-o-header-drawer--no-js
28
29
  data-trackable="drawer"
@@ -32,13 +33,13 @@ const Drawer = (props: THeaderProps) => {
32
33
  <DrawerTools {...editions} />
33
34
  {!props.userIsSubscribed && subscribeAction && <SubscribeButton {...subscribeAction} />}
34
35
  <Search />
35
- <nav className="o-header__drawer-menu o-header__drawer-menu--primary o-header__drawer-menu--border">
36
+ <nav className="o-header__drawer-menu" aria-label="Edition switcher">
36
37
  {editions && <EditionsSwitcher {...editions} />}
37
- <ul data-component="drawer-menu--primary__drawer-menu-list" className="o-header__drawer-menu-list">
38
- {primary ? <SectionPrimary {...primary} /> : null}
39
- {secondary ? <SectionSecondary {...secondary} /> : null}
40
- {tertiary ? <SectionTertiary {...tertiary} /> : null}
41
- </ul>
38
+ </nav>
39
+ <nav className="o-header__drawer-menu o-header__drawer-menu--primary">
40
+ {primary ? <SectionPrimary {...primary} /> : null}
41
+ {secondary ? <SectionSecondary {...secondary} /> : null}
42
+ {tertiary ? <SectionTertiary {...tertiary} /> : null}
42
43
  </nav>
43
44
  <UserMenu {...user} />
44
45
  </div>
@@ -51,11 +52,11 @@ const DrawerTools = (props: TNavEditions) => (
51
52
  <button
52
53
  type="button"
53
54
  className="o-header__drawer-tools-close"
54
- title="Close drawer menu"
55
+ title="Close side navigation menu"
55
56
  aria-controls="o-header-drawer"
56
57
  data-trackable="close"
57
58
  >
58
- <span className="o-header__visually-hidden">Close drawer menu</span>
59
+ <span className="o-header__visually-hidden">Close side navigation menu</span>
59
60
  </button>
60
61
  <a className="o-header__drawer-tools-logo" href="/" data-trackable="logo">
61
62
  <span className="o-header__visually-hidden">Financial Times</span>
@@ -99,52 +100,58 @@ const Search = () => (
99
100
  )
100
101
 
101
102
  const SectionPrimary = (props: TNavMenuItem) => {
103
+ const sectionId = props.label.toLowerCase().replace(' ', '-')
102
104
  return (
103
105
  <React.Fragment>
104
- <li className="o-header__drawer-menu-item o-header__drawer-menu-item--heading">{props.label}</li>
105
- {(props.submenu?.items as TNavMenuItem[]).map((item, index) => (
106
- <li key={item.url} className="o-header__drawer-menu-item">
107
- {item.submenu ? (
108
- <DrawerParentItem item={item} idSuffix={`${index}`} />
109
- ) : (
110
- <DrawerSingleItem {...item} />
111
- )}
112
- </li>
113
- ))}
106
+ <h2 id={sectionId} className="o-header__drawer-menu-item o-header__drawer-menu-item--heading">
107
+ {props.label}
108
+ </h2>
109
+ <ul aria-labelledby={sectionId} className="o-header__drawer-menu-list">
110
+ {(props.submenu?.items as TNavMenuItem[]).map((item, index) => (
111
+ <li key={item.url} className="o-header__drawer-menu-item">
112
+ {item.submenu ? (
113
+ <DrawerParentItem item={item} idSuffix={`${index}`} />
114
+ ) : (
115
+ <DrawerSingleItem {...item} />
116
+ )}
117
+ </li>
118
+ ))}
119
+ </ul>
114
120
  </React.Fragment>
115
121
  )
116
122
  }
117
123
 
118
- const SectionSecondary = (props: TNavMenuItem) => (
119
- <React.Fragment>
120
- <li className="o-header__drawer-menu-item o-header__drawer-menu-item--heading">{props.label}</li>
121
- {(props.submenu?.items as TNavMenuItem[]).map((item, index) => (
122
- <li key={item.url} className="o-header__drawer-menu-item">
123
- {item.submenu ? (
124
- <DrawerParentItem item={item} idSuffix={'inner' + index} />
125
- ) : (
126
- <DrawerSingleItem {...item} />
127
- )}
128
- </li>
129
- ))}
130
- </React.Fragment>
131
- )
124
+ const SectionSecondary = (props: TNavMenuItem) => {
125
+ const sectionId = props.label.toLowerCase().replace(' ', '-')
126
+ return (
127
+ <React.Fragment>
128
+ <h2 id={sectionId} className="o-header__drawer-menu-item o-header__drawer-menu-item--heading">
129
+ {props.label}
130
+ </h2>
131
+ <ul aria-labelledby={sectionId} className="o-header__drawer-menu-list">
132
+ {(props.submenu?.items as TNavMenuItem[]).map((item, index) => (
133
+ <li key={item.url} className="o-header__drawer-menu-item">
134
+ {item.submenu ? (
135
+ <DrawerParentItem item={item} idSuffix={'inner' + index} />
136
+ ) : (
137
+ <DrawerSingleItem {...item} />
138
+ )}
139
+ </li>
140
+ ))}
141
+ </ul>
142
+ </React.Fragment>
143
+ )
144
+ }
132
145
 
133
146
  const SectionTertiary = (props: TNavMenuItem) => (
134
147
  <React.Fragment>
135
- {(props.submenu?.items as TNavMenuItem[]).map((item, index) => {
136
- const divideItem = index === 0 ? 'o-header__drawer-menu-item--divide' : ''
137
-
138
- return (
139
- <li
140
- data-component={divideItem ? 'drawer-menu-item--divide' : undefined}
141
- key={item.url}
142
- className={`o-header__drawer-menu-item ${divideItem}`}
143
- >
148
+ <ul className="o-header__drawer-menu-list o-header__drawer-menu-list--divide">
149
+ {(props.submenu?.items as TNavMenuItem[]).map((item) => (
150
+ <li key={item.url} className={`o-header__drawer-menu-item`}>
144
151
  <DrawerSpecialItem {...item} />
145
152
  </li>
146
- )
147
- })}
153
+ ))}
154
+ </ul>
148
155
  </React.Fragment>
149
156
  )
150
157