documentation-site/components/header-navigation.jsx (274 lines of code) (raw):

/* Copyright (c) Uber Technologies, Inc. This source code is licensed under the MIT license found in the LICENSE file in the root directory of this source tree. */ // import * as React from "react"; import Link from "next/link"; import Image from "next/image"; import { themedUseStyletron as useStyletron } from "../pages/_app"; import Menu from "baseui/icon/menu"; import DarkLogo from "../images/base-web.svg"; import LightLogo from "../images/base-web-white.svg"; import GithubLogo from "./github-logo"; import SlackLogo from "./slack-logo"; import AlignLeftIcon from "./align-left-icon"; import AlignRightIcon from "./align-right-icon"; import VersionSelector from "./version-selector.jsx"; import Search from "./search"; import Bulb from "./bulb"; import { Button, KIND, SIZE, SHAPE } from "baseui/button"; // Breakpoint for un-wrapping the search bar from under the links and toggles. const WRAP_SEARCH = 715; const mq = (breakpoint) => `@media screen and (min-width: ${breakpoint}px)`; export default function HeaderNavigation({ toggleSidebar, toggleTheme, toggleDirection, }) { const [css, theme] = useStyletron(); return ( <header className={css({ ...theme.typography.ParagraphMedium, display: "flex", flexWrap: "wrap", paddingTop: theme.sizing.scale500, paddingBottom: theme.sizing.scale500, paddingLeft: theme.sizing.scale800, paddingRight: theme.sizing.scale800, borderBottomStyle: "solid", borderBottomWidth: "1px", borderBottomColor: theme.colors.borderOpaque, [mq(WRAP_SEARCH)]: { flexWrap: "nowrap", }, })} > {/* Logo & Links */} <div className={css({ marginLeft: theme.direction === "rtl" ? "auto" : "none", marginRight: theme.direction === "rtl" ? "none" : "auto", display: "flex", alignItems: "center", order: 1, })} > {/* Base Web Logo */} <Link href="/" className={css({ display: "flex", marginLeft: theme.direction === "rtl" ? theme.sizing.scale400 : "none", marginRight: theme.direction === "rtl" ? "none" : theme.sizing.scale400, ":focus": { outline: `3px solid ${theme.colors.accent}`, outlineOffset: "5px", }, })} > {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */} <Image src={theme.name.startsWith("dark") ? LightLogo : DarkLogo} alt="Base Web" height={40} width={97} /> </Link> {/* Version Selector */} <div className={css({ display: "none", [mq(400)]: { display: "block", }, })} > <VersionSelector /> </div> {/* Link to blog */} <Link href="/blog" passHref legacyBehavior> <Button $as="a" size={SIZE.compact} kind={KIND.tertiary} overrides={{ BaseButton: { style: { display: "none", [mq(1000)]: { display: "block", }, }, }, }} > Blog </Button> </Link> {/* Link to component gallery */} <Link href="https://baseweb.design/ladle" passHref legacyBehavior> <Button $as="a" size={SIZE.compact} kind={KIND.tertiary} overrides={{ BaseButton: { style: { display: "none", [mq(1000)]: { display: "block", }, }, }, }} > Components </Button> </Link> </div> {/* Search */} <div className={css({ flexBasis: "100%", order: 3, marginTop: theme.sizing.scale400, [mq(WRAP_SEARCH)]: { flexBasis: "auto", order: 2, marginTop: "0", marginLeft: theme.direction === "rtl" ? theme.sizing.scale400 : "none", marginRight: theme.direction === "rtl" ? "none" : theme.sizing.scale400, }, })} > <Search /> </div> {/* Toggles & Links */} <div className={css({ display: "flex", alignItems: "center", order: 2, [mq(WRAP_SEARCH)]: { order: 3, }, })} > {/* Slack */} <Button $as="a" href="https://join.slack.com/t/baseui/shared_invite/zt-5f1s4d10-1D2uywAECAG50m64PTH9cw" target="_blank" rel="noopener noreferrer" size={SIZE.compact} kind={KIND.tertiary} shape={SHAPE.square} title="Join our Slack channel" overrides={{ BaseButton: { style: { display: "none", [mq(500)]: { display: "flex", }, }, }, }} > <SlackLogo size={24} color={theme.colors.contentPrimary} /> </Button> {/* GitHub */} <Button $as="a" href="https://github.com/uber/baseweb" target="_blank" rel="noopener noreferrer" size={SIZE.compact} kind={KIND.tertiary} shape={SHAPE.square} title="Open GitHub repository" overrides={{ BaseButton: { style: { display: "none", [mq(400)]: { display: "flex", }, }, }, }} > <GithubLogo size={24} color={theme.colors.contentPrimary} /> </Button> {/* Direction Toggle */} <Button onClick={toggleDirection} size={SIZE.compact} kind={KIND.tertiary} shape={SHAPE.square} title="Toggle direction" overrides={{ BaseButton: { style: { display: "none", [mq(450)]: { display: "flex", }, }, }, }} > {theme.direction === "rtl" ? ( <AlignLeftIcon size={24} color={theme.colors.contentPrimary} /> ) : ( <AlignRightIcon size={24} color={theme.colors.contentPrimary} /> )} </Button> {/* Theme Toggle */} <Button onClick={toggleTheme} size={SIZE.compact} kind={KIND.tertiary} shape={SHAPE.square} title="Toggle theme" overrides={{ BaseButton: { style: { display: "flex", }, }, }} > <Bulb size={24} color={theme.colors.contentPrimary} /> </Button> {/* Nav Toggle */} <Button onClick={toggleSidebar} size={SIZE.compact} kind={KIND.tertiary} shape={SHAPE.square} title="Toggle navigation" overrides={{ BaseButton: { style: { display: "flex", [theme.mediaQuery.medium]: { display: "none", }, }, }, }} > <Menu size={24} color={theme.colors.contentPrimary} /> </Button> </div> </header> ); }