@redocly/theme
Version:
Shared UI components lib
106 lines (102 loc) • 5.14 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Navbar = Navbar;
const react_1 = __importDefault(require("react"));
const styled_components_1 = __importDefault(require("styled-components"));
const utils_1 = require("../../core/utils");
const hooks_1 = require("../../core/hooks");
const NavbarLogo_1 = require("../../components/Navbar/NavbarLogo");
const NavbarMenu_1 = require("../../components/Navbar/NavbarMenu");
const MenuMobile_1 = require("../../components/Menu/MenuMobile");
const ColorModeSwitcher_1 = require("../../components/ColorModeSwitcher/ColorModeSwitcher");
const Search_1 = require("../../components/Search/Search");
const UserMenu_1 = require("../../components/UserMenu/UserMenu");
const LanguagePicker_1 = require("../../components/LanguagePicker/LanguagePicker");
const ProductPicker_1 = require("../../components/Product/ProductPicker");
const Button_1 = require("../../components/Button/Button");
const MenuIcon_1 = require("../../icons/MenuIcon/MenuIcon");
const CloseIcon_1 = require("../../icons/CloseIcon/CloseIcon");
function Navbar({ className }) {
var _a;
const { isOpen, closeMobileMenu, openMobileMenu } = (0, hooks_1.useMobileMenu)(false);
const themeConfig = (0, hooks_1.useThemeConfig)();
const { useL10n, useOtelTelemetry } = (0, hooks_1.useThemeHooks)();
const { changeLanguage } = useL10n();
const otelTelemetry = useOtelTelemetry();
const menu = (_a = themeConfig.navbar) === null || _a === void 0 ? void 0 : _a.items;
const { search: searchSettings, navbar, userMenu: userMenuSettings, logo } = themeConfig;
if (navbar === null || navbar === void 0 ? void 0 : navbar.hide) {
return null;
}
const hideSearch = (searchSettings === null || searchSettings === void 0 ? void 0 : searchSettings.hide) || ((searchSettings === null || searchSettings === void 0 ? void 0 : searchSettings.placement) && (searchSettings === null || searchSettings === void 0 ? void 0 : searchSettings.placement) !== 'navbar');
const hideUserMenu = userMenuSettings === null || userMenuSettings === void 0 ? void 0 : userMenuSettings.hide;
return (react_1.default.createElement(NavbarWrapper, { "data-component-name": "Navbar/Navbar", className: className },
isOpen && react_1.default.createElement(MenuMobile_1.MenuMobile, { hideUserProfile: !!hideUserMenu }),
react_1.default.createElement(NavbarRow, null,
logo && react_1.default.createElement(NavbarLogo_1.NavbarLogo, { config: logo }),
react_1.default.createElement(ProductPicker_1.ProductPicker, null),
menu && react_1.default.createElement(NavbarMenu_1.NavbarMenu, { menuItems: menu }),
hideSearch ? null : react_1.default.createElement(Search_1.Search, null),
react_1.default.createElement(LanguagePicker_1.LanguagePicker, { onChangeLanguage: changeLanguage, onlyIcon: true, alignment: "end" }),
react_1.default.createElement(ColorModeSwitcher_1.ColorModeSwitcher, null),
react_1.default.createElement(MobileMenuButton, { variant: "text", "data-testid": "mobile-menu-button", onClick: isOpen
? () => {
closeMobileMenu();
otelTelemetry.send({ type: 'mobile_menu_button_close.clicked' });
}
: () => {
openMobileMenu();
otelTelemetry.send({ type: 'mobile_menu_button_open.clicked' });
}, icon: isOpen ? react_1.default.createElement(CloseIcon_1.CloseIcon, null) : react_1.default.createElement(MenuIcon_1.MenuIcon, null) }),
hideUserMenu ? null : react_1.default.createElement(UserMenu_1.UserMenu, null))));
}
const NavbarWrapper = styled_components_1.default.nav `
--text-color: var(--navbar-text-color);
position: sticky;
display: flex;
top: 0;
height: var(--navbar-height);
flex-shrink: 0;
align-items: center;
box-sizing: border-box;
padding: var(--navbar-padding);
border: var(--navbar-border);
font-size: var(--navbar-font-size);
font-family: var(--navbar-font-family);
z-index: var(--z-index-raised);
background: var(--navbar-bg-color);
@media print {
background: transparent;
display: none;
> :not(a, img) {
display: none !important;
}
img {
padding: 0;
margin: 0;
}
}
`;
const NavbarRow = styled_components_1.default.div `
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
gap: 8px;
max-width: var(--navbar-container-max-width);
@media screen and (min-width: ${utils_1.breakpoints.max}) {
max-width: var(--container-max-width);
margin-left: auto;
margin-right: auto;
}
`;
const MobileMenuButton = (0, styled_components_1.default)(Button_1.Button) `
margin-left: 0px !important;
@media screen and (min-width: ${utils_1.breakpoints.medium}) {
display: none;
}
`;
//# sourceMappingURL=Navbar.js.map