@gechiui/components
Version:
UI components for GeChiUI.
83 lines (65 loc) • 1.99 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.NavigableMenu = NavigableMenu;
exports.default = void 0;
var _element = require("@gechiui/element");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _lodash = require("lodash");
var _keycodes = require("@gechiui/keycodes");
var _container = _interopRequireDefault(require("./container"));
// @ts-nocheck
/**
* External dependencies
*/
/**
* GeChiUI dependencies
*/
/**
* Internal dependencies
*/
function NavigableMenu(_ref, ref) {
let {
role = 'menu',
orientation = 'vertical',
...rest
} = _ref;
const eventToOffset = evt => {
const {
keyCode
} = evt;
let next = [_keycodes.DOWN];
let previous = [_keycodes.UP];
if (orientation === 'horizontal') {
next = [_keycodes.RIGHT];
previous = [_keycodes.LEFT];
}
if (orientation === 'both') {
next = [_keycodes.RIGHT, _keycodes.DOWN];
previous = [_keycodes.LEFT, _keycodes.UP];
}
if ((0, _lodash.includes)(next, keyCode)) {
return 1;
} else if ((0, _lodash.includes)(previous, keyCode)) {
return -1;
} else if ((0, _lodash.includes)([_keycodes.DOWN, _keycodes.UP, _keycodes.LEFT, _keycodes.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 (0, _element.createElement)(_container.default, (0, _extends2.default)({
ref: ref,
stopNavigationEvents: true,
onlyBrowserTabstops: false,
role: role,
"aria-orientation": role === 'presentation' ? null : orientation,
eventToOffset: eventToOffset
}, rest));
}
var _default = (0, _element.forwardRef)(NavigableMenu);
exports.default = _default;
//# sourceMappingURL=menu.js.map