react-bootstrap
Version:
Bootstrap 5 components built with React
64 lines (63 loc) • 1.89 kB
JavaScript
"use client";
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 Nav = /*#__PURE__*/React.forwardRef((uncontrolledProps, ref) => {
const {
as = 'div',
bsPrefix: initialBsPrefix,
variant,
fill = false,
justify = false,
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';
export default Object.assign(Nav, {
Item: NavItem,
Link: NavLink
});