@coreui/react
Version:
UI Components Library for React.js
62 lines (58 loc) • 2.59 kB
JavaScript
var tslib_es6 = require('../../node_modules/tslib/tslib.es6.js');
var React = require('react');
var PropTypes = require('prop-types');
var index = require('../../_virtual/index.js');
var useForkedRef = require('../../hooks/useForkedRef.js');
require('@popperjs/core');
var getNextActiveElement = require('../../utils/getNextActiveElement.js');
var CTabList = React.forwardRef(function (_a, ref) {
var _b;
var children = _a.children, className = _a.className, layout = _a.layout, variant = _a.variant, rest = tslib_es6.__rest(_a, ["children", "className", "layout", "variant"]);
var tabListRef = React.useRef(null);
var forkedRef = useForkedRef.useForkedRef(ref, tabListRef);
var handleKeydown = function (event) {
if (tabListRef.current !== null &&
(event.key === 'ArrowDown' ||
event.key === 'ArrowUp' ||
event.key === 'ArrowLeft' ||
event.key === 'ArrowRight' ||
event.key === 'Home' ||
event.key === 'End')) {
event.preventDefault();
var target = event.target;
// eslint-disable-next-line unicorn/prefer-spread
var items = Array.from(tabListRef.current.querySelectorAll('.nav-link:not(.disabled):not(:disabled)'));
var nextActiveElement = void 0;
if (event.key === 'Home' || event.key === 'End') {
nextActiveElement = event.key === 'End' ? items.at(-1) : items[0];
}
else {
nextActiveElement = getNextActiveElement.default(items, target, event.key === 'ArrowDown' || event.key === 'ArrowRight', true);
}
if (nextActiveElement) {
nextActiveElement.focus({ preventScroll: true });
}
}
};
return (React.createElement("div", tslib_es6.__assign({ className: index.default('nav', variant === 'enclosed-pills' && 'nav-enclosed', (_b = {},
_b["nav-".concat(layout)] = layout,
_b["nav-".concat(variant)] = variant,
_b), className), role: "tablist", onKeyDown: handleKeydown, ref: forkedRef }, rest), children));
});
CTabList.propTypes = {
children: PropTypes.node,
className: PropTypes.string,
layout: PropTypes.oneOf(['fill', 'justified']),
variant: PropTypes.oneOf([
'enclosed',
'enclosed-pills',
'pills',
'tabs',
'underline',
'underline-border',
]),
};
CTabList.displayName = 'CTabList';
exports.CTabList = CTabList;
//# sourceMappingURL=CTabList.js.map
;