UNPKG

@coreui/react-pro

Version:

UI Components Library for React.js

60 lines (57 loc) 2.5 kB
import { __rest } from '../../node_modules/tslib/tslib.es6.js'; import React, { forwardRef, useRef } from 'react'; import PropTypes from 'prop-types'; import classNames from '../../_virtual/index.js'; import '@popperjs/core'; import getNextActiveElement from '../../utils/getNextActiveElement.js'; import { useForkedRef } from '../../hooks/useForkedRef.js'; const CTabList = forwardRef((_a, ref) => { var { children, className, layout, variant } = _a, rest = __rest(_a, ["children", "className", "layout", "variant"]); const tabListRef = useRef(null); const forkedRef = useForkedRef(ref, tabListRef); const handleKeydown = (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(); const target = event.target; // eslint-disable-next-line unicorn/prefer-spread const items = Array.from(tabListRef.current.querySelectorAll('.nav-link:not(.disabled):not(:disabled)')); let nextActiveElement; if (event.key === 'Home' || event.key === 'End') { nextActiveElement = event.key === 'End' ? items.at(-1) : items[0]; } else { nextActiveElement = getNextActiveElement(items, target, event.key === 'ArrowDown' || event.key === 'ArrowRight', true); } if (nextActiveElement) { nextActiveElement.focus({ preventScroll: true }); } } }; return (React.createElement("div", Object.assign({ className: classNames('nav', variant === 'enclosed-pills' && 'nav-enclosed', // Enclosed pills variant required for `.nav-enclosed` class { [`nav-${layout}`]: layout, [`nav-${variant}`]: variant, }, 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'; export { CTabList }; //# sourceMappingURL=CTabList.js.map