UNPKG

@veracity/vui

Version:

Veracity UI is a React component library crafted for use within Veracity applications and pages. Based on Styled Components and @xstyled.

99 lines (97 loc) 3.44 kB
import { useClickOutside } from "../utils/react.js"; import { cs } from "../utils/styles.js"; import { useLinks } from "../core/links.js"; import { useStyleConfig } from "../core/theme.js"; import { useUp } from "../core/media.js"; import styled from "../core/styled.js"; import vui from "../core/vui.js"; import { HeaderProvider } from "./context.js"; import { HeaderAccountUserInfo } from "./headerAccountUserInfo.js"; import { HeaderAccount } from "./headerAccount.js"; import { HeaderApplicationName } from "./headerApplicationName.js"; import { HeaderContent } from "./headerContent.js"; import { HeaderCreateAccount } from "./headerCreateAccount.js"; import { HeaderDivider } from "./headerDivider.js"; import { HeaderLinkItem } from "./headerLinkItem.js"; import { HeaderLogo } from "./headerLogo.js"; import { HeaderMainLinks } from "./headerMainLinks.js"; import { HeaderMobileContent } from "./headerMobileContent.js"; import { HeaderMobileToggle } from "./headerMobileToggle.js"; import { HeaderNotifications } from "./headerNotifications.js"; import { HeaderServicesMessage } from "./headerServicesMessage.js"; import { HeaderServices } from "./headerServices.js"; import { HeaderSignIn } from "./headerSignIn.js"; import { HeaderSupport } from "./headerSupport.js"; import { useRef, useState } from "react"; import { jsx } from "react/jsx-runtime"; //#region src/header/header.tsx const HeaderBase = styled.headerBox` align-items: center; background-color: white; border-bottom: 1px solid darkBlue.main; display: flex; position: relative; `; /** Branded Veracity Header with logo, links, services, account and other data. Controls max-width of the content. */ const Header = vui((props, ref) => { const { className, isSticky, size, variant, ...rest } = props; const [isMobileOpen, setIsMobileOpen] = useState(false); const mobileContentRef = useRef(null); const mobileToggleRef = useRef(null); const styles = useStyleConfig("Header", props); const headerHeight = 72; const [links] = useLinks(); useClickOutside([mobileContentRef, mobileToggleRef], () => { setIsMobileOpen(false); }); const isDesktop = useUp("lg"); return /* @__PURE__ */ jsx(HeaderProvider, { value: { headerHeight, isDesktop, isMobile: !isDesktop, isMobileOpen, links, mobileContentRef, mobileToggleRef, setIsMobileOpen, size, variant }, children: /* @__PURE__ */ jsx(HeaderBase, { className: cs("vui-header", className), h: headerHeight, position: isSticky ? "sticky" : "static", px: { xs: 2, lg: 5 }, ref, role: "banner", top: isSticky ? 0 : "auto", ...styles.container, ...rest }) }); }); Header.Account = HeaderAccount; Header.AccountUserInfo = HeaderAccountUserInfo; Header.Support = HeaderSupport; Header.ApplicationName = HeaderApplicationName; Header.Content = HeaderContent; Header.CreateAccount = HeaderCreateAccount; Header.Divider = HeaderDivider; Header.LinkItem = HeaderLinkItem; Header.Logo = HeaderLogo; Header.MainLinks = HeaderMainLinks; Header.MobileContent = HeaderMobileContent; Header.MobileToggle = HeaderMobileToggle; Header.Notifications = HeaderNotifications; Header.Services = HeaderServices; Header.ServicesMessage = HeaderServicesMessage; Header.SignIn = HeaderSignIn; Header.displayName = "Header"; //#endregion export { Header, Header as default, HeaderBase }; globalThis.__vuiVersion__ = "5.3.1" //# sourceMappingURL=header.js.map