@wordpress/components
Version:
UI components for WordPress.
63 lines (56 loc) • 1.52 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { createElement } from "@wordpress/element";
/**
* External dependencies
*/
import { includes } from 'lodash';
/**
* WordPress dependencies
*/
import { forwardRef } from '@wordpress/element';
import { UP, DOWN, LEFT, RIGHT } from '@wordpress/keycodes';
/**
* Internal dependencies
*/
import NavigableContainer from './container';
export function NavigableMenu({
role = 'menu',
orientation = 'vertical',
...rest
}, ref) {
const eventToOffset = evt => {
const {
keyCode
} = evt;
let next = [DOWN];
let previous = [UP];
if (orientation === 'horizontal') {
next = [RIGHT];
previous = [LEFT];
}
if (orientation === 'both') {
next = [RIGHT, DOWN];
previous = [LEFT, UP];
}
if (includes(next, keyCode)) {
return 1;
} else if (includes(previous, keyCode)) {
return -1;
} else if (includes([DOWN, UP, LEFT, RIGHT], keyCode)) {
// Key press should be handled, e.g. have event propagation and
// default behavior handled by NavigableContainer but not result
// in an offset.
return 0;
}
};
return createElement(NavigableContainer, _extends({
ref: ref,
stopNavigationEvents: true,
onlyBrowserTabstops: false,
role: role,
"aria-orientation": role === 'presentation' ? null : orientation,
eventToOffset: eventToOffset
}, rest));
}
export default forwardRef(NavigableMenu);
//# sourceMappingURL=menu.js.map