You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.9 KiB

import classNames from 'classnames';
import all from 'prop-types-extra/lib/all';
import * as React from 'react';
import { useContext } from 'react';
import { useUncontrolled } from 'uncontrollable';
import BaseNav from '@restart/ui/Nav';
import { useBootstrapPrefix } from './ThemeProvider';
import NavbarContext from './NavbarContext';
import CardHeaderContext from './CardHeaderContext';
import NavItem from './NavItem';
import NavLink from './NavLink';
import { jsx as _jsx } from "react/jsx-runtime";
const defaultProps = {
justify: false,
fill: false
};
const Nav = /*#__PURE__*/React.forwardRef((uncontrolledProps, ref) => {
const {
as = 'div',
bsPrefix: initialBsPrefix,
variant,
fill,
justify,
navbar,
navbarScroll,
className,
activeKey,
...props
} = useUncontrolled(uncontrolledProps, {
activeKey: 'onSelect'
});
const bsPrefix = useBootstrapPrefix(initialBsPrefix, 'nav');
let navbarBsPrefix;
let cardHeaderBsPrefix;
let isNavbar = false;
const navbarContext = useContext(NavbarContext);
const cardHeaderContext = useContext(CardHeaderContext);
if (navbarContext) {
navbarBsPrefix = navbarContext.bsPrefix;
isNavbar = navbar == null ? true : navbar;
} else if (cardHeaderContext) {
({
cardHeaderBsPrefix
} = cardHeaderContext);
}
return /*#__PURE__*/_jsx(BaseNav, {
as: as,
ref: ref,
activeKey: activeKey,
className: classNames(className, {
[bsPrefix]: !isNavbar,
[`${navbarBsPrefix}-nav`]: isNavbar,
[`${navbarBsPrefix}-nav-scroll`]: isNavbar && navbarScroll,
[`${cardHeaderBsPrefix}-${variant}`]: !!cardHeaderBsPrefix,
[`${bsPrefix}-${variant}`]: !!variant,
[`${bsPrefix}-fill`]: fill,
[`${bsPrefix}-justified`]: justify
}),
...props
});
});
Nav.displayName = 'Nav';
Nav.defaultProps = defaultProps;
export default Object.assign(Nav, {
Item: NavItem,
Link: NavLink
});