carbon-react 114.13.1 → 114.13.2
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/esm/__internal__/input-icon-toggle/input-icon-toggle.component.js +2 -1
- package/esm/components/link/link.component.d.ts +2 -0
- package/esm/components/link/link.component.js +7 -1
- package/esm/components/menu/__internal__/keyboard-navigation/index.d.ts +4 -2
- package/esm/components/menu/__internal__/keyboard-navigation/index.js +16 -15
- package/esm/components/menu/__internal__/locators.d.ts +6 -0
- package/esm/components/menu/__internal__/locators.js +6 -0
- package/esm/components/menu/__internal__/submenu/submenu.component.js +109 -108
- package/esm/components/menu/menu-full-screen/menu-full-screen.component.js +1 -2
- package/esm/components/menu/menu-item/index.js +0 -1
- package/esm/components/menu/menu-item/menu-item.component.js +77 -51
- package/esm/components/menu/menu-item/menu-item.d.ts +7 -3
- package/esm/components/menu/menu.component.js +33 -37
- package/esm/components/menu/menu.context.d.ts +2 -2
- package/esm/components/menu/menu.context.js +2 -2
- package/esm/components/menu/scrollable-block/scrollable-block.component.js +6 -24
- package/lib/__internal__/input-icon-toggle/input-icon-toggle.component.js +2 -1
- package/lib/components/link/link.component.d.ts +2 -0
- package/lib/components/link/link.component.js +7 -1
- package/lib/components/menu/__internal__/keyboard-navigation/index.d.ts +4 -2
- package/lib/components/menu/__internal__/keyboard-navigation/index.js +16 -15
- package/lib/components/menu/__internal__/locators.d.ts +6 -0
- package/lib/components/menu/__internal__/locators.js +18 -0
- package/lib/components/menu/__internal__/submenu/submenu.component.js +111 -113
- package/lib/components/menu/menu-full-screen/menu-full-screen.component.js +1 -2
- package/lib/components/menu/menu-item/menu-item.component.js +76 -52
- package/lib/components/menu/menu-item/menu-item.d.ts +7 -3
- package/lib/components/menu/menu.component.js +33 -37
- package/lib/components/menu/menu.context.d.ts +2 -2
- package/lib/components/menu/menu.context.js +2 -2
- package/lib/components/menu/scrollable-block/scrollable-block.component.js +6 -25
- package/package.json +1 -1
|
@@ -19,11 +19,11 @@ var _propTypes2 = _interopRequireDefault(require("@styled-system/prop-types"));
|
|
|
19
19
|
|
|
20
20
|
var _menu = require("./menu.style");
|
|
21
21
|
|
|
22
|
-
var
|
|
22
|
+
var _menu2 = _interopRequireDefault(require("./menu.context"));
|
|
23
23
|
|
|
24
|
-
var
|
|
24
|
+
var _keyboardNavigation = require("./__internal__/keyboard-navigation");
|
|
25
25
|
|
|
26
|
-
var
|
|
26
|
+
var _locators = require("./__internal__/locators");
|
|
27
27
|
|
|
28
28
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
29
|
|
|
@@ -38,52 +38,48 @@ const Menu = ({
|
|
|
38
38
|
children,
|
|
39
39
|
...rest
|
|
40
40
|
}) => {
|
|
41
|
-
const [
|
|
42
|
-
const [openSubmenuIndex, setOpenSubmenuIndex] = (0, _react.useState)(null);
|
|
41
|
+
const [openSubmenuId, setOpenSubmenuId] = (0, _react.useState)(null);
|
|
43
42
|
const ref = (0, _react.useRef)();
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
43
|
+
const [focusId, setFocusId] = (0, _react.useState)(undefined);
|
|
44
|
+
const [itemIds, setItemIds] = (0, _react.useState)([]);
|
|
45
|
+
const registerItem = (0, _react.useCallback)(id => {
|
|
46
|
+
setItemIds(prevState => {
|
|
47
|
+
return [...prevState, id];
|
|
48
|
+
});
|
|
49
|
+
}, []);
|
|
50
|
+
const unregisterItem = (0, _react.useCallback)(id => {
|
|
51
|
+
setItemIds(prevState => {
|
|
52
|
+
return prevState.filter(itemId => itemId !== id);
|
|
53
|
+
});
|
|
54
54
|
}, []);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
|
|
56
|
+
const handleKeyDown = event => {
|
|
57
|
+
/* istanbul ignore else */
|
|
58
|
+
if (ref.current) {
|
|
59
|
+
const focusableItems = Array.from(ref.current.querySelectorAll(_locators.MENU_ITEM_CHILDREN_LOCATOR));
|
|
60
|
+
const newIndex = (0, _keyboardNavigation.menuKeyboardNavigation)(event, focusableItems);
|
|
61
|
+
setFocusId(itemIds[newIndex]);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
|
|
61
65
|
return /*#__PURE__*/_react.default.createElement(_menu.StyledMenuWrapper, _extends({
|
|
62
66
|
"data-component": "menu",
|
|
63
67
|
menuType: menuType
|
|
64
68
|
}, rest, {
|
|
65
69
|
ref: ref,
|
|
66
|
-
role: "list"
|
|
70
|
+
role: "list",
|
|
71
|
+
onKeyDown: handleKeyDown
|
|
67
72
|
}), /*#__PURE__*/_react.default.createElement(_menu2.default.Provider, {
|
|
68
73
|
value: {
|
|
69
74
|
menuType,
|
|
70
|
-
handleKeyDown,
|
|
71
75
|
inMenu: true,
|
|
72
|
-
|
|
73
|
-
|
|
76
|
+
openSubmenuId,
|
|
77
|
+
setOpenSubmenuId,
|
|
78
|
+
focusId,
|
|
79
|
+
registerItem,
|
|
80
|
+
unregisterItem
|
|
74
81
|
}
|
|
75
|
-
},
|
|
76
|
-
const isFocused = focusedItemIndex === index;
|
|
77
|
-
|
|
78
|
-
if ( /*#__PURE__*/_react.default.isValidElement(child) && child.type.displayName === "MenuItem" && child.props.submenu) {
|
|
79
|
-
return /*#__PURE__*/_react.default.cloneElement(child, {
|
|
80
|
-
isFocused,
|
|
81
|
-
indexInMenu: index
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return child;
|
|
86
|
-
})));
|
|
82
|
+
}, children));
|
|
87
83
|
};
|
|
88
84
|
|
|
89
85
|
Menu.propTypes = {
|
|
@@ -12,8 +12,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
12
12
|
var _default = /*#__PURE__*/_react.default.createContext({
|
|
13
13
|
menuType: "light",
|
|
14
14
|
inMenu: false,
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
openSubmenuId: null,
|
|
16
|
+
setOpenSubmenuId:
|
|
17
17
|
/* istanbul ignore next */
|
|
18
18
|
() => {}
|
|
19
19
|
});
|
|
@@ -13,8 +13,6 @@ var _menu = _interopRequireDefault(require("../menu.context"));
|
|
|
13
13
|
|
|
14
14
|
var _menuItem = _interopRequireDefault(require("../menu-item"));
|
|
15
15
|
|
|
16
|
-
var _submenu = _interopRequireDefault(require("../__internal__/submenu/submenu.context"));
|
|
17
|
-
|
|
18
16
|
var _scrollableBlock = _interopRequireDefault(require("./scrollable-block.style"));
|
|
19
17
|
|
|
20
18
|
var _box = _interopRequireDefault(require("../../box"));
|
|
@@ -35,13 +33,9 @@ const ScrollableBlock = ({
|
|
|
35
33
|
parentVariant,
|
|
36
34
|
...rest
|
|
37
35
|
}) => {
|
|
38
|
-
const menuContext = (0, _react.useContext)(_menu.default);
|
|
39
|
-
const submenuContext = (0, _react.useContext)(_submenu.default);
|
|
40
36
|
const {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
handleKeyDown
|
|
44
|
-
} = submenuContext;
|
|
37
|
+
menuType
|
|
38
|
+
} = (0, _react.useContext)(_menu.default);
|
|
45
39
|
const scrollVariants = {
|
|
46
40
|
light: "light",
|
|
47
41
|
dark: "dark",
|
|
@@ -50,35 +44,22 @@ const ScrollableBlock = ({
|
|
|
50
44
|
};
|
|
51
45
|
return /*#__PURE__*/_react.default.createElement(_scrollableBlock.default, _extends({
|
|
52
46
|
"data-component": "submenu-scrollable-block",
|
|
53
|
-
menuType:
|
|
47
|
+
menuType: menuType,
|
|
54
48
|
variant: variant
|
|
55
49
|
}, rest), parent && /*#__PURE__*/_react.default.createElement(_menuItem.default, {
|
|
50
|
+
"data-component": "scrollable-block-parent",
|
|
56
51
|
overrideColor: true,
|
|
57
52
|
variant: parentVariant,
|
|
58
53
|
as: "div",
|
|
59
54
|
href: "#"
|
|
60
55
|
}, parent), /*#__PURE__*/_react.default.createElement(_box.default, {
|
|
61
56
|
overflowY: "scroll",
|
|
62
|
-
scrollVariant: scrollVariants[
|
|
57
|
+
scrollVariant: scrollVariants[menuType],
|
|
63
58
|
height: height,
|
|
64
59
|
p: 0,
|
|
65
60
|
as: "ul",
|
|
66
61
|
role: "list"
|
|
67
|
-
},
|
|
68
|
-
let isFocused = false;
|
|
69
|
-
const blockItemFocused = focusIndex >= blockIndex;
|
|
70
|
-
|
|
71
|
-
if (blockItemFocused) {
|
|
72
|
-
isFocused = focusIndex - blockIndex === index;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return /*#__PURE__*/_react.default.createElement(_submenu.default.Provider, {
|
|
76
|
-
value: {
|
|
77
|
-
isFocused,
|
|
78
|
-
handleKeyDown
|
|
79
|
-
}
|
|
80
|
-
}, child);
|
|
81
|
-
})));
|
|
62
|
+
}, children));
|
|
82
63
|
};
|
|
83
64
|
|
|
84
65
|
ScrollableBlock.propTypes = {
|