@pingux/astro 1.30.0-alpha.3 → 1.30.0-alpha.5
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/lib/cjs/components/NavBar/NavBar.js +65 -6
- package/lib/cjs/components/NavBar/NavBar.test.js +206 -3
- package/lib/cjs/components/NavBarSection/NavBarItem.js +3 -1
- package/lib/cjs/components/NavBarSection/NavBarItemBody.js +35 -4
- package/lib/cjs/components/NavBarSection/NavBarItemHeader.js +16 -25
- package/lib/cjs/components/NavBarSection/NavBarSection.js +144 -20
- package/lib/cjs/styles/variants/accordion.js +0 -61
- package/lib/cjs/styles/variants/buttons.js +19 -1
- package/lib/cjs/styles/variants/navBar.js +33 -2
- package/lib/cjs/styles/variants/text.js +2 -1
- package/lib/components/NavBar/NavBar.js +60 -7
- package/lib/components/NavBar/NavBar.test.js +164 -5
- package/lib/components/NavBarSection/NavBarItem.js +3 -1
- package/lib/components/NavBarSection/NavBarItemBody.js +33 -4
- package/lib/components/NavBarSection/NavBarItemHeader.js +17 -15
- package/lib/components/NavBarSection/NavBarSection.js +131 -21
- package/lib/styles/variants/accordion.js +0 -52
- package/lib/styles/variants/buttons.js +19 -1
- package/lib/styles/variants/navBar.js +33 -2
- package/lib/styles/variants/text.js +2 -1
- package/package.json +1 -1
@@ -1,3 +1,4 @@
|
|
1
|
+
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
1
2
|
import React from 'react';
|
2
3
|
import userEvent from '@testing-library/user-event';
|
3
4
|
import GlobeIcon from 'mdi-react/GlobeIcon';
|
@@ -10,8 +11,8 @@ import ScaleBalance from 'mdi-react/ScaleBalanceIcon';
|
|
10
11
|
import Verify from 'mdi-react/VerifiedIcon';
|
11
12
|
import NavBar from './NavBar';
|
12
13
|
import axeTest from '../../utils/testUtils/testAxe';
|
13
|
-
import { render, screen } from '../../utils/testUtils/testWrapper';
|
14
|
-
import { Box, NavBarSection, NavBarItem, NavBarItemButton, NavBarItemLink } from '../../index';
|
14
|
+
import { render, screen, fireEvent } from '../../utils/testUtils/testWrapper';
|
15
|
+
import { Box, NavBarSection, NavBarItem, NavBarItemButton, NavBarItemLink, Link, Button } from '../../index';
|
15
16
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
16
17
|
var data = [{
|
17
18
|
icon: GlobeIcon,
|
@@ -90,6 +91,26 @@ var getComponent = function getComponent() {
|
|
90
91
|
}))));
|
91
92
|
};
|
92
93
|
|
94
|
+
var getComponentWithMultipleChildrens = function getComponentWithMultipleChildrens() {
|
95
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
96
|
+
return render(___EmotionJSX(NavBar, props, ___EmotionJSX(Box, null, ___EmotionJSX(Link, {
|
97
|
+
href: "https://pingidentity.com",
|
98
|
+
target: "_blank",
|
99
|
+
"aria-label": "home link",
|
100
|
+
"data-testid": "navLink"
|
101
|
+
}, "home")), ___EmotionJSX(Button, {
|
102
|
+
"data-testid": "navButton"
|
103
|
+
}, "test button")));
|
104
|
+
};
|
105
|
+
|
106
|
+
var clickHeaderButtons = function clickHeaderButtons() {
|
107
|
+
var headerButtons = screen.getAllByRole('button');
|
108
|
+
|
109
|
+
_mapInstanceProperty(headerButtons).call(headerButtons, function (button) {
|
110
|
+
return userEvent.click(button);
|
111
|
+
});
|
112
|
+
};
|
113
|
+
|
93
114
|
axeTest(getComponent);
|
94
115
|
test('should render basic nav with children', function () {
|
95
116
|
getComponent();
|
@@ -103,27 +124,165 @@ test('should render title for sections that have titles', function () {
|
|
103
124
|
});
|
104
125
|
test('should render title for itemBodies that have subTitles', function () {
|
105
126
|
getComponent();
|
127
|
+
clickHeaderButtons();
|
106
128
|
var subTitle = screen.getByText('PingOne Services');
|
107
129
|
expect(subTitle).toBeInTheDocument();
|
108
130
|
});
|
109
|
-
test('should select
|
131
|
+
test('should select NavItemLink', function () {
|
110
132
|
getComponent();
|
133
|
+
clickHeaderButtons();
|
111
134
|
var link = screen.getByTestId('navItemLink');
|
112
135
|
expect(link).toBeInTheDocument();
|
113
136
|
userEvent.click(link);
|
114
137
|
expect(link).toHaveClass('is-selected');
|
115
138
|
});
|
116
|
-
test('should select
|
139
|
+
test('should select NavItemLink on space key press', function () {
|
140
|
+
getComponent();
|
141
|
+
clickHeaderButtons();
|
142
|
+
var link = screen.getByTestId('navItemLink');
|
143
|
+
expect(link).toBeInTheDocument();
|
144
|
+
fireEvent.keyDown(link, {
|
145
|
+
key: 'Space',
|
146
|
+
keyCode: 32
|
147
|
+
});
|
148
|
+
expect(link).toHaveClass('is-selected');
|
149
|
+
});
|
150
|
+
test('should select NavItem', function () {
|
117
151
|
getComponent();
|
118
152
|
var item = screen.getByTestId('navItem');
|
119
153
|
expect(item).toBeInTheDocument();
|
120
154
|
userEvent.click(item);
|
121
155
|
expect(item).toHaveClass('is-selected');
|
122
156
|
});
|
123
|
-
test('should select
|
157
|
+
test('should select NavItemButton', function () {
|
124
158
|
getComponent();
|
159
|
+
clickHeaderButtons();
|
125
160
|
var button = screen.getByTestId('navItemButton');
|
126
161
|
expect(button).toBeInTheDocument();
|
127
162
|
userEvent.click(button);
|
128
163
|
expect(button).toHaveClass('is-selected');
|
164
|
+
});
|
165
|
+
test('should collapse NavItemBody', function () {
|
166
|
+
getComponent();
|
167
|
+
expect(screen.queryByText('Users')).not.toBeInTheDocument();
|
168
|
+
clickHeaderButtons();
|
169
|
+
expect(screen.getByTestId('navItemButton')).toBeInTheDocument();
|
170
|
+
clickHeaderButtons();
|
171
|
+
expect(screen.queryByText('Users')).not.toBeInTheDocument();
|
172
|
+
});
|
173
|
+
test('should collapse NavItemBody on Escape key press', function () {
|
174
|
+
getComponent();
|
175
|
+
clickHeaderButtons();
|
176
|
+
expect(screen.getByTestId('navItemButton')).toBeInTheDocument();
|
177
|
+
var headerButtons = screen.getAllByRole('button');
|
178
|
+
|
179
|
+
_mapInstanceProperty(headerButtons).call(headerButtons, function (headerButton) {
|
180
|
+
return fireEvent.keyDown(headerButton, {
|
181
|
+
key: 'Escape',
|
182
|
+
keyCode: 27
|
183
|
+
});
|
184
|
+
});
|
185
|
+
|
186
|
+
expect(screen.queryByText('Users')).not.toBeInTheDocument();
|
187
|
+
});
|
188
|
+
test('should change focus between NavBarItemHeader on arrow key press', function () {
|
189
|
+
getComponent();
|
190
|
+
var headerButtons = screen.getAllByRole('button');
|
191
|
+
expect(headerButtons[0]).toBeInTheDocument();
|
192
|
+
headerButtons[0].focus();
|
193
|
+
expect(headerButtons[0]).toHaveClass('is-focused');
|
194
|
+
fireEvent.keyDown(headerButtons[0], {
|
195
|
+
key: 'ArrowDown',
|
196
|
+
keyCode: 40
|
197
|
+
});
|
198
|
+
expect(headerButtons[1]).toHaveClass('is-focused');
|
199
|
+
fireEvent.keyDown(headerButtons[0], {
|
200
|
+
key: 'ArrowRight',
|
201
|
+
keyCode: 39
|
202
|
+
});
|
203
|
+
expect(headerButtons[2]).toHaveClass('is-focused');
|
204
|
+
fireEvent.keyDown(headerButtons[0], {
|
205
|
+
key: 'ArrowLeft',
|
206
|
+
keyCode: 37
|
207
|
+
});
|
208
|
+
expect(headerButtons[1]).toHaveClass('is-focused');
|
209
|
+
fireEvent.keyDown(headerButtons[0], {
|
210
|
+
key: 'ArrowUp',
|
211
|
+
keyCode: 38
|
212
|
+
});
|
213
|
+
expect(headerButtons[0]).toHaveClass('is-focused');
|
214
|
+
fireEvent.keyDown(headerButtons[0], {
|
215
|
+
key: 'Shift',
|
216
|
+
keyCode: 16
|
217
|
+
});
|
218
|
+
expect(headerButtons[0]).toHaveClass('is-focused');
|
219
|
+
});
|
220
|
+
test('should not change focus from NavItemBody to NavBarItemHeader on arrow key press', function () {
|
221
|
+
getComponent();
|
222
|
+
var headerButtons = screen.getAllByRole('button');
|
223
|
+
expect(headerButtons[0]).toBeInTheDocument();
|
224
|
+
headerButtons[0].click();
|
225
|
+
fireEvent.keyDown(headerButtons[0], {
|
226
|
+
key: 'ArrowDown',
|
227
|
+
keyCode: 40
|
228
|
+
});
|
229
|
+
expect(screen.getByTestId('navItemButton')).toHaveClass('is-focused');
|
230
|
+
fireEvent.keyDown(screen.getByTestId('navItemButton'), {
|
231
|
+
key: 'ArrowUp',
|
232
|
+
keyCode: 38
|
233
|
+
});
|
234
|
+
expect(screen.getByTestId('navItemButton')).toHaveClass('is-focused');
|
235
|
+
fireEvent.keyDown(screen.getByTestId('navItemButton'), {
|
236
|
+
key: 'ArrowDown',
|
237
|
+
keyCode: 40
|
238
|
+
});
|
239
|
+
expect(screen.getByTestId('navItemLink')).toHaveClass('is-focused');
|
240
|
+
fireEvent.keyDown(screen.getByTestId('navItemLink'), {
|
241
|
+
key: 'ArrowDown',
|
242
|
+
keyCode: 40
|
243
|
+
});
|
244
|
+
expect(screen.getByTestId('navItemLink')).toHaveClass('is-focused');
|
245
|
+
});
|
246
|
+
test('should render nav with multiple childrens', function () {
|
247
|
+
getComponentWithMultipleChildrens();
|
248
|
+
var nav = screen.queryByRole('navigation');
|
249
|
+
expect(nav).toBeInTheDocument();
|
250
|
+
});
|
251
|
+
test('should change focus between nav childrens on arrow key press', function () {
|
252
|
+
getComponentWithMultipleChildrens();
|
253
|
+
var link = screen.getByTestId('navLink');
|
254
|
+
var button = screen.getByTestId('navButton');
|
255
|
+
expect(link).toBeInTheDocument();
|
256
|
+
link.focus();
|
257
|
+
expect(link).toHaveClass('is-focused');
|
258
|
+
fireEvent.keyDown(link, {
|
259
|
+
key: 'ArrowDown',
|
260
|
+
keyCode: 40
|
261
|
+
});
|
262
|
+
expect(button).toHaveClass('is-focused');
|
263
|
+
fireEvent.keyDown(button, {
|
264
|
+
key: 'ArrowUp',
|
265
|
+
keyCode: 38
|
266
|
+
});
|
267
|
+
expect(link).toHaveClass('is-focused');
|
268
|
+
fireEvent.keyDown(link, {
|
269
|
+
key: 'ArrowRight',
|
270
|
+
keyCode: 39
|
271
|
+
});
|
272
|
+
expect(button).toHaveClass('is-focused');
|
273
|
+
fireEvent.keyDown(button, {
|
274
|
+
key: 'ArrowLeft',
|
275
|
+
keyCode: 37
|
276
|
+
});
|
277
|
+
expect(link).toHaveClass('is-focused');
|
278
|
+
fireEvent.keyDown(link, {
|
279
|
+
key: 'Shift',
|
280
|
+
keyCode: 16
|
281
|
+
});
|
282
|
+
expect(link).toHaveClass('is-focused');
|
283
|
+
fireEvent.keyDown(link, {
|
284
|
+
key: 'Space',
|
285
|
+
keyCode: 32
|
286
|
+
});
|
287
|
+
expect(link).toHaveClass('is-focused');
|
129
288
|
});
|
@@ -70,8 +70,9 @@ var NavBarItem = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
70
70
|
|
71
71
|
return ___EmotionJSX(Box, _extends({
|
72
72
|
id: key,
|
73
|
-
variant: "
|
73
|
+
variant: "navBar.navItem",
|
74
74
|
isRow: true,
|
75
|
+
tabIndex: 0,
|
75
76
|
className: classNames,
|
76
77
|
ref: navItemRef
|
77
78
|
}, mergedProps, {
|
@@ -85,6 +86,7 @@ var NavBarItem = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
85
86
|
}
|
86
87
|
}, icon && ___EmotionJSX(Icon, {
|
87
88
|
icon: icon,
|
89
|
+
"aria-label": text,
|
88
90
|
size: 20,
|
89
91
|
sx: {
|
90
92
|
mr: '10px',
|
@@ -1,5 +1,7 @@
|
|
1
|
+
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
1
2
|
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
2
3
|
import React, { Fragment } from 'react';
|
4
|
+
import { useKeyboard } from '@react-aria/interactions';
|
3
5
|
import PropTypes from 'prop-types';
|
4
6
|
import { Separator, Box, Text } from '../../index';
|
5
7
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
@@ -7,12 +9,14 @@ import { jsx as ___EmotionJSX } from "@emotion/react";
|
|
7
9
|
var NavBarItemBody = function NavBarItemBody(props) {
|
8
10
|
var _context;
|
9
11
|
|
12
|
+
var item = props.item,
|
13
|
+
onKeyDown = props.onKeyDown;
|
10
14
|
return ___EmotionJSX(Box, {
|
11
15
|
sx: {
|
12
16
|
alignItems: 'flex-start',
|
13
17
|
mb: '15px'
|
14
18
|
}
|
15
|
-
}, _mapInstanceProperty(_context =
|
19
|
+
}, _mapInstanceProperty(_context = item.children).call(_context, function (child) {
|
16
20
|
return child.subTitle ? ___EmotionJSX(Fragment, {
|
17
21
|
key: "fragment".concat(child.subTitle)
|
18
22
|
}, ___EmotionJSX(Separator, {
|
@@ -25,13 +29,38 @@ var NavBarItemBody = function NavBarItemBody(props) {
|
|
25
29
|
mb: '10px',
|
26
30
|
ml: '45px'
|
27
31
|
}
|
28
|
-
}, child.subTitle)) :
|
32
|
+
}, child.subTitle)) : ___EmotionJSX(ChildItemWrapper, {
|
33
|
+
onKeyDown: onKeyDown,
|
34
|
+
key: "item".concat(child.key || child)
|
35
|
+
}, child);
|
29
36
|
}));
|
30
37
|
};
|
31
38
|
|
39
|
+
var ChildItemWrapper = function ChildItemWrapper(props) {
|
40
|
+
var children = props.children,
|
41
|
+
_onKeyDown = props.onKeyDown;
|
42
|
+
var childrenKey = children.key || children;
|
43
|
+
|
44
|
+
var _useKeyboard = useKeyboard({
|
45
|
+
onKeyDown: function onKeyDown(e) {
|
46
|
+
return _onKeyDown(e, childrenKey);
|
47
|
+
}
|
48
|
+
}),
|
49
|
+
keyboardProps = _useKeyboard.keyboardProps;
|
50
|
+
|
51
|
+
return ___EmotionJSX(Box, _extends({
|
52
|
+
width: "100%"
|
53
|
+
}, keyboardProps), children);
|
54
|
+
};
|
55
|
+
|
32
56
|
NavBarItemBody.propTypes = {
|
33
57
|
item: PropTypes.shape({
|
34
|
-
children: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.object]))
|
35
|
-
|
58
|
+
children: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.object])),
|
59
|
+
key: PropTypes.string
|
60
|
+
}),
|
61
|
+
onKeyDown: PropTypes.func
|
62
|
+
};
|
63
|
+
ChildItemWrapper.propTypes = {
|
64
|
+
onKeyDown: PropTypes.func
|
36
65
|
};
|
37
66
|
export default NavBarItemBody;
|
@@ -1,34 +1,30 @@
|
|
1
1
|
import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
|
2
2
|
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
3
|
-
import React
|
3
|
+
import React from 'react';
|
4
4
|
import PropTypes from 'prop-types';
|
5
5
|
import MenuDown from 'mdi-react/MenuDownIcon';
|
6
6
|
import MenuUp from 'mdi-react/MenuUpIcon';
|
7
7
|
import { Box, Icon, Text } from '../../index';
|
8
|
-
import {
|
9
|
-
import { NavBarContext } from '../../context/NavBarContext';
|
8
|
+
import { useNavBarContext } from '../../context/NavBarContext';
|
10
9
|
import { useStatusClasses } from '../../hooks';
|
11
10
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
12
11
|
|
13
12
|
var NavBarItemHeader = function NavBarItemHeader(props) {
|
14
|
-
var
|
13
|
+
var _navBarState$expanded, _context;
|
15
14
|
|
16
15
|
var item = props.item;
|
17
16
|
var icon = item.icon,
|
18
17
|
key = item.key,
|
19
|
-
className = item.className
|
20
|
-
|
21
|
-
var
|
22
|
-
|
23
|
-
|
24
|
-
var navState = useContext(NavBarContext);
|
25
|
-
var isExpanded = (_state$selectionManag = state.selectionManager.selectedKeys) === null || _state$selectionManag === void 0 ? void 0 : _state$selectionManag.has(key);
|
18
|
+
className = item.className,
|
19
|
+
heading = item.heading;
|
20
|
+
var navBarState = useNavBarContext();
|
21
|
+
var isExpanded = (_navBarState$expanded = navBarState.expandedKeys) === null || _navBarState$expanded === void 0 ? void 0 : _navBarState$expanded.has(key);
|
26
22
|
|
27
23
|
var array = _mapInstanceProperty(_context = item.children).call(_context, function (i) {
|
28
24
|
return i.key;
|
29
25
|
});
|
30
26
|
|
31
|
-
var childSelected = _includesInstanceProperty(array).call(array,
|
27
|
+
var childSelected = _includesInstanceProperty(array).call(array, navBarState.selectedKey);
|
32
28
|
|
33
29
|
var _useStatusClasses = useStatusClasses(className, {
|
34
30
|
isSelected: childSelected && !isExpanded
|
@@ -46,10 +42,11 @@ var NavBarItemHeader = function NavBarItemHeader(props) {
|
|
46
42
|
mr: '10px',
|
47
43
|
color: 'white',
|
48
44
|
fill: 'white'
|
49
|
-
}
|
45
|
+
},
|
46
|
+
"aria-hidden": "true"
|
50
47
|
}), ___EmotionJSX(Text, {
|
51
48
|
variant: "navBarHeaderText"
|
52
|
-
},
|
49
|
+
}, heading), ___EmotionJSX(Box, {
|
53
50
|
isRow: true,
|
54
51
|
alignItems: "center",
|
55
52
|
sx: {
|
@@ -57,7 +54,12 @@ var NavBarItemHeader = function NavBarItemHeader(props) {
|
|
57
54
|
}
|
58
55
|
}, ___EmotionJSX(Icon, {
|
59
56
|
icon: isExpanded ? MenuUp : MenuDown,
|
60
|
-
size: 20
|
57
|
+
size: 20,
|
58
|
+
sx: {
|
59
|
+
color: 'white',
|
60
|
+
fill: 'white'
|
61
|
+
},
|
62
|
+
"aria-label": isExpanded ? 'Menu up' : 'Menu down'
|
61
63
|
})));
|
62
64
|
};
|
63
65
|
|
@@ -1,11 +1,17 @@
|
|
1
|
+
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
2
|
+
import _Set from "@babel/runtime-corejs3/core-js-stable/set";
|
3
|
+
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
1
4
|
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
2
|
-
import React from 'react';
|
5
|
+
import React, { useRef } from 'react';
|
3
6
|
import PropTypes from 'prop-types';
|
4
|
-
import {
|
7
|
+
import { useFocusManager } from '@react-aria/focus';
|
8
|
+
import { useKeyboard } from '@react-aria/interactions';
|
9
|
+
import { Separator, Text, Box, Button } from '../../index';
|
5
10
|
import NavBarItemBody from './NavBarItemBody';
|
6
11
|
import NavBarItemHeader from './NavBarItemHeader';
|
12
|
+
import { useNavBarContext } from '../../context/NavBarContext';
|
7
13
|
/**
|
8
|
-
* Composed component that creates
|
14
|
+
* Composed component that creates a group
|
9
15
|
* with title, and separator options.
|
10
16
|
*
|
11
17
|
*/
|
@@ -16,28 +22,29 @@ var NavBarSection = function NavBarSection(props) {
|
|
16
22
|
var hasSeparator = props.hasSeparator,
|
17
23
|
title = props.title,
|
18
24
|
items = props.items;
|
25
|
+
var ref = useRef();
|
26
|
+
|
27
|
+
var childrenItems = _filterInstanceProperty(items).call(items, function (i) {
|
28
|
+
return i.children;
|
29
|
+
});
|
30
|
+
|
19
31
|
return ___EmotionJSX(React.Fragment, null, title && ___EmotionJSX(Text, {
|
20
32
|
variant: "text.navBarSubtitle"
|
21
|
-
}, title), ___EmotionJSX(
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
},
|
34
|
-
textValue: item
|
35
|
-
}, ___EmotionJSX(NavBarItemHeader, {
|
36
|
-
item: item
|
37
|
-
}), ___EmotionJSX(NavBarItemBody, {
|
33
|
+
}, title), ___EmotionJSX("ul", {
|
34
|
+
ref: ref,
|
35
|
+
style: {
|
36
|
+
margin: 0,
|
37
|
+
padding: 0,
|
38
|
+
listStyle: 'none'
|
39
|
+
}
|
40
|
+
}, _mapInstanceProperty(childrenItems).call(childrenItems, function (item) {
|
41
|
+
return ___EmotionJSX("li", {
|
42
|
+
key: item.key
|
43
|
+
}, ___EmotionJSX(SectionItem, {
|
44
|
+
key: item.key,
|
38
45
|
item: item
|
39
46
|
}));
|
40
|
-
}), hasSeparator && ___EmotionJSX(Box, {
|
47
|
+
})), hasSeparator && ___EmotionJSX(Box, {
|
41
48
|
sx: {
|
42
49
|
pl: '15px',
|
43
50
|
pr: '15px',
|
@@ -50,6 +57,92 @@ var NavBarSection = function NavBarSection(props) {
|
|
50
57
|
})));
|
51
58
|
};
|
52
59
|
|
60
|
+
var SectionItem = function SectionItem(_ref) {
|
61
|
+
var item = _ref.item;
|
62
|
+
var key = item.key,
|
63
|
+
children = item.children;
|
64
|
+
var headerButtonRef = useRef();
|
65
|
+
var navBarState = useNavBarContext();
|
66
|
+
var expandedKeys = navBarState.expandedKeys,
|
67
|
+
setExpandedKeys = navBarState.setExpandedKeys;
|
68
|
+
var isExpanded = expandedKeys === null || expandedKeys === void 0 ? void 0 : expandedKeys.has(key);
|
69
|
+
var firstChildKey = children.length ? children[0].key : null;
|
70
|
+
var lastChildKey = children.length ? children[children.length - 1].key : null;
|
71
|
+
|
72
|
+
var onExpandedChange = function onExpandedChange(isOpen) {
|
73
|
+
if (isOpen) {
|
74
|
+
expandedKeys.add(key);
|
75
|
+
} else {
|
76
|
+
expandedKeys["delete"](key);
|
77
|
+
}
|
78
|
+
|
79
|
+
setExpandedKeys(new _Set(expandedKeys));
|
80
|
+
};
|
81
|
+
|
82
|
+
var focusManager = useFocusManager();
|
83
|
+
|
84
|
+
var _onKeyDown = function onKeyDown(e, childKey) {
|
85
|
+
var _e$target;
|
86
|
+
|
87
|
+
switch (e.which) {
|
88
|
+
case 39:
|
89
|
+
case 40:
|
90
|
+
if (childKey !== lastChildKey) {
|
91
|
+
focusManager.focusNext();
|
92
|
+
}
|
93
|
+
|
94
|
+
e.preventDefault();
|
95
|
+
break;
|
96
|
+
|
97
|
+
case 37:
|
98
|
+
case 38:
|
99
|
+
if (childKey !== firstChildKey) {
|
100
|
+
focusManager.focusPrevious();
|
101
|
+
}
|
102
|
+
|
103
|
+
e.preventDefault();
|
104
|
+
break;
|
105
|
+
|
106
|
+
case 27:
|
107
|
+
onExpandedChange(false);
|
108
|
+
headerButtonRef.current.focus();
|
109
|
+
break;
|
110
|
+
|
111
|
+
case 32:
|
112
|
+
if (childKey && (_e$target = e.target) !== null && _e$target !== void 0 && _e$target.href) {
|
113
|
+
e.target.click();
|
114
|
+
}
|
115
|
+
|
116
|
+
break;
|
117
|
+
|
118
|
+
default:
|
119
|
+
break;
|
120
|
+
}
|
121
|
+
};
|
122
|
+
|
123
|
+
var _useKeyboard = useKeyboard({
|
124
|
+
onKeyDown: function onKeyDown(e) {
|
125
|
+
_onKeyDown(e);
|
126
|
+
|
127
|
+
e.continuePropagation();
|
128
|
+
}
|
129
|
+
}),
|
130
|
+
keyboardProps = _useKeyboard.keyboardProps;
|
131
|
+
|
132
|
+
return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(Button, _extends({
|
133
|
+
ref: headerButtonRef,
|
134
|
+
variant: "navBarSectionButton",
|
135
|
+
onPress: function onPress() {
|
136
|
+
return onExpandedChange(!isExpanded);
|
137
|
+
}
|
138
|
+
}, keyboardProps), ___EmotionJSX(NavBarItemHeader, {
|
139
|
+
item: item
|
140
|
+
})), isExpanded && ___EmotionJSX(NavBarItemBody, {
|
141
|
+
item: item,
|
142
|
+
onKeyDown: _onKeyDown
|
143
|
+
}));
|
144
|
+
};
|
145
|
+
|
53
146
|
NavBarSection.defaultProps = {
|
54
147
|
hasSeparator: false
|
55
148
|
};
|
@@ -66,4 +159,21 @@ NavBarSection.propTypes = {
|
|
66
159
|
*/
|
67
160
|
items: PropTypes.arrayOf(PropTypes.shape({}))
|
68
161
|
};
|
162
|
+
SectionItem.propTypes = {
|
163
|
+
item: PropTypes.shape({
|
164
|
+
key: PropTypes.string,
|
165
|
+
children: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.object])),
|
166
|
+
'aria-label': PropTypes.string
|
167
|
+
}),
|
168
|
+
state: PropTypes.shape({
|
169
|
+
collection: PropTypes.shape({}),
|
170
|
+
selectedKey: PropTypes.string,
|
171
|
+
setSelectedKey: PropTypes.func,
|
172
|
+
selectionManager: PropTypes.shape({
|
173
|
+
focusedKey: PropTypes.string,
|
174
|
+
setFocusedKey: PropTypes.func
|
175
|
+
})
|
176
|
+
}),
|
177
|
+
menuProps: PropTypes.shape({})
|
178
|
+
};
|
69
179
|
export default NavBarSection;
|
@@ -1,17 +1,3 @@
|
|
1
|
-
import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
|
2
|
-
import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
|
3
|
-
import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
|
4
|
-
import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
|
5
|
-
import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
|
6
|
-
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
7
|
-
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
|
8
|
-
import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
|
9
|
-
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
10
|
-
|
11
|
-
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
12
|
-
|
13
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
14
|
-
|
15
1
|
var accordionTitle = {
|
16
2
|
display: 'inline-block !important',
|
17
3
|
overflowWrap: 'break-word',
|
@@ -71,42 +57,6 @@ var accordionGridHeader = {
|
|
71
57
|
}
|
72
58
|
}
|
73
59
|
};
|
74
|
-
var accordionGridHeaderNav = {
|
75
|
-
cursor: 'pointer',
|
76
|
-
minHeight: '40px',
|
77
|
-
lineHeight: '30px',
|
78
|
-
outline: 'none',
|
79
|
-
display: 'flex',
|
80
|
-
justifyContent: 'flex-start',
|
81
|
-
flexShrink: 0,
|
82
|
-
wordBreak: 'inherit',
|
83
|
-
whiteSpace: 'nowrap',
|
84
|
-
color: 'neutral.95',
|
85
|
-
flexGrow: 1,
|
86
|
-
fontWeight: 0,
|
87
|
-
fontSize: '16px',
|
88
|
-
'&.is-focused': {
|
89
|
-
outline: 'none',
|
90
|
-
boxShadow: 'focus',
|
91
|
-
WebkitBoxShadow: 'focus',
|
92
|
-
MozBoxShadow: 'focus'
|
93
|
-
},
|
94
|
-
'&.is-hovered': {
|
95
|
-
backgroundColor: 'accent.10'
|
96
|
-
},
|
97
|
-
'&.is-pressed': {
|
98
|
-
backgroundColor: 'accent.5'
|
99
|
-
}
|
100
|
-
};
|
101
|
-
|
102
|
-
var accordionGridNavItem = _objectSpread(_objectSpread({}, accordionGridHeaderNav), {}, {
|
103
|
-
padding: '10px 15px 10px 15px',
|
104
|
-
'&.is-selected': {
|
105
|
-
backgroundColor: 'accent.5',
|
106
|
-
boxShadow: 'inset 2px 0 0 0 white'
|
107
|
-
}
|
108
|
-
});
|
109
|
-
|
110
60
|
var accordionGridBody = {
|
111
61
|
display: 'none !important',
|
112
62
|
pl: 'sm',
|
@@ -129,7 +79,5 @@ export default {
|
|
129
79
|
accordionTitle: accordionTitle,
|
130
80
|
accordion: accordion,
|
131
81
|
accordionBody: accordionBody,
|
132
|
-
accordionGridHeaderNav: accordionGridHeaderNav,
|
133
|
-
accordionGridNavItem: accordionGridNavItem,
|
134
82
|
accordionGridItem: accordionGridItem
|
135
83
|
};
|
@@ -74,7 +74,10 @@ var navItemButton = {
|
|
74
74
|
maxWidth: '100%',
|
75
75
|
wordWrap: 'break-word',
|
76
76
|
wordBreak: 'break-word',
|
77
|
-
'&.is-focused':
|
77
|
+
'&.is-focused': {
|
78
|
+
outline: '1px solid',
|
79
|
+
outlineColor: '#D033FF'
|
80
|
+
},
|
78
81
|
'&.is-hovered': {
|
79
82
|
bg: 'accent.10'
|
80
83
|
},
|
@@ -683,6 +686,20 @@ var menuTab = _objectSpread(_objectSpread({}, quiet), {}, {
|
|
683
686
|
}
|
684
687
|
});
|
685
688
|
|
689
|
+
var navBarSectionButton = _objectSpread(_objectSpread({}, quiet), {}, {
|
690
|
+
width: '100%',
|
691
|
+
'&.is-focused': {
|
692
|
+
outline: '1px solid',
|
693
|
+
outlineColor: '#D033FF'
|
694
|
+
},
|
695
|
+
'&.is-hovered': {
|
696
|
+
backgroundColor: 'accent.10'
|
697
|
+
},
|
698
|
+
'&.is-pressed': {
|
699
|
+
backgroundColor: 'accent.5'
|
700
|
+
}
|
701
|
+
});
|
702
|
+
|
686
703
|
export default {
|
687
704
|
accordionHeader: accordionHeader,
|
688
705
|
chipDeleteButton: chipDeleteButton,
|
@@ -718,6 +735,7 @@ export default {
|
|
718
735
|
helpHint: helpHint,
|
719
736
|
modalCloseButton: modalCloseButton,
|
720
737
|
navItemButton: navItemButton,
|
738
|
+
navBarSectionButton: navBarSectionButton,
|
721
739
|
applicationPortalPinned: applicationPortalPinned,
|
722
740
|
applicationPortal: applicationPortal,
|
723
741
|
square: square,
|