diff --git a/packages/menus/package.json b/packages/menus/package.json
index 594c5e276a6..67f22801ff8 100644
--- a/packages/menus/package.json
+++ b/packages/menus/package.json
@@ -37,7 +37,7 @@
},
"devDependencies": {
"@zendeskgarden/css-arrows": "3.1.1",
- "@zendeskgarden/css-menus": "7.1.0",
+ "@zendeskgarden/css-menus": "8.0.2",
"@zendeskgarden/css-variables": "5.1.1",
"@zendeskgarden/react-theming": "^3.1.3",
"@zendeskgarden/svg-icons": "4.4.5"
diff --git a/packages/menus/src/containers/MenuContainer.example.md b/packages/menus/src/containers/MenuContainer.example.md
index 6d953334f32..9fd2d9ba0b5 100644
--- a/packages/menus/src/containers/MenuContainer.example.md
+++ b/packages/menus/src/containers/MenuContainer.example.md
@@ -240,9 +240,7 @@ initialState = {
placement="end"
onChange={selectedKey => setState({ selectedKey })}
trigger={({ getTriggerProps, triggerRef, isOpen }) => (
-
+
)}
>
{({ getMenuProps, menuRef, placement, getItemProps, focusedKey }) => (
diff --git a/packages/menus/src/containers/MenuContainer.js b/packages/menus/src/containers/MenuContainer.js
index f615680ebd1..b87e9f9107d 100644
--- a/packages/menus/src/containers/MenuContainer.js
+++ b/packages/menus/src/containers/MenuContainer.js
@@ -406,7 +406,7 @@ class MenuContainer extends ControlledComponent {
/**
* Props to be applied to each selectable menu item
**/
- getItemProps = ({ key, role = 'menuitemcheckbox', textValue, ...other }) => {
+ getItemProps = ({ key, role = 'menuitemcheckbox', textValue, onMouseMove, ...other }) => {
const { focusedKey } = this.getControlledState();
if (typeof textValue === 'string' && textValue.length > 0) {
@@ -434,6 +434,16 @@ class MenuContainer extends ControlledComponent {
return {
key,
role,
+ /**
+ * onMouseMove is used as it is only triggered by actual mouse movement
+ */
+ onMouseMove: composeEventHandlers(onMouseMove, () => {
+ if (key !== focusedKey) {
+ this.setControlledState({
+ focusedKey: key
+ });
+ }
+ }),
...other
};
};
diff --git a/packages/menus/src/containers/MenuContainer.spec.js b/packages/menus/src/containers/MenuContainer.spec.js
index 3316a8e4a58..d0d70e68f89 100644
--- a/packages/menus/src/containers/MenuContainer.spec.js
+++ b/packages/menus/src/containers/MenuContainer.spec.js
@@ -493,6 +493,16 @@ describe('MenuContainer', () => {
it('applies correct accessibility role', () => {
expect(findMenuItems(wrapper).first()).toHaveProp('role', 'menuitemcheckbox');
});
+
+ it('focuses correct item if mouseMoved', () => {
+ findMenuItems(wrapper)
+ .first()
+ .simulate('mousemove');
+
+ wrapper.update();
+
+ expect(findMenuItems(wrapper).first()).toHaveProp('data-focused', true);
+ });
});
describe('getNextItemProps()', () => {
diff --git a/packages/menus/src/views/items/Item.example.md b/packages/menus/src/views/items/Item.example.md
index e188f78e7da..d85e22d8a75 100644
--- a/packages/menus/src/views/items/Item.example.md
+++ b/packages/menus/src/views/items/Item.example.md
@@ -60,7 +60,7 @@ const InlineMenuView = styled(MenuView)`
-
+
diff --git a/packages/menus/src/views/items/Item.js b/packages/menus/src/views/items/Item.js
index e593dfb44ba..af19e3dd34c 100644
--- a/packages/menus/src/views/items/Item.js
+++ b/packages/menus/src/views/items/Item.js
@@ -29,7 +29,16 @@ const Item = styled.li.attrs({
[MenuStyles['is-checked']]: props.checked
})
})`
+ /* stylelint-disable */
+ ${props =>
+ !props.focused &&
+ `&&&:hover {
+ background-color: inherit;
+ }
+ `};
+
${props => retrieveTheme(COMPONENT_ID, props)};
+ /* stylelint-enable */
`;
Item.propTypes = {
diff --git a/packages/menus/src/views/items/__snapshots__/Item.spec.js.snap b/packages/menus/src/views/items/__snapshots__/Item.spec.js.snap
index df8c64243c8..ab5126e219b 100644
--- a/packages/menus/src/views/items/__snapshots__/Item.spec.js.snap
+++ b/packages/menus/src/views/items/__snapshots__/Item.spec.js.snap
@@ -1,33 +1,49 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Item renders active styling 1`] = `
+.c0.c0.c0:hover {
+ background-color: inherit;
+}
+
`;
exports[`Item renders checked styling 1`] = `
+.c0.c0.c0:hover {
+ background-color: inherit;
+}
+
`;
exports[`Item renders default styling 1`] = `
+.c0.c0.c0:hover {
+ background-color: inherit;
+}
+
`;
exports[`Item renders disabled styling 1`] = `
+.c0.c0.c0:hover {
+ background-color: inherit;
+}
+
diff --git a/packages/menus/src/views/items/header/HeaderItem.js b/packages/menus/src/views/items/header/HeaderItem.js
index 7cd605366c9..8b5fece9f67 100644
--- a/packages/menus/src/views/items/header/HeaderItem.js
+++ b/packages/menus/src/views/items/header/HeaderItem.js
@@ -6,6 +6,7 @@
*/
import PropTypes from 'prop-types';
+import className from 'classnames';
import styled from 'styled-components';
import { retrieveTheme } from '@zendeskgarden/react-theming';
import MenuStyles from '@zendeskgarden/css-menus';
@@ -20,7 +21,10 @@ const COMPONENT_ID = 'menus.header_item';
const HeaderItem = styled(Item).attrs({
'data-garden-id': COMPONENT_ID,
'data-garden-version': PACKAGE_VERSION,
- className: MenuStyles['c-menu__item--header']
+ className: props =>
+ className(MenuStyles['c-menu__item--header'], {
+ [MenuStyles['c-menu__item--header--icon']]: props.containsIcon
+ })
})`
${props => retrieveTheme(COMPONENT_ID, props)};
`;
@@ -30,7 +34,9 @@ HeaderItem.propTypes = {
focused: PropTypes.bool,
hovered: PropTypes.bool,
disabled: PropTypes.bool,
- checked: PropTypes.bool
+ checked: PropTypes.bool,
+ /** Applies icon styling */
+ containsIcon: PropTypes.bool
};
HeaderItem.hasType = () => HeaderItem;
diff --git a/packages/menus/src/views/items/header/HeaderItem.spec.js b/packages/menus/src/views/items/header/HeaderItem.spec.js
index 98d519a1f31..81b26ece3e0 100644
--- a/packages/menus/src/views/items/header/HeaderItem.spec.js
+++ b/packages/menus/src/views/items/header/HeaderItem.spec.js
@@ -15,4 +15,14 @@ describe('HeaderItem', () => {
expect(wrapper).toMatchSnapshot();
});
+
+ it('renders icon styling if provided', () => {
+ const wrapper = shallow(
+
+
+
+ );
+
+ expect(wrapper).toMatchSnapshot();
+ });
});
diff --git a/packages/menus/src/views/items/header/__snapshots__/HeaderItem.spec.js.snap b/packages/menus/src/views/items/header/__snapshots__/HeaderItem.spec.js.snap
index 7f059569b2d..4a2d66f5918 100644
--- a/packages/menus/src/views/items/header/__snapshots__/HeaderItem.spec.js.snap
+++ b/packages/menus/src/views/items/header/__snapshots__/HeaderItem.spec.js.snap
@@ -7,3 +7,14 @@ exports[`HeaderItem renders default styling 1`] = `
data-garden-version="version"
/>
`;
+
+exports[`HeaderItem renders icon styling if provided 1`] = `
+-
+
+
+`;
diff --git a/packages/select/src/views/Dropdown.example.md b/packages/select/src/views/Dropdown.example.md
index 41d2669c104..ec1f202ce54 100644
--- a/packages/select/src/views/Dropdown.example.md
+++ b/packages/select/src/views/Dropdown.example.md
@@ -60,7 +60,7 @@ const InlineSelectView = styled(Dropdown)`
-
+