@blateral/b.kit 2.8.2 → 2.8.4-patch-1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/{Checkbox-8dccd42f.js → Checkbox-ddc9a87d.js} +2 -2
- package/cjs/{Checkbox-8dccd42f.js.map → Checkbox-ddc9a87d.js.map} +1 -1
- package/cjs/Copy-2a9d4b5d.js +2 -0
- package/cjs/Copy-2a9d4b5d.js.map +1 -0
- package/cjs/{EventBlock-4e406696.js → EventBlock-0b0f0dd3.js} +2 -2
- package/cjs/{EventBlock-4e406696.js.map → EventBlock-0b0f0dd3.js.map} +1 -1
- package/cjs/{FilterBar-0781490f.js → FilterBar-bfd9db6e.js} +2 -2
- package/cjs/FilterBar-bfd9db6e.js.map +1 -0
- package/cjs/{FilterField-7efcacb7.js → FilterField-d204feb1.js} +2 -2
- package/cjs/FilterField-d204feb1.js.map +1 -0
- package/cjs/{Image-94820dfd.js → Image-69a9c116.js} +2 -2
- package/cjs/{Image-94820dfd.js.map → Image-69a9c116.js.map} +1 -1
- package/cjs/{InfoList-e416058c.js → InfoList-f040b8fb.js} +2 -2
- package/cjs/{InfoList-e416058c.js.map → InfoList-f040b8fb.js.map} +1 -1
- package/cjs/{LanguageSwitcher-aa96cc7d.js → LanguageSwitcher-c6fd04df.js} +2 -2
- package/cjs/{LanguageSwitcher-aa96cc7d.js.map → LanguageSwitcher-c6fd04df.js.map} +1 -1
- package/cjs/MultiselectDropdown-d46ae36f.js +2 -0
- package/cjs/MultiselectDropdown-d46ae36f.js.map +1 -0
- package/cjs/{Navigation-6abb6213.js → Navigation-6c5d9dee.js} +2 -2
- package/cjs/{Navigation-6abb6213.js.map → Navigation-6c5d9dee.js.map} +1 -1
- package/cjs/Pointer-0f69256f.js +2 -0
- package/cjs/Pointer-0f69256f.js.map +1 -0
- package/cjs/{SocialList-aec9a5c2.js → SocialList-73af56b5.js} +2 -2
- package/cjs/{SocialList-aec9a5c2.js.map → SocialList-73af56b5.js.map} +1 -1
- package/cjs/{TableBlock-c545ca8d.js → TableBlock-532c7e1e.js} +2 -2
- package/cjs/{TableBlock-c545ca8d.js.map → TableBlock-532c7e1e.js.map} +1 -1
- package/cjs/{Tag-937849ad.js → Tag-232f7aa9.js} +2 -2
- package/cjs/{Tag-937849ad.js.map → Tag-232f7aa9.js.map} +1 -1
- package/cjs/{Textarea-599e94a4.js → Textarea-d30682bd.js} +2 -2
- package/cjs/{Textarea-599e94a4.js.map → Textarea-d30682bd.js.map} +1 -1
- package/cjs/{Textfield-24f468be.js → Textfield-b3769184.js} +2 -2
- package/cjs/{Textfield-24f468be.js.map → Textfield-b3769184.js.map} +1 -1
- package/cjs/{VideoBlock-1fbf598b.js → VideoBlock-0cae22f0.js} +2 -2
- package/cjs/{VideoBlock-1fbf598b.js.map → VideoBlock-0cae22f0.js.map} +1 -1
- package/cjs/{VideoCard-905c08d2.js → VideoCard-c9d4f46a.js} +2 -2
- package/cjs/{VideoCard-905c08d2.js.map → VideoCard-c9d4f46a.js.map} +1 -1
- package/cjs/blocks.js +1 -1
- package/cjs/buttons.js +1 -1
- package/cjs/cookies.js +1 -1
- package/cjs/fields.js +1 -1
- package/cjs/footer.js +1 -1
- package/cjs/{formFieldText-046fcbf4.js → formFieldText-21f5f620.js} +2 -2
- package/cjs/{formFieldText-046fcbf4.js.map → formFieldText-21f5f620.js.map} +1 -1
- package/cjs/headers.js +1 -1
- package/cjs/navigation.js +1 -1
- package/cjs/sections.dynamicform.js +1 -1
- package/cjs/sections.dynamicform.js.map +1 -1
- package/cjs/sections.events.js +1 -1
- package/cjs/sections.forms.js +1 -1
- package/cjs/sections.jobs.js +1 -1
- package/cjs/sections.js +1 -1
- package/cjs/sections.news.js +1 -1
- package/cjs/sections.pois.js +1 -1
- package/cjs/typography.js +1 -1
- package/esm/{Checkbox-1957067a.js → Checkbox-962fea67.js} +2 -2
- package/esm/{Checkbox-1957067a.js.map → Checkbox-962fea67.js.map} +1 -1
- package/esm/{Copy-c6786949.js → Copy-fd9e25c0.js} +2 -2
- package/esm/Copy-fd9e25c0.js.map +1 -0
- package/esm/{EventBlock-8e130f6b.js → EventBlock-12361860.js} +4 -4
- package/esm/{EventBlock-8e130f6b.js.map → EventBlock-12361860.js.map} +1 -1
- package/esm/{FilterBar-2a2a09b7.js → FilterBar-8c258534.js} +26 -26
- package/esm/FilterBar-8c258534.js.map +1 -0
- package/esm/{FilterField-bec061bc.js → FilterField-8e64b355.js} +3 -3
- package/esm/FilterField-8e64b355.js.map +1 -0
- package/esm/{Image-b26692a9.js → Image-c67870d4.js} +2 -2
- package/esm/{Image-b26692a9.js.map → Image-c67870d4.js.map} +1 -1
- package/esm/{InfoList-b6980a42.js → InfoList-d853db58.js} +2 -2
- package/esm/{InfoList-b6980a42.js.map → InfoList-d853db58.js.map} +1 -1
- package/esm/{LanguageSwitcher-f9218fdc.js → LanguageSwitcher-c9aa594a.js} +2 -2
- package/esm/{LanguageSwitcher-f9218fdc.js.map → LanguageSwitcher-c9aa594a.js.map} +1 -1
- package/esm/{MultiselectDropdown-a97be6bc.js → MultiselectDropdown-61a5a1a6.js} +22 -17
- package/esm/MultiselectDropdown-61a5a1a6.js.map +1 -0
- package/esm/{Navigation-bb79a1eb.js → Navigation-6581bcdf.js} +4 -4
- package/esm/{Navigation-bb79a1eb.js.map → Navigation-6581bcdf.js.map} +1 -1
- package/esm/{Pointer-b4abee91.js → Pointer-3e965d7b.js} +2 -2
- package/esm/Pointer-3e965d7b.js.map +1 -0
- package/esm/{SocialList-336b7f6d.js → SocialList-abaf970d.js} +2 -2
- package/esm/{SocialList-336b7f6d.js.map → SocialList-abaf970d.js.map} +1 -1
- package/esm/{TableBlock-1ddfd539.js → TableBlock-a65315ca.js} +2 -2
- package/esm/{TableBlock-1ddfd539.js.map → TableBlock-a65315ca.js.map} +1 -1
- package/esm/{Tag-c3bd6b7f.js → Tag-217cd89b.js} +2 -2
- package/esm/{Tag-c3bd6b7f.js.map → Tag-217cd89b.js.map} +1 -1
- package/esm/{Textarea-95352f50.js → Textarea-60503eb7.js} +3 -3
- package/esm/{Textarea-95352f50.js.map → Textarea-60503eb7.js.map} +1 -1
- package/esm/{Textfield-99d91b4e.js → Textfield-e8f48b5f.js} +3 -3
- package/esm/{Textfield-99d91b4e.js.map → Textfield-e8f48b5f.js.map} +1 -1
- package/esm/{VideoBlock-474e0aa4.js → VideoBlock-3f150172.js} +4 -4
- package/esm/{VideoBlock-474e0aa4.js.map → VideoBlock-3f150172.js.map} +1 -1
- package/esm/{VideoCard-91438667.js → VideoCard-aa60fbe5.js} +2 -2
- package/esm/{VideoCard-91438667.js.map → VideoCard-aa60fbe5.js.map} +1 -1
- package/esm/blocks.js +15 -15
- package/esm/buttons.js +1 -1
- package/esm/cookies.js +2 -2
- package/esm/fields.js +7 -7
- package/esm/footer.js +3 -3
- package/esm/{formFieldText-f4188e55.js → formFieldText-c6fcd370.js} +2 -2
- package/esm/{formFieldText-f4188e55.js.map → formFieldText-c6fcd370.js.map} +1 -1
- package/esm/headers.js +4 -4
- package/esm/navigation.js +6 -6
- package/esm/sections.dynamicform.js +40 -12
- package/esm/sections.dynamicform.js.map +1 -1
- package/esm/sections.events.js +6 -6
- package/esm/sections.forms.js +3 -3
- package/esm/sections.jobs.js +2 -2
- package/esm/sections.js +8 -8
- package/esm/sections.news.js +6 -6
- package/esm/sections.pois.js +11 -11
- package/esm/typography.js +1 -1
- package/package.json +1 -1
- package/types/components/blocks/FilterBar.d.ts.map +1 -1
- package/types/components/fields/FilterField.d.ts.map +1 -1
- package/types/components/fields/MultiselectDropdown.d.ts.map +1 -1
- package/types/components/sections/form/DynamicForm.d.ts +7 -0
- package/types/components/sections/form/DynamicForm.d.ts.map +1 -1
- package/types/components/typography/Copy.d.ts.map +1 -1
- package/cjs/Copy-a0bc570d.js +0 -2
- package/cjs/Copy-a0bc570d.js.map +0 -1
- package/cjs/FilterBar-0781490f.js.map +0 -1
- package/cjs/FilterField-7efcacb7.js.map +0 -1
- package/cjs/MultiselectDropdown-a16ea1c9.js +0 -2
- package/cjs/MultiselectDropdown-a16ea1c9.js.map +0 -1
- package/cjs/Pointer-331140b6.js +0 -2
- package/cjs/Pointer-331140b6.js.map +0 -1
- package/esm/Copy-c6786949.js.map +0 -1
- package/esm/FilterBar-2a2a09b7.js.map +0 -1
- package/esm/FilterField-bec061bc.js.map +0 -1
- package/esm/MultiselectDropdown-a97be6bc.js.map +0 -1
- package/esm/Pointer-b4abee91.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Navigation-6abb6213.js","sources":["../src/utils/usePageScroll.ts","../src/components/sections/navigation/skeletons/BarBreadCrumbs.tsx","../src/components/sections/navigation/skeletons/BarColumn.tsx","../src/components/sections/navigation/skeletons/BarLogo.tsx","../src/components/sections/navigation/skeletons/BarMenuToggle.tsx","../src/components/sections/navigation/skeletons/BarNavList.tsx","../src/components/sections/navigation/partials/MenuHeader.tsx","../src/components/sections/navigation/menu/variations/MenuFlyout.tsx","../src/components/sections/navigation/menu/Menu.tsx","../src/components/sections/navigation/NavBar.tsx","../src/components/sections/navigation/Navigation.tsx","../src/utils/menuHooks.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport useScrollThrottle from './useScrollThrottle';\n\nexport enum PageScrollDirection {\n UP,\n DOWN,\n}\n\ninterface ScrollSettings {\n /** Direction state change delay in pixels */\n directionOffset?: {\n up?: number;\n down?: number;\n };\n /** Set top offset area */\n offset?: number;\n /** On leave top offset callback */\n onLeftOffset?: (dir: PageScrollDirection) => void;\n /** Throttle timeout of resize event. Default: 200ms */\n resizeThrottleTimeout?: number;\n}\n\nconst usePageScroll = (settings?: ScrollSettings) => {\n const [isTop, setIsTop] = useState<boolean>(true);\n const [isInOffset, setIsInOffset] = useState<boolean>(true);\n const [leftOffsetFromTop, setLeftOffsetFromTop] = useState<boolean>(false);\n\n const lastScrollPos = useRef<number>(0);\n const pxSinceLastSwitch = useRef<number>(0);\n\n const [scrollDirection, setScrollDirection] = useState<PageScrollDirection>(\n PageScrollDirection.DOWN\n );\n\n const directionDownOffset = settings?.directionOffset?.down || 0;\n const directionUpOffset = settings?.directionOffset?.up || 0;\n\n // Throttle scroll event for perfomance\n const scrollState = useScrollThrottle(\n settings?.resizeThrottleTimeout !== undefined\n ? settings.resizeThrottleTimeout\n : 200\n );\n\n useEffect(() => {\n if (!scrollState) return;\n if (typeof window === 'undefined') return;\n\n const scrollY = scrollState.scrollY;\n const isTop = scrollY <= 0;\n\n // check if page is scroll on top\n setIsTop(isTop);\n\n // check offset\n if (settings?.offset && scrollY <= settings.offset) {\n setIsInOffset(true);\n } else {\n setIsInOffset((prev) => {\n if (prev) {\n settings?.onLeftOffset?.(scrollDirection);\n setLeftOffsetFromTop(true);\n }\n return false;\n });\n }\n\n /**\n * calculate direction changes\n */\n\n // get difference between current and last scrollY position\n const diff = scrollY - lastScrollPos.current;\n // get accumulated pixels since last direction change\n let absAccPx = Math.abs(pxSinceLastSwitch.current);\n\n // check if direction changed. if not iterate accumulated pixels value\n if (diff < 0 && pxSinceLastSwitch.current > 0) {\n pxSinceLastSwitch.current = 0;\n } else if (diff > 0 && pxSinceLastSwitch.current < 0) {\n pxSinceLastSwitch.current = 0;\n } else {\n pxSinceLastSwitch.current += diff;\n }\n\n // set current accumulated value\n absAccPx = Math.abs(pxSinceLastSwitch.current);\n\n // set direction states\n if (isTop) {\n setScrollDirection(PageScrollDirection.DOWN);\n } else if (diff < 0 && absAccPx >= directionUpOffset) {\n setScrollDirection(PageScrollDirection.UP);\n } else if (diff > 0 && absAccPx >= directionDownOffset) {\n setScrollDirection(PageScrollDirection.DOWN);\n }\n\n // save last scroll position\n lastScrollPos.current = scrollY;\n }, [\n directionDownOffset,\n directionUpOffset,\n scrollDirection,\n scrollState,\n settings,\n ]);\n\n useEffect(() => {\n // reset left offset flag on top\n if (isTop) setLeftOffsetFromTop(false);\n }, [isTop]);\n\n return {\n isTop,\n scrollDirection,\n isInOffset,\n leftOffsetFromTop,\n };\n};\n\nexport default usePageScroll;\n","import React, { FC, useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport { NavItem } from '../menu/Menu';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport { spacings, getColors as color, mq } from 'utils/styles';\nimport Copy, { copyStyle } from 'components/typography/Copy';\nimport AngleLeft from 'components/base/icons/AngleLeft';\nimport { getCurrentNavPath } from 'utils/navigation';\n\nconst View = styled.nav`\n min-width: 0;\n`;\n\nconst List = styled.ul`\n display: flex;\n align-items: center;\n list-style: none;\n margin: 0;\n padding: 0;\n min-width: inherit;\n\n & > li:first-child {\n flex: 1 0 auto;\n }\n\n @media ${mq.semilarge} {\n & > li + li {\n margin-left: ${spacings.nudge}px;\n }\n }\n`;\n\nconst ListItem = styled.li<{ isCurrent?: boolean }>`\n display: ${({ isCurrent }) => (isCurrent ? 'flex' : 'none')};\n min-width: inherit;\n\n @media ${mq.semilarge} {\n display: flex;\n\n & > * + * {\n margin-left: ${spacings.nudge}px;\n }\n }\n`;\n\nconst NavLink = styled(Link)<{\n isInverted?: boolean;\n clamp?: boolean;\n showOnMobile?: boolean;\n showOnDesktop?: boolean;\n}>`\n display: ${({ showOnMobile }) => (showOnMobile ? 'inline-flex' : 'none')};\n align-items: center;\n max-width: ${({ clamp }) => clamp && '120px'};\n\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n ${copyStyle('copy', 'small')}\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.default};\n text-decoration: underline;\n\n & > * {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge}px;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).text.inverted\n : color(theme).text.default};\n }\n }\n\n @media ${mq.semilarge} {\n display: ${({ showOnDesktop }) =>\n showOnDesktop ? 'inline-block' : 'none'};\n }\n`;\n\nconst NavLabel = styled.span<{\n isInverted?: boolean;\n clamp?: boolean;\n showOnMobile?: boolean;\n showOnDesktop?: boolean;\n}>`\n display: ${({ showOnMobile }) => (showOnMobile ? 'inline-flex' : 'none')};\n align-items: center;\n max-width: ${({ clamp }) => clamp && '120px'};\n\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n ${copyStyle('copy', 'small')}\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.default};\n text-decoration: none;\n\n & > * {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge}px;\n }\n\n @media ${mq.semilarge} {\n display: ${({ showOnDesktop }) =>\n showOnDesktop ? 'inline-block' : 'none'};\n }\n`;\n\nconst Seperator = styled(Copy)`\n display: none;\n\n transition: color 0.2s ease-in-out;\n\n @media ${mq.semilarge} {\n display: inline-block;\n }\n`;\n\nconst BackIconContainer = styled.span`\n flex: 0 0 auto;\n`;\n\nconst BreadcrumbItem: FC<\n NavItem & {\n isInverted?: boolean;\n showOnMobile?: boolean;\n showOnDesktop?: boolean;\n children?: React.ReactNode;\n }\n> = ({ isInverted, label, link, showOnMobile, showOnDesktop, children }) => {\n if (link?.href) {\n return (\n <NavLink\n {...link}\n isInverted={isInverted}\n showOnMobile={showOnMobile}\n showOnDesktop={showOnDesktop}\n >\n {children || label}\n </NavLink>\n );\n } else {\n return (\n <NavLabel\n isInverted={isInverted}\n showOnMobile={showOnMobile}\n showOnDesktop={showOnDesktop}\n >\n {children || label}\n </NavLabel>\n );\n }\n};\n\nconst BarBreadcrumbs: FC<{\n isInverted?: boolean;\n rootLink?: LinkProps;\n rootLabel?: string;\n navItems?: Array<NavItem>;\n seperator?: (props: { isInverted?: boolean }) => React.ReactNode;\n back?: (props: { isInverted?: boolean }) => React.ReactNode;\n className?: string;\n}> = ({\n isInverted = false,\n rootLink,\n rootLabel,\n navItems,\n seperator,\n back,\n className,\n}) => {\n const currentNavPath = useMemo(() => {\n return getCurrentNavPath(\n navItems,\n rootLink?.href ? [rootLink?.href] : []\n );\n }, [navItems, rootLink?.href]);\n\n const rootItem: NavItem = {\n uid: 'root',\n label: rootLabel || 'Home',\n link: rootLink,\n };\n\n return (\n <View aria-label=\"breadcrumbs\" className={className}>\n <List>\n <ListItem>\n <BreadcrumbItem\n showOnDesktop\n isInverted={isInverted}\n {...rootItem}\n />\n </ListItem>\n\n {currentNavPath?.map((item, i) => {\n const isCurrent = i === currentNavPath.length - 1;\n const prev = i - 1 >= 0 ? currentNavPath[i - 1] : rootItem;\n\n return (\n <ListItem key={i} isCurrent={isCurrent}>\n <Seperator size=\"small\" isInverted={isInverted}>\n {seperator ? seperator({ isInverted }) : '/'}\n </Seperator>\n {isCurrent ? (\n <>\n {prev && (\n <BreadcrumbItem\n {...prev}\n showOnMobile\n isInverted={isInverted}\n >\n <BackIconContainer>\n {back ? (\n back({ isInverted })\n ) : (\n <AngleLeft />\n )}\n </BackIconContainer>\n <span>{prev.label}</span>\n </BreadcrumbItem>\n )}\n <BreadcrumbItem\n {...item}\n link={{}}\n showOnDesktop\n isInverted={isInverted}\n />\n </>\n ) : (\n <BreadcrumbItem\n {...item}\n showOnDesktop\n isInverted={isInverted}\n />\n )}\n </ListItem>\n );\n })}\n </List>\n </View>\n );\n};\n\nexport default BarBreadcrumbs;\n","import styled from 'styled-components';\nimport { spacings, getColors as color } from 'utils/styles';\n\nconst Column = styled.div<{\n isInverted?: boolean;\n takeSpace?: boolean;\n vAlign?: 'top' | 'center' | 'bottom';\n}>`\n flex: ${({ takeSpace }) => (takeSpace ? 1 : undefined)};\n\n padding: ${spacings.nudge}px 0;\n min-width: -webkit-min-content;\n align-self: ${({ vAlign }) => {\n switch (vAlign) {\n case 'center':\n return 'center';\n\n case 'bottom':\n return 'flex-end';\n\n case 'top':\n return 'flex-start';\n\n default:\n return undefined;\n }\n }};\n\n text-align: center;\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.inverted};\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n }\n\n &:not(:first-child):not(:last-child) {\n margin: 0 ${spacings.nudge * 2}px;\n }\n`;\n\nexport default Column;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport Link, { LinkProps } from 'components/typography/Link';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { getColors } from 'utils/styles';\n\nconst View = styled(Link)`\n display: block;\n display: flex;\n justify-content: center;\n min-width: 60px;\n max-width: 100%;\n max-height: 100%;\n\n &:focus {\n outline: 2px solid ${({ theme }) => getColors(theme).primary.default};\n outline-offset: 1px;\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n`;\n\nconst Logo = styled(Image)`\n width: auto;\n height: 100%;\n object-fit: contain;\n`;\n\nexport interface Logo {\n src?: string;\n alt?: string;\n}\n\nconst BarLogo: FC<{\n link?: Omit<LinkProps, 'coverSpace' | 'ratios'>;\n logo?: ImageProps;\n className?: string;\n}> = ({ link, logo, className }) => {\n return (\n <View {...link} className={className}>\n {logo?.small && (\n <Logo\n {...logo}\n coverSpace={false}\n ratios={undefined}\n showPlaceholder={false}\n />\n )}\n </View>\n );\n};\n\nexport default BarLogo;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { getColors as color, spacings } from 'utils/styles';\n\nconst Toggle = styled.button<{ isInverted?: boolean }>`\n background: transparent;\n border: none;\n color: ${({ isInverted, theme }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.default};\n\n padding: ${spacings.nudge}px;\n margin-left: -${spacings.nudge}px;\n outline: none;\n\n cursor: pointer;\n\n transition: color 0.2s ease-in-out;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n }\n }\n\n &:focus > * {\n outline: dotted 2px\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n outline-offset: 4px;\n\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n }\n\n &:focus:not(:focus-visible) > * {\n outline: none;\n }\n`;\n\nconst BarMenuToggle: FC<{\n isInverted?: boolean;\n isExpanded?: boolean;\n onClick?: (ev?: React.SyntheticEvent<HTMLButtonElement>) => void;\n className?: string;\n children?: React.ReactNode;\n}> = ({ isInverted, isExpanded = false, onClick, children, className }) => {\n return (\n <Toggle\n isInverted={isInverted}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? 'close menu' : 'open menu'}\n aria-haspopup=\"true\"\n aria-controls=\"mainMenu\"\n onClick={onClick}\n className={className}\n >\n {children}\n </Toggle>\n );\n};\n\nexport default BarMenuToggle;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport Link from 'components/typography/Link';\nimport { spacings, getColors as color } from 'utils/styles';\nimport { copyStyle } from 'components/typography/Copy';\nimport { NavItem } from '../menu/Menu';\n\nconst View = styled.nav<{ isInverted?: boolean }>`\n display: inline-flex;\n align-items: center;\n\n margin: 0 -${spacings.nudge}px;\n\n & > * + * {\n &:before {\n content: '';\n display: block;\n position: absolute;\n top: 3px;\n left: 0;\n height: 1em;\n width: 2px;\n background-color: ${({ isInverted, theme }) =>\n isInverted\n ? color(theme).text.inverted\n : color(theme).text.default};\n\n transition: background-color 0.2s ease-in-out;\n }\n }\n`;\n\nconst NavLink = styled(Link)<{ isInverted?: boolean; isActive?: boolean }>`\n display: inline-block;\n position: relative;\n padding: 0 ${spacings.nudge}px;\n\n ${copyStyle('copy', 'medium')}\n font-weight: ${({ isActive }) => isActive && '700'};\n\n color: ${({ isInverted, theme }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.default};\n text-decoration: none;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n color: ${({ isInverted, theme }) =>\n isInverted\n ? color(theme).text.inverted\n : color(theme).text.default};\n text-decoration: underline;\n }\n }\n`;\n\nconst BarNavList: FC<{\n isInverted?: boolean;\n navLinks?: NavItem[];\n className?: string;\n}> = ({ isInverted, navLinks, className }) => {\n return (\n <View isInverted={isInverted} className={className}>\n {navLinks?.map((item, i) => (\n <NavLink\n key={i}\n {...item.link}\n isInverted={isInverted}\n isActive={item.isCurrent}\n >\n {item.label}\n </NavLink>\n ))}\n </View>\n );\n};\n\nexport default BarNavList;\n","import Cross from 'components/base/icons/Cross';\nimport React, { FC } from 'react';\n\nimport styled from 'styled-components';\nimport { spacings } from 'utils/styles';\nimport { NavMenuStates } from '../Navigation';\nimport * as Skeletons from 'components/sections/navigation/skeletons/index';\nimport LanguageSwitcher, { Language } from 'components/blocks/LanguageSwitcher';\nimport { isValidArray } from 'utils/arrays';\n\nconst Header = styled.div`\n display: flex;\n align-items: center;\n\n padding: 0 ${spacings.nudge * 2}px;\n padding-top: ${spacings.nudge * 5}px;\n`;\n\nconst LanguageCol = styled.div`\n display: block;\n margin-left: ${spacings.nudge * 3}px;\n margin-top: 2px;\n`;\n\nconst MenuHeader: FC<{\n isInverted?: boolean;\n menuStates?: NavMenuStates;\n customToggle?: (props: { isInverted?: boolean }) => React.ReactNode;\n langs?: Language[];\n action?: (\n props: { isInverted?: boolean } & NavMenuStates\n ) => React.ReactNode;\n}> = ({ isInverted, customToggle, menuStates, langs, action }) => {\n return (\n <React.Fragment>\n <Header>\n <Skeletons.MenuToggle\n isInverted={isInverted}\n isExpanded={true}\n onClick={menuStates?.closeMenu}\n >\n {customToggle ? (\n customToggle({ isInverted })\n ) : (\n <Cross ariaHidden={true} />\n )}\n </Skeletons.MenuToggle>\n {isValidArray(langs, false) && (\n <LanguageCol>\n <LanguageSwitcher\n isInverted={isInverted}\n langs={langs}\n />\n </LanguageCol>\n )}\n {action && action({ isInverted, ...menuStates })}\n </Header>\n </React.Fragment>\n );\n};\n\nexport default MenuHeader;\n","import AngleRight from 'components/base/icons/AngleRight';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport React, {\n FC,\n useState,\n useMemo,\n useRef,\n useEffect,\n forwardRef,\n} from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\nimport { isValidArray } from 'utils/arrays';\nimport { clampValue } from 'utils/clamp';\nimport { useLibTheme } from 'utils/LibThemeProvider';\nimport { getCurrentNavItem } from 'utils/navigation';\nimport {\n mq,\n spacings,\n getColors as color,\n getFonts as font,\n getGlobals as global,\n withRange,\n Fonts,\n} from 'utils/styles';\nimport { NavBarSize } from '../../NavBar';\nimport MenuHeader from '../../partials/MenuHeader';\nimport { MenuBaseProps, NavItem } from '../Menu';\nimport { css } from 'styled-components';\n\ntype NavigationFontType = keyof Fonts['navigation'];\n\nconst navigationStyle = (type: NavigationFontType) => css`\n font-family: ${({ theme }) => font(theme).navigation[type].family};\n font-weight: ${({ theme }) => font(theme).navigation[type].weight};\n font-style: ${({ theme }) => font(theme).navigation[type].style};\n ${({ theme }) => withRange(font(theme).navigation[type].size, 'font-size')}\n line-height: ${({ theme }) => font(theme).navigation[type].lineHeight};\n letter-spacing: ${({ theme }) =>\n font(theme).navigation[type].letterSpacing};\n text-transform: ${({ theme }) =>\n font(theme).navigation[type].textTransform};\n text-decoration: ${({ theme }) =>\n font(theme).navigation[type].textDecoration};\n`;\n\nconst Backdrop = styled.div<{ isOpen?: boolean; filter?: string }>`\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background-color: rgba(0, 0, 0, 0.5);\n opacity: ${({ isOpen }) => (isOpen ? 1 : 0)};\n pointer-events: ${({ isOpen }) => (isOpen ? 'all' : 'none')};\n z-index: 101;\n\n transition: opacity 0.3s ease-in-out;\n\n @supports ((-webkit-backdrop-filter: none) or (backdrop-filter: none)) {\n backdrop-filter: ${({ filter }) => filter};\n }\n`;\n\nconst Stage = styled.div<{ isOpen?: boolean; clampWidth?: 'content' | 'full' }>`\n position: fixed;\n top: 0;\n left: ${({ isOpen }) => (isOpen ? '50%' : '0px')};\n height: 100vh;\n width: 100vw;\n max-width: ${({ clampWidth }) =>\n clampWidth === 'content' ? spacings.wrapper : spacings.wrapperLarge}px;\n pointer-events: none;\n\n z-index: 102;\n\n transform: translate(${({ isOpen }) => (isOpen ? '-50%' : '-100%')}, 0px);\n\n transition: transform 0.4s ease-in-out, left 0.4s ease-in-out;\n will-change: transform;\n`;\n\nconst Flyout = styled.div<{ isOpen?: boolean }>`\n display: flex;\n flex-direction: column;\n visibility: visible;\n\n position: relative;\n width: 100%;\n height: 100%;\n background-color: ${({ theme }) => color(theme).elementBg.light};\n\n pointer-events: ${({ isOpen }) => (isOpen ? 'all' : 'none')};\n\n /** Animation to disable keyboard tabbing if flyout is closed */\n animation: ${({ isOpen }) => !isOpen && 'hideAnim 0s ease-in 2s forwards'};\n\n @media ${mq.medium} {\n width: 384px;\n }\n\n @media ${mq.large} {\n width: 460px;\n }\n\n &:before {\n content: '';\n position: absolute;\n top: 0;\n left: 2px;\n height: 100%;\n width: 40vw;\n background-color: ${({ theme }) => color(theme).elementBg.light};\n z-index: -1;\n\n transform: translateX(-100%);\n }\n\n @keyframes hideAnim {\n to {\n visibility: hidden;\n }\n }\n`;\n\nexport const getMenuHeaderHeights = (\n theme: DefaultTheme,\n size?: NavBarSize\n): [number, number] => {\n const heights =\n size === 'large'\n ? global(theme).navigation.menu.headerHeight.large\n : global(theme).navigation.menu.headerHeight.small;\n\n // if second value is not defined use first array index value for both\n return [\n clampValue(heights[0], 0),\n clampValue(heights?.[1] === undefined ? heights[0] : heights[1], 0),\n ];\n};\n\nexport const hasMenuHeader = (theme: DefaultTheme) => {\n const largeHeights = getMenuHeaderHeights(theme, 'large');\n const smallHeights = getMenuHeaderHeights(theme, 'small');\n\n return (\n largeHeights[0] > 0 ||\n largeHeights[1] > 0 ||\n smallHeights[0] > 0 ||\n smallHeights[1] > 0\n );\n};\n\nconst Header = styled.div<{ navBarSize?: NavBarSize }>`\n flex: 0 0\n ${({ theme, navBarSize }) =>\n getMenuHeaderHeights(theme, navBarSize)[0]}px;\n height: ${({ theme, navBarSize }) =>\n getMenuHeaderHeights(theme, navBarSize)[0]}px;\n\n @media ${mq.semilarge} {\n height: ${({ theme, navBarSize }) =>\n getMenuHeaderHeights(theme, navBarSize)[1]}px;\n flex: 0 0\n ${({ theme, navBarSize }) =>\n getMenuHeaderHeights(theme, navBarSize)[1]}px;\n }\n`;\n\nconst ScrollContainer = styled.div`\n display: block;\n max-height: 100%;\n min-height: 0;\n`;\n\nconst ScrollArea = styled.div`\n display: block;\n width: 100vw;\n max-height: 100%;\n overflow: auto;\n -ms-overflow-style: none; /* for Internet Explorer, Edge */\n scrollbar-width: none; /* for Firefox */\n overflow-y: scroll;\n\n &::-webkit-scrollbar {\n display: none; /* for Chrome, Safari, and Opera */\n }\n\n & > *:last-child {\n margin-bottom: 120px;\n }\n\n @media ${mq.medium} {\n max-width: 100%;\n }\n`;\n\n//#region NAVIGATION\n//#region NAVIGATION.Containers\nconst NavView = styled.nav``;\n\nconst Navigation: FC<{ children?: React.ReactNode }> = ({ children }) => {\n return <NavView aria-label=\"menu\">{children}</NavView>;\n};\n\nconst NavList = styled.ul<{ hasNonFeaturedItems?: boolean }>`\n margin: 0;\n padding: 0;\n list-style: none;\n margin: ${spacings.nudge * 2}px 0;\n\n border-bottom: ${({ hasNonFeaturedItems, theme }) =>\n hasNonFeaturedItems && `solid 2px ${color(theme).elementBg.medium}`};\n`;\n\n// #endregion\n// #region NAVIGATION.NavItem\nconst NavItemView = styled.li<{ isActive?: boolean }>`\n flex: 0 0 80px;\n\n height: 100%;\n background-color: ${({ theme, isActive }) =>\n isActive\n ? color(theme).elementBg.medium\n : color(theme).elementBg.light};\n\n transition: background-color 0.2s ease-in-out;\n\n li + &:not([data-featured='true']) {\n border-top: solid 2px ${({ theme }) => color(theme).elementBg.medium};\n }\n\n li[data-featured='true'] + &:not([data-featured='true']) {\n margin-top: ${spacings.spacer}px;\n }\n\n &:not([data-featured='true']):first-child {\n border-top: solid 2px ${({ theme }) => color(theme).elementBg.medium};\n }\n\n @media ${mq.semilarge} {\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background-color: ${({ theme }) => color(theme).elementBg.medium};\n }\n }\n`;\n\nconst NavItemContent = styled.span<{\n isCurrent?: boolean;\n isFeatured?: boolean;\n}>`\n display: flex;\n align-items: center;\n position: relative;\n min-height: 80px;\n\n padding: 0 ${spacings.nudge * 2}px;\n\n ${({ isFeatured }) => navigationStyle(isFeatured ? 'featured' : 'main')}\n color: ${({ theme, isFeatured }) =>\n isFeatured\n ? font(theme).navigation.featured.color\n : font(theme).navigation.main.color};\n text-decoration: ${({ isCurrent }) => (isCurrent ? 'underline' : 'none')};\n`;\n\nconst NavItemIcon = styled.span`\n display: flex;\n align-items: center;\n width: 48px;\n max-width: 48px;\n\n * {\n width: 100%;\n max-width: 48px;\n max-height: 80px;\n }\n`;\n\nconst NavItemLabel = styled.span`\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:not(:first-child) {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst NavItemCollapse = styled.span`\n display: block;\n margin-left: auto;\n padding-left: ${spacings.nudge * 3}px;\n`;\n\nconst NavItemCollapseIcon = styled(AngleRight)<{ isCollapsed?: boolean }>`\n transform: ${({ isCollapsed }) => !isCollapsed && 'rotate(90deg)'};\n\n transition: transform 0.2s ease-in-out;\n\n @media ${mq.semilarge} {\n transform: rotate(0deg);\n }\n`;\n\nconst NavItemLink = styled(Link)`\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n &:focus {\n outline: solid 2px\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n`;\n\nconst NavItemButton = styled.button`\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n background: none;\n border: none;\n border-bottom: solid 2px ${({ theme }) => color(theme).elementBg.light};\n width: 100%;\n cursor: pointer;\n outline: none;\n border-radius: 0px;\n\n &:focus {\n outline: solid 2px ${({ theme }) => color(theme).primary.default};\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n\n @media ${mq.semilarge} {\n border-bottom: none;\n }\n`;\n\nconst SubNavList = styled.ul<{ isActive?: boolean; isIndented?: boolean }>`\n display: ${({ isActive }) => !isActive && 'none'};\n position: relative;\n margin: 0;\n padding: 0;\n padding-left: ${({ isIndented }) =>\n isIndented ? 48 + spacings.nudge * 4 : spacings.nudge * 2}px;\n padding-right: ${spacings.nudge * 2}px;\n list-style: none;\n\n max-height: 100%;\n overflow: auto;\n -ms-overflow-style: none; /* for Internet Explorer, Edge */\n scrollbar-width: none; /* for Firefox */\n overflow-y: scroll;\n\n &::-webkit-scrollbar {\n display: none; /* for Chrome, Safari, and Opera */\n }\n\n background-color: ${({ theme }) => color(theme).elementBg.medium};\n\n @media ${mq.semilarge} {\n position: absolute;\n top: 0;\n left: calc(100% - 1px);\n width: 100vw;\n height: 100%;\n max-width: 384px;\n padding-left: ${spacings.nudge * 3}px;\n }\n`;\n\nconst NavigationItem = forwardRef<\n HTMLLIElement,\n {\n isCurrent?: boolean;\n isActive?: boolean;\n isFeatured?: boolean;\n label?: string;\n link?: LinkProps;\n icon?: React.ReactNode;\n\n subNavTitle?: string;\n\n navBarSize?: NavBarSize;\n onItemClick?: () => void;\n collapseIcon?: (props: { isCollapsed?: boolean }) => React.ReactNode;\n canFocus?: boolean;\n children?: React.ReactNode;\n }\n>(\n (\n {\n isCurrent,\n isActive,\n isFeatured,\n label,\n link,\n icon,\n subNavTitle,\n navBarSize,\n onItemClick,\n collapseIcon,\n canFocus,\n children,\n },\n ref\n ) => {\n const hasSubItems = !!children && React.Children.count(children) > 0;\n\n return (\n <NavItemView\n ref={ref}\n isActive={isActive}\n data-featured={isFeatured}\n >\n <NavItemContent isCurrent={isCurrent} isFeatured={isFeatured}>\n {icon && <NavItemIcon>{icon}</NavItemIcon>}\n {label && <NavItemLabel>{label}</NavItemLabel>}\n {hasSubItems && (\n <NavItemCollapse>\n {collapseIcon ? (\n collapseIcon({\n isCollapsed: !isActive,\n })\n ) : (\n <NavItemCollapseIcon\n ariaHidden\n isCollapsed={!isActive}\n />\n )}\n </NavItemCollapse>\n )}\n {!hasSubItems && link?.href && (\n <NavItemLink\n {...link}\n ariaLabel={label}\n tabIndex={!canFocus ? -1 : undefined}\n />\n )}\n {hasSubItems && (\n <React.Fragment>\n <NavItemButton\n aria-label={label}\n aria-expanded={isActive}\n onClick={onItemClick}\n tabIndex={!canFocus ? -1 : undefined}\n />\n </React.Fragment>\n )}\n </NavItemContent>\n {hasSubItems && (\n <SubNavList isActive={isActive} isIndented={!!icon}>\n {link?.href && (\n <MenuNav.SubItem\n key=\"overview\"\n link={link}\n label={subNavTitle || 'Overview'}\n navBarSize={navBarSize}\n canFocus={canFocus}\n />\n )}\n {children}\n </SubNavList>\n )}\n </NavItemView>\n );\n }\n);\n\nNavigationItem.displayName = 'NavigationItem';\n\n//#endregion NAVIGATION.NavItem\n//#region NAVIGATION.SubNavItem\nconst SubNavItem = styled.li<{ navBarSize?: NavBarSize }>`\n display: flex;\n align-items: center;\n list-style: none;\n margin: 0;\n padding: 0;\n height: 56px;\n\n ${navigationStyle('main')}\n color: ${({ theme }) => font(theme).navigation.sub.color};\n\n @media ${mq.semilarge} {\n &:first-child {\n margin-top: ${({ theme, navBarSize }) =>\n getMenuHeaderHeights(theme, navBarSize)[1] +\n spacings.nudge * 2}px;\n }\n\n &:last-child {\n margin-bottom: ${spacings.spacer}px;\n }\n }\n`;\n\nconst SubNavLink = styled(Link)<{ isCurrent?: boolean }>`\n /* width: 100%; */\n padding: ${spacings.nudge}px 0;\n outline-color: ${({ theme }) => color(theme).primary.default};\n vertical-align: middle;\n\n ${navigationStyle('sub')}\n color: ${({ theme }) => font(theme).navigation.sub.color};\n text-decoration: ${({ isCurrent }) => (isCurrent ? 'underline' : 'none')};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n & > * {\n margin: 2px;\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus > * {\n outline: dashed 1px\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n outline-offset: 1px;\n }\n\n &:focus:not(:focus-visible) > * {\n outline: none;\n }\n`;\n\nconst NavigationSubItem = forwardRef<\n HTMLLIElement,\n {\n isCurrent?: boolean;\n label: string;\n link?: LinkProps;\n navBarSize?: NavBarSize;\n canFocus?: boolean;\n }\n>(({ isCurrent, label, link, navBarSize, canFocus }, ref) => {\n return (\n <SubNavItem ref={ref} navBarSize={navBarSize}>\n <SubNavLink\n tabIndex={!canFocus ? -1 : undefined}\n isCurrent={isCurrent}\n {...link}\n >\n <span>{label}</span>\n </SubNavLink>\n </SubNavItem>\n );\n});\n\nNavigationSubItem.displayName = 'NavigationSubItem';\n//#endregion\n//#region NAVIGATION.SecondaryNavigation\nconst SecondaryNavList = styled.ul`\n display: block;\n list-style: none;\n padding: 0 ${spacings.nudge * 2}px;\n margin: ${spacings.spacer}px 0;\n\n li {\n display: flex;\n margin: 0;\n padding: 0;\n }\n`;\n\nconst SecondaryNavLink = styled(Link)<{ isCurrent?: boolean }>`\n display: inline-block;\n padding: ${spacings.nudge * 0.5}px 0;\n outline-color: ${({ theme }) => color(theme).primary.default};\n vertical-align: middle;\n\n ${navigationStyle('secondary')}\n color: ${({ theme }) => font(theme).navigation.secondary.color};\n text-decoration: ${({ isCurrent }) => (isCurrent ? 'underline' : 'none')};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:focus {\n outline: dashed 2px\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n outline-offset: 1px;\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n`;\n\nconst SecondaryNavigation: FC<{\n items?: NavItem[];\n canFocus?: boolean;\n}> = ({ items, canFocus }) => {\n return items && items.length > 0 ? (\n <SecondaryNavList>\n {items\n ?.filter((n) => n.link?.href)\n .map((item, i) => (\n <li key={i}>\n <SecondaryNavLink\n isCurrent={item.isCurrent}\n href={item.link?.href}\n tabIndex={!canFocus ? -1 : undefined}\n >\n {item.label}\n </SecondaryNavLink>\n </li>\n ))}\n </SecondaryNavList>\n ) : null;\n};\n//#endregion\n\nconst MenuNav = {\n View: Navigation,\n List: NavList,\n Item: NavigationItem,\n SubItem: NavigationSubItem,\n SubList: SecondaryNavigation,\n};\n// #endregion\n\nexport interface FlyoutMenuProps {\n type: 'flyout';\n collapseIcon?: (props: { isCollapsed?: boolean }) => React.ReactNode;\n subNavTitle?: string;\n backdropFilter?: string;\n}\n\nconst menuFilter = (item: NavItem) =>\n !item.hideFromMenu && item.uid && item.label;\n\nconst MenuFlyout: FC<MenuBaseProps & FlyoutMenuProps> = ({\n isOpen,\n clampWidth,\n isIndexPage,\n mainNavigation,\n subNavigation,\n navBarSize,\n subNavTitle,\n backdropFilter = 'grayscale(1)',\n header,\n footer,\n onClose,\n collapseIcon,\n navItemsHeader,\n}) => {\n const { theme } = useLibTheme();\n const flyoutRef = useRef<HTMLDivElement>(null);\n const hasHeader = useMemo(() => hasMenuHeader(theme), [theme]);\n\n const mainList = useMemo(() => {\n const featured = mainNavigation?.filter((n) => n.isFeatured) || [];\n const main = mainNavigation?.filter((n) => !n.isFeatured) || [];\n\n return [...featured, ...main].filter(menuFilter);\n }, [mainNavigation]);\n\n const hasNonFeaturedItems = useMemo(() => {\n const main = mainNavigation?.filter((n) => !n.isFeatured) || [];\n return main && main.length > 0;\n }, [mainNavigation]);\n\n const subList = useMemo(() => {\n return subNavigation?.filter(menuFilter);\n }, [subNavigation]);\n\n const [activeItems, setActiveItems] = useState<string[]>(() => {\n const initial = getCurrentNavItem(mainList, true)?.root?.uid;\n return initial ? [initial] : [''];\n });\n const [currentNavEl, setCurrentNavEl] =\n useState<HTMLLIElement | null>(null);\n const [currentSubNavEl, setCurrentSubNavEl] =\n useState<HTMLLIElement | null>(null);\n\n const toggleActiveItem = (uid: string) => {\n setActiveItems((prev) => (prev.includes(uid) ? [] : [uid]));\n\n // if multiple nav items can be selected:\n // setActiveItems((prev) => {\n // const copy = [...prev];\n // const activeIndex = activeItems.indexOf(index);\n // if (activeIndex !== -1) {\n // copy.splice(activeIndex, 1);\n // } else {\n // copy.push(index);\n // }\n // return copy;\n // });\n };\n\n // check if flyout lost focus\n useEffect(() => {\n const handleFocus = (ev: FocusEvent) => {\n if (!flyoutRef.current || !ev.target) return;\n const isFlyoutChild = flyoutRef.current.contains(\n ev.target as Element\n );\n\n if (!isFlyoutChild) onClose && onClose();\n };\n\n if (isOpen) {\n document.addEventListener('focusin', handleFocus);\n } else {\n document.removeEventListener('focusin', handleFocus);\n }\n\n return () => {\n document.removeEventListener('focusin', handleFocus);\n };\n }, [isOpen, onClose]);\n\n // scroll to current nav items\n useEffect(() => {\n try {\n currentNavEl?.scrollIntoView({\n block: 'center',\n inline: 'start',\n });\n currentSubNavEl?.scrollIntoView({\n block: 'center',\n inline: 'start',\n });\n } catch (e) {\n // console.log(e);\n }\n }, [currentNavEl, currentSubNavEl]);\n\n return (\n <React.Fragment>\n <Backdrop\n isOpen={isOpen}\n filter={backdropFilter}\n onClick={onClose}\n />\n <Stage isOpen={isOpen} clampWidth={clampWidth}>\n <Flyout ref={flyoutRef} isOpen={isOpen}>\n {hasHeader && (\n <Header navBarSize={navBarSize}>\n {header ? (\n header({\n isOpen,\n mainNavigation: mainList,\n subNavigation: subList,\n isIndexPage,\n navBarSize,\n })\n ) : (\n <MenuHeader\n menuStates={{\n isOpen,\n mainNavigation,\n subNavigation,\n isIndexPage,\n navBarSize,\n }}\n />\n )}\n </Header>\n )}\n\n <ScrollContainer>\n <ScrollArea>\n {navItemsHeader &&\n navItemsHeader({\n isOpen,\n mainNavigation: mainList,\n subNavigation: subList,\n isIndexPage,\n navBarSize,\n })}\n <MenuNav.View>\n {isValidArray(mainList, false) && (\n <MenuNav.List\n id=\"mainMenu\"\n hasNonFeaturedItems={\n hasNonFeaturedItems\n }\n >\n {mainList.map((item) => {\n const isActive =\n activeItems.includes(item.uid);\n const hasCurrentSubItem =\n item?.subItems\n ? item.subItems.findIndex(\n (n) => n.isCurrent\n ) >= 0\n : false;\n\n const isCurrent =\n item.isCurrent ||\n hasCurrentSubItem;\n\n return (\n <MenuNav.Item\n key={item.uid}\n {...item}\n ref={\n isCurrent\n ? setCurrentNavEl\n : undefined\n }\n isActive={isActive}\n isCurrent={isCurrent}\n subNavTitle={subNavTitle}\n navBarSize={navBarSize}\n collapseIcon={collapseIcon}\n onItemClick={() =>\n toggleActiveItem(\n item.uid\n )\n }\n canFocus={isOpen}\n >\n {item?.subItems\n ?.filter(menuFilter)\n .map((subItem) => (\n <MenuNav.SubItem\n key={\n subItem.uid\n }\n ref={\n subItem.isCurrent\n ? setCurrentSubNavEl\n : undefined\n }\n {...subItem}\n navBarSize={\n navBarSize\n }\n canFocus={\n isOpen\n }\n />\n ))}\n </MenuNav.Item>\n );\n })}\n </MenuNav.List>\n )}\n {isValidArray(subList, false) && (\n <MenuNav.SubList\n items={subList}\n canFocus={isOpen}\n />\n )}\n </MenuNav.View>\n {footer\n ? footer({\n isOpen,\n mainNavigation: mainList,\n subNavigation: subList,\n isIndexPage,\n })\n : ''}\n </ScrollArea>\n </ScrollContainer>\n </Flyout>\n </Stage>\n </React.Fragment>\n );\n};\n\nexport default MenuFlyout;\n","import React, { FC } from 'react';\n\nimport { LinkProps } from 'components/typography/Link';\n\n/** Menu Variations */\nimport MenuFlyout, { FlyoutMenuProps } from './variations/MenuFlyout';\nimport { /* MenuLarge,*/ LargeMenuProps } from './variations/MenuLarge';\nimport { NavBarSize } from '../NavBar';\n\n/** Navigation item types */\n\nexport interface NavItem {\n uid: string;\n label: string;\n link?: LinkProps;\n isCurrent?: boolean;\n subItems?: NavItem[];\n isFeatured?: boolean;\n icon?: React.ReactNode;\n hideFromMenu?: boolean;\n}\n\n/** Menu base type */\nexport interface MenuStates {\n isOpen?: boolean;\n isIndexPage?: boolean;\n mainNavigation?: Array<NavItem>;\n subNavigation?: Array<NavItem>;\n navBarSize?: NavBarSize;\n}\n\nexport interface MenuBaseProps {\n isOpen?: boolean;\n clampWidth?: 'content' | 'full';\n isIndexPage?: boolean;\n mainNavigation?: Array<NavItem>;\n subNavigation?: Array<NavItem>;\n navBarSize?: NavBarSize;\n header?: (props: MenuStates) => React.ReactNode;\n footer?: (props: MenuStates) => React.ReactNode;\n navItemsHeader?: (menuStates: MenuStates) => React.ReactNode;\n onClose?: () => void;\n}\n\nexport type MenuTypeProps = FlyoutMenuProps | LargeMenuProps;\n\nconst Menu: FC<MenuBaseProps & { typeSettings?: MenuTypeProps }> = ({\n isOpen,\n clampWidth,\n isIndexPage,\n mainNavigation,\n subNavigation,\n navBarSize,\n header,\n footer,\n navItemsHeader,\n onClose,\n typeSettings,\n}) => {\n if (!typeSettings) {\n typeSettings = { type: 'flyout' };\n }\n\n switch (typeSettings?.type) {\n // case 'large': {\n // return (\n // <MenuLarge\n // isOpen={isOpen}\n // clampWidth={clampWidth}\n // isIndexPage={isIndexPage}\n // mainNavigation={mainNavigation}\n // subNavigation={subNavigation}\n // navBarSize={navBarSize}\n // header={header}\n // footer={footer}\n // navItemsHeader={navItemsHeader}\n // onClose={onClose}\n // {...(typeSettings as LargeMenuProps)}\n // />\n // );\n // }\n\n default:\n case 'flyout': {\n return (\n <MenuFlyout\n isOpen={isOpen}\n clampWidth={clampWidth}\n isIndexPage={isIndexPage}\n mainNavigation={mainNavigation}\n subNavigation={subNavigation}\n navBarSize={navBarSize}\n header={header}\n footer={footer}\n onClose={onClose}\n navItemsHeader={navItemsHeader}\n {...(typeSettings as FlyoutMenuProps)}\n />\n );\n }\n }\n};\n\nexport default Menu;\n","import React, { FC, useMemo } from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\nimport {\n spacings,\n mq,\n getGlobals as global,\n getColors as color,\n} from 'utils/styles';\nimport { clampValue } from 'utils/clamp';\nimport { useLibTheme } from 'utils/LibThemeProvider';\nimport * as Skeletons from 'components/sections/navigation/skeletons/index';\n\nexport const getTopHeights = (\n theme: DefaultTheme,\n size?: NavBarSize\n): [number, number] => {\n const heights =\n size === 'large'\n ? global(theme).navigation.navBar.topHeight.large\n : global(theme).navigation.navBar.topHeight.small;\n\n // if second value is not defined use first array index value for both\n return [\n clampValue(heights[0], 0),\n clampValue(heights?.[1] === undefined ? heights[0] : heights[1], 0),\n ];\n};\n\nexport const hasTopBar = (theme: DefaultTheme) => {\n const largeHeights = getTopHeights(theme, 'large');\n const smallHeights = getTopHeights(theme, 'small');\n\n return (\n largeHeights[0] > 0 ||\n largeHeights[1] > 0 ||\n smallHeights[0] > 0 ||\n smallHeights[1] > 0\n );\n};\n\nexport const getMainHeights = (\n theme: DefaultTheme,\n size?: NavBarSize\n): [number, number] => {\n const heights =\n size === 'large'\n ? global(theme).navigation.navBar.mainHeight.large\n : global(theme).navigation.navBar.mainHeight.small;\n\n // if second value is not defined use first array index value for both\n return [\n clampValue(heights[0], 0),\n clampValue(heights?.[1] === undefined ? heights[0] : heights[1], 0),\n ];\n};\n\nexport const getBottomHeights = (\n theme: DefaultTheme,\n size?: NavBarSize\n): [number, number] => {\n const heights =\n size === 'large'\n ? global(theme).navigation.navBar.bottomHeight.large\n : global(theme).navigation.navBar.bottomHeight.small;\n\n // if second value is not defined use first array index value for both\n return [\n clampValue(heights[0], 0),\n clampValue(heights?.[1] === undefined ? heights[0] : heights[1], 0),\n ];\n};\n\nexport const hasBottomBar = (theme: DefaultTheme) => {\n const largeHeights = getBottomHeights(theme, 'large');\n const smallHeights = getBottomHeights(theme, 'small');\n\n return (\n largeHeights[0] > 0 ||\n largeHeights[1] > 0 ||\n smallHeights[0] > 0 ||\n smallHeights[1] > 0\n );\n};\n\nexport type ExcludeType = 'top' | 'main' | 'bottom';\n\n/**\n * Get full height of navigation bar\n * @param theme Theme object\n * @param size Navigation bar size\n * @param exclude Exclude parts of the navbar for height calculation\n * @returns [mobile, desktop]\n */\nexport const getFullHeight = (\n theme: DefaultTheme,\n size?: NavBarSize,\n exclude?: ExcludeType[]\n): [number, number] => {\n const includeTop = exclude ? exclude.indexOf('top') === -1 : true;\n const includeMain = exclude ? exclude.indexOf('main') === -1 : true;\n const includeBottom = exclude ? exclude.indexOf('bottom') === -1 : true;\n\n const topHeights = includeTop ? getTopHeights(theme, size) : [0, 0];\n const mainHeights = includeMain ? getMainHeights(theme, size) : [0, 0];\n const bottomHeights = includeBottom\n ? getBottomHeights(theme, size)\n : [0, 0];\n\n // calculate mobile navbar height\n const mobile = topHeights[0] + mainHeights[0] + bottomHeights[0];\n\n // calculate desktop navbar height\n const desktop = topHeights[1] + mainHeights[1] + bottomHeights[1];\n\n return [mobile, desktop];\n};\n\nconst View = styled.div<{\n isOpen?: boolean;\n isSticky?: boolean;\n isAnimated?: boolean;\n bgGradient?: string;\n}>`\n position: ${({ isSticky }) => (isSticky ? 'fixed' : 'absolute')};\n top: 0;\n left: 0;\n right: 0;\n\n transform: ${({ isOpen }) => !isOpen && 'translate3d(0, -101%, 0)'};\n\n margin: 0 auto;\n /* max-width: ${spacings.wrapperLarge}px; */\n z-index: 100;\n\n ${({ isAnimated }) => `transition: ${\n isAnimated ? 'transform 0.3s ease-in-out, ' : ''\n }height 0.3s ease-in-out,\n opacity 0.3s ease-in-out;`}\n will-change: transform;\n\n &:before {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: ${({ bgGradient }) => bgGradient || ''};\n margin: 0 auto;\n max-width: ${spacings.wrapperLarge}px;\n z-index: -1;\n }\n\n // print version\n @media print {\n position: relative;\n }\n`;\n\nconst Header = styled.div<{ size?: NavBarSize; background?: string }>`\n opacity: ${({ theme, size }) =>\n getTopHeights(theme, size)[0] > 0 ? 1 : 0};\n pointer-events: ${({ theme, size }) =>\n getTopHeights(theme, size)[0] > 0 ? 'all' : 'none'};\n overflow: ${({ theme, size }) =>\n getTopHeights(theme, size)[0] <= 0 && 'hidden'};\n\n background-color: ${({ background }) => background};\n color: ${({ theme, background }) =>\n background ? color(theme).text.default : color(theme).text.inverted};\n\n transition: background-color 0.2s ease-in-out;\n\n @media ${mq.semilarge} {\n opacity: ${({ theme, size }) =>\n getTopHeights(theme, size)[1] > 0 ? 1 : 0};\n pointer-events: ${({ theme, size }) =>\n getTopHeights(theme, size)[1] > 0 ? 'all' : 'none'};\n overflow: ${({ theme, size }) =>\n getTopHeights(theme, size)[1] <= 0 && 'hidden'};\n }\n`;\n\nconst Main = styled.div<{ background?: string }>`\n background-color: ${({ background }) => background};\n color: ${({ theme, background }) =>\n background ? color(theme).text.default : color(theme).text.inverted};\n\n transition: background-color 0.2s ease-in-out;\n`;\n\nconst Footer = styled.div<{ size?: NavBarSize; background?: string }>`\n opacity: ${({ theme, size }) =>\n getBottomHeights(theme, size)[0] > 0 ? 1 : 0};\n pointer-events: ${({ theme, size }) =>\n getBottomHeights(theme, size)[0] > 0 ? 'all' : 'none'};\n overflow: ${({ theme, size }) =>\n getBottomHeights(theme, size)[0] <= 0 && 'hidden'};\n\n background-color: ${({ background }) => background};\n color: ${({ theme, background }) =>\n background ? color(theme).text.default : color(theme).text.inverted};\n\n opacity: ${({ theme, size }) =>\n getBottomHeights(theme, size)[0] > 0 ? 1 : 0};\n\n transition: background-color 0.2s ease-in-out, opacity 0.2s ease-in-out;\n\n @media ${mq.semilarge} {\n opacity: ${({ theme, size }) =>\n getBottomHeights(theme, size)[1] > 0 ? 1 : 0};\n pointer-events: ${({ theme, size }) =>\n getBottomHeights(theme, size)[1] > 0 ? 'all' : 'none'};\n overflow: ${({ theme, size }) =>\n getBottomHeights(theme, size)[1] <= 0 && 'hidden'};\n\n opacity: ${({ theme, size }) =>\n getBottomHeights(theme, size)[1] > 0 ? 1 : 0};\n }\n`;\n\nconst TopContent = styled.div<{ size?: NavBarSize; clamp?: boolean }>`\n display: flex;\n justify-content: flex-end;\n position: relative;\n max-width: ${({ clamp }) =>\n clamp ? spacings.wrapper : spacings.wrapperLarge}px;\n padding: ${({ size, theme }) =>\n getTopHeights(theme, size)[0] > 0 && `0 ${spacings.nudge * 2}px`};\n margin: 0 auto;\n\n height: ${({ theme, size }) => getTopHeights(theme, size)[0]}px;\n\n transition: height 0.2s ease-in-out, padding-top 0.2s ease-in-out,\n padding-bottom 0.2s ease-in-out;\n will-change: height;\n\n @media ${mq.semilarge} {\n height: ${({ theme, size }) => getTopHeights(theme, size)[1]}px;\n padding: ${({ size, theme }) =>\n getTopHeights(theme, size)[1] > 0 && `0 ${spacings.nudge * 2}px`};\n }\n`;\n\nconst Content = styled.div<{ size?: NavBarSize; clamp?: boolean }>`\n display: flex;\n position: relative;\n max-width: ${({ clamp }) =>\n clamp ? spacings.wrapper : spacings.wrapperLarge}px;\n padding: 0 ${spacings.nudge * 2}px;\n margin: 0 auto;\n\n height: ${({ theme, size }) => getMainHeights(theme, size)[0]}px;\n\n transition: height 0.2s ease-in-out;\n will-change: height;\n\n @media ${mq.semilarge} {\n height: ${({ theme, size }) =>\n getMainHeights(theme, size)[1] || getMainHeights(theme, size)[0]}px;\n }\n`;\n\nconst BottomContent = styled.div<{ size?: NavBarSize; clamp?: boolean }>`\n display: flex;\n justify-content: flex-start;\n position: relative;\n max-width: ${({ clamp }) =>\n clamp ? spacings.wrapper : spacings.wrapperLarge}px;\n padding: 0 ${spacings.nudge * 2}px;\n margin: 0 auto;\n\n height: ${({ theme, size }) => getBottomHeights(theme, size)[0]}px;\n transition: 0.2s height ease-in-out;\n\n @media ${mq.semilarge} {\n height: ${({ theme, size }) => getBottomHeights(theme, size)[1]}px;\n padding: 0 ${spacings.nudge * 2}px;\n }\n`;\n\nconst BarSpacer = styled.div<{ hasHeader?: boolean; hasFooter?: boolean }>`\n height: ${({ theme, hasHeader, hasFooter }) => {\n const excludes: ExcludeType[] = [];\n if (!hasHeader) excludes.push('top');\n if (!hasFooter) excludes.push('bottom');\n\n return getFullHeight(theme, 'large', excludes)[0];\n }}px;\n\n @media ${mq.semilarge} {\n height: ${({ theme, hasHeader, hasFooter }) => {\n const excludes: ExcludeType[] = [];\n if (!hasHeader) excludes.push('top');\n if (!hasFooter) excludes.push('bottom');\n\n return getFullHeight(theme, 'large', excludes)[1];\n }}px;\n }\n\n // print version\n @media print {\n display: none;\n }\n`;\n\nexport type NavBarSize = 'small' | 'large';\n\nexport interface BarStates {\n size: NavBarSize;\n isOpen?: boolean;\n isSticky?: boolean;\n pageFlow?: PageFlow;\n}\n\nexport type PageFlow = 'overContent' | 'beforeContent';\n\nexport interface NavBarProps {\n size?: NavBarSize;\n isOpen?: boolean;\n isSticky?: boolean;\n isAnimated?: boolean;\n clampWidth?: 'content' | 'full';\n pageFlow?: PageFlow;\n\n topBg?: string;\n mainBg?: string;\n bottomBg?: string;\n /** Custom background value for NavBar with pageFlow === overContent and large size */\n onContentBg?: string;\n\n topBar?: ((props: BarStates) => React.ReactNode) | null;\n mainBar?: ((props: BarStates) => React.ReactNode) | null;\n bottomBar?: ((props: BarStates) => React.ReactNode) | null;\n}\n\nconst NavBar: FC<\n NavBarProps & {\n className?: string;\n }\n> = ({\n size = 'large',\n isOpen = false,\n isSticky = false,\n isAnimated = false,\n clampWidth = false,\n pageFlow = 'beforeContent',\n topBg,\n mainBg,\n bottomBg,\n onContentBg,\n topBar,\n mainBar,\n bottomBar,\n className,\n}) => {\n const { theme, colors } = useLibTheme();\n const clampContent = clampWidth === 'content';\n const isOverContent = pageFlow === 'overContent';\n\n const hasHeader = useMemo(\n () => hasTopBar(theme) && topBar !== null,\n [theme, topBar]\n );\n const hasFooter = useMemo(\n () => hasBottomBar(theme) && bottomBar !== null,\n [bottomBar, theme]\n );\n const showBg = useMemo(\n () => size === 'small' || (size === 'large' && !isOverContent),\n [isOverContent, size]\n );\n\n const topBackground = topBg || colors.elementBg.light;\n const mainBackground = mainBg || colors.elementBg.light;\n const bottomBackground = bottomBg || colors.elementBg.light;\n const onContentBackground =\n onContentBg ||\n 'linear-gradient(180deg,rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.2) 40%, rgba(0,0,0,0) 100%)';\n\n const topBarContent = useMemo(\n () =>\n topBar &&\n topBar({\n size,\n isOpen,\n isSticky,\n pageFlow,\n }),\n [isOpen, isSticky, pageFlow, size, topBar]\n );\n\n const mainBarContent = useMemo(\n () =>\n mainBar &&\n mainBar({\n size,\n isOpen,\n isSticky,\n pageFlow,\n }),\n [isOpen, isSticky, mainBar, pageFlow, size]\n );\n\n const bottomBarContent = useMemo(\n () =>\n bottomBar &&\n bottomBar({\n size,\n isOpen,\n isSticky,\n pageFlow,\n }),\n [bottomBar, isOpen, isSticky, pageFlow, size]\n );\n\n return (\n <React.Fragment>\n {pageFlow === 'beforeContent' && (\n <BarSpacer hasHeader={hasHeader} hasFooter={hasFooter} />\n )}\n <View\n isOpen={isOpen}\n isSticky={isSticky}\n isAnimated={isAnimated}\n bgGradient={\n size === 'large' && isOverContent\n ? onContentBackground\n : undefined\n }\n className={className}\n >\n {hasHeader && (\n <Header\n size={size}\n background={showBg ? topBackground : undefined}\n >\n <TopContent size={size} clamp={clampContent}>\n {topBarContent ? (\n topBarContent\n ) : (\n <Skeletons.Column isInverted>\n Top Nav\n </Skeletons.Column>\n )}\n </TopContent>\n </Header>\n )}\n {mainBar !== null && (\n <Main background={showBg ? mainBackground : undefined}>\n <Content size={size} clamp={clampContent}>\n {mainBarContent ? (\n mainBarContent\n ) : (\n <React.Fragment>\n <Skeletons.Column\n takeSpace\n isInverted={\n size === 'large' && isOverContent\n }\n >\n Left\n </Skeletons.Column>\n <Skeletons.Column\n isInverted={\n size === 'large' && isOverContent\n }\n >\n Center\n </Skeletons.Column>\n <Skeletons.Column\n takeSpace\n isInverted={\n size === 'large' && isOverContent\n }\n >\n Right\n </Skeletons.Column>\n </React.Fragment>\n )}\n </Content>\n </Main>\n )}\n {hasFooter && (\n <Footer\n size={size}\n background={showBg ? bottomBackground : undefined}\n >\n <BottomContent size={size} clamp={clampContent}>\n {bottomBarContent ? bottomBarContent : 'bottom bar'}\n </BottomContent>\n </Footer>\n )}\n </View>\n </React.Fragment>\n );\n};\n\nexport default NavBar;\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { DefaultTheme } from 'styled-components';\nimport {\n LibThemeProvider,\n ThemeMods,\n useLibTheme,\n} from 'utils/LibThemeProvider';\nimport { useMediaQueries } from 'utils/useMediaQuery';\nimport { useMenuKeyboard } from 'utils/menuHooks';\nimport usePageScroll, { PageScrollDirection } from 'utils/usePageScroll';\nimport Menu, { MenuStates, MenuTypeProps, NavItem } from './menu/Menu';\n\nimport NavBar, {\n getFullHeight,\n NavBarSize,\n BarStates,\n hasTopBar,\n hasBottomBar,\n ExcludeType,\n PageFlow,\n} from './NavBar';\n\n/**\n * Checks which navbar parts are defined in navigation.\n * With this values you can calculate each height by the Navbar component functions\n * @param ident Identification string from Navigation component\n * @returns\n */\nexport const getNavbarState = (ident: string) => {\n const navbarIdent = ident || '';\n\n let pageFlow: PageFlow | undefined = undefined;\n switch (true) {\n case navbarIdent.search('overContent') !== -1: {\n pageFlow = 'overContent';\n break;\n }\n\n case navbarIdent.search('beforeContent') !== -1: {\n pageFlow = 'beforeContent';\n break;\n }\n }\n\n return {\n hasTop: navbarIdent.search('top') !== -1,\n hasMain: navbarIdent.search('main') !== -1,\n hasBottom: navbarIdent.search('bottom') !== -1,\n pageFlow: pageFlow,\n isStickable: navbarIdent.search('stickable') !== -1,\n };\n};\n\n/** Generate Navbar identifier */\nexport const generateNavbarIdent = (props: {\n hasTop?: boolean;\n hasMain?: boolean;\n hasBottom?: boolean;\n pageFlow?: PageFlow;\n isStickable?: boolean;\n}): string => {\n if (!props) return '';\n const stateArray: string[] = [];\n\n if (props.hasTop) stateArray.push('top');\n if (props.hasMain) stateArray.push('main');\n if (props.hasBottom) stateArray.push('bottom');\n if (props.isStickable) stateArray.push('stickable');\n if (props.pageFlow) stateArray.push(props.pageFlow);\n\n return stateArray.join('-');\n};\n\n/**\n * Get full navbar heights\n * @param theme Theme object\n * @param ident Indentification string from Navigation component\n * @returns\n */\nexport const getFullNavbarHeights = (theme: DefaultTheme, ident: string) => {\n const { hasTop, hasBottom } = getNavbarState(ident || '');\n const excludes: ExcludeType[] = [];\n if (!hasTop) excludes.push('top');\n if (!hasBottom) excludes.push('bottom');\n\n return {\n large: getFullHeight(theme, 'large', excludes),\n small: getFullHeight(theme, 'small', excludes),\n };\n};\n\nexport interface NavBarStates extends BarStates {\n isMenuOpen?: boolean;\n openMenu?: () => void;\n closeMenu?: () => void;\n mainNavigation?: Array<NavItem>;\n subNavigation?: Array<NavItem>;\n isOnPageTop?: boolean;\n isInTopOffset?: boolean;\n}\n\nexport interface NavMenuStates extends MenuStates {\n isMenuOpen?: boolean;\n openMenu?: () => void;\n closeMenu?: () => void;\n navBarSize?: NavBarSize;\n}\n\nexport interface NavBarSettings {\n isStickable?: boolean;\n isCollapsible?: boolean;\n pageFlow?: 'overContent' | 'beforeContent';\n\n topBg?: string;\n mainBg?: string;\n bottomBg?: string;\n /** Custom background value for NavBar with pageFlow === overContent and large size */\n onContentBg?: string;\n\n topBar?: ((props: NavBarStates) => React.ReactNode) | null;\n mainBar?: ((props: NavBarStates) => React.ReactNode) | null;\n bottomBar?: ((props: NavBarStates) => React.ReactNode) | null;\n theme?: ThemeMods;\n}\n\nexport interface MenuSettings {\n isIndexPage?: boolean;\n mainNavigation?: Array<NavItem>;\n subNavigation?: Array<NavItem>;\n header?: (props: NavMenuStates) => React.ReactNode;\n footer?: (props: NavMenuStates) => React.ReactNode;\n navItemsHeader?: (props: NavMenuStates) => React.ReactNode;\n typeSettings: MenuTypeProps;\n\n theme?: ThemeMods;\n}\n\nexport interface NavigationProps {\n navBar?: NavBarSettings;\n menu?: MenuSettings;\n clampWidth?: 'content' | 'full';\n}\n\nconst Navigation: FC<NavigationProps> = ({\n clampWidth = 'content',\n navBar,\n menu,\n}) => {\n const isStickable = navBar?.isStickable || false;\n const isCollapsible = navBar?.isCollapsible || false;\n\n const mediaQueries = useMediaQueries();\n\n const { theme } = useLibTheme();\n\n /** Navigation bar states */\n const [isNavBarSticky, setIsNavBarSticky] = useState<boolean>(false);\n const [isNavBarOpen, setNavBarOpen] = useState<boolean>(true);\n const { isTop, scrollDirection, isInOffset, leftOffsetFromTop } =\n usePageScroll({\n directionOffset: { up: 40, down: 40 },\n offset: getFullHeight(theme, 'large')[\n mediaQueries.semilarge ? 1 : 0\n ],\n });\n\n const navbarSize = useMemo<NavBarSize>(() => {\n return isTop || isInOffset || !isStickable ? 'large' : 'small';\n }, [isTop, isInOffset, isStickable]);\n\n useEffect(() => {\n if (isStickable && isCollapsible) {\n setNavBarOpen(\n isTop ||\n isInOffset ||\n scrollDirection === PageScrollDirection.UP\n );\n }\n }, [scrollDirection, isTop, isStickable, isInOffset, isCollapsible]);\n\n useEffect(() => {\n if (!isStickable) return;\n if (\n !isCollapsible ||\n (leftOffsetFromTop && scrollDirection === PageScrollDirection.UP)\n ) {\n setIsNavBarSticky(true);\n } else if (isTop) {\n setIsNavBarSticky(false);\n }\n }, [isCollapsible, isStickable, isTop, leftOffsetFromTop, scrollDirection]);\n\n /** Menu states */\n const { isMenuOpen, setIsMenuOpen, setRoot } = useMenuKeyboard(false, {});\n\n const openMenu = () => {\n setIsMenuOpen(true);\n };\n\n const closeMenu = () => {\n setIsMenuOpen(false);\n };\n\n useEffect(() => {\n document.body.style.overflow = isMenuOpen ? 'hidden' : 'visible';\n }, [isMenuOpen]);\n\n const topBar = navBar?.topBar\n ? (props: BarStates) => {\n if (!navBar?.topBar) return '';\n return navBar.topBar({\n ...props,\n isMenuOpen,\n openMenu,\n closeMenu,\n mainNavigation: menu?.mainNavigation,\n subNavigation: menu?.subNavigation,\n isOnPageTop: isTop,\n isInTopOffset: isInOffset,\n });\n }\n : navBar?.topBar;\n\n const mainBar = navBar?.mainBar\n ? (props: BarStates) => {\n if (!navBar?.mainBar) return '';\n return navBar.mainBar({\n ...props,\n isMenuOpen,\n openMenu,\n closeMenu,\n mainNavigation: menu?.mainNavigation,\n subNavigation: menu?.subNavigation,\n isOnPageTop: isTop,\n isInTopOffset: isInOffset,\n });\n }\n : navBar?.mainBar;\n\n const bottomBar = navBar?.bottomBar\n ? (props: BarStates) => {\n if (!navBar?.bottomBar) return '';\n return navBar.bottomBar({\n ...props,\n isMenuOpen,\n openMenu,\n closeMenu,\n mainNavigation: menu?.mainNavigation,\n subNavigation: menu?.subNavigation,\n isOnPageTop: isTop,\n isInTopOffset: isInOffset,\n });\n }\n : navBar?.bottomBar;\n\n const menuHeader = menu?.header\n ? (props: MenuStates) => {\n if (!menu?.header) return '';\n return menu?.header({\n ...props,\n openMenu,\n closeMenu,\n mainNavigation: menu?.mainNavigation,\n subNavigation: menu?.subNavigation,\n navBarSize: navbarSize,\n });\n }\n : undefined;\n\n const menuFooter = menu?.footer\n ? (props: MenuStates) => {\n if (!menu?.footer) return '';\n return menu?.footer({\n ...props,\n openMenu,\n closeMenu,\n mainNavigation: menu?.mainNavigation,\n subNavigation: menu?.subNavigation,\n navBarSize: navbarSize,\n });\n }\n : undefined;\n\n const menuNavItemsHeader = menu?.navItemsHeader\n ? (props: MenuStates) => {\n if (!menu?.navItemsHeader) return '';\n return menu?.navItemsHeader({\n ...props,\n openMenu,\n closeMenu,\n mainNavigation: menu?.mainNavigation,\n subNavigation: menu?.subNavigation,\n navBarSize: navbarSize,\n });\n }\n : undefined;\n\n /**\n * Get ident string that shows if each navbar section is defined.\n * @returns Navbar ident string\n */\n const getNavBarIdent = (theme: DefaultTheme) => {\n const ident = generateNavbarIdent({\n hasTop: topBar !== null && hasTopBar(theme),\n hasMain: mainBar !== null,\n hasBottom: bottomBar !== null && hasBottomBar(theme),\n isStickable: navBar?.isStickable,\n pageFlow: navBar?.pageFlow,\n });\n\n return ident;\n };\n\n return (\n <header ref={setRoot} data-navbar-ident={getNavBarIdent(theme)}>\n <LibThemeProvider theme={navBar?.theme}>\n <NavBar\n isOpen={isNavBarOpen}\n isSticky={isNavBarSticky}\n isAnimated\n size={navbarSize}\n clampWidth={clampWidth}\n pageFlow={navBar?.pageFlow}\n topBar={topBar}\n mainBar={mainBar}\n bottomBar={bottomBar}\n topBg={navBar?.topBg}\n mainBg={navBar?.mainBg}\n bottomBg={navBar?.bottomBg}\n onContentBg={navBar?.onContentBg}\n />\n </LibThemeProvider>\n <LibThemeProvider theme={menu?.theme}>\n <Menu\n isOpen={isMenuOpen}\n clampWidth={clampWidth}\n isIndexPage={menu?.isIndexPage}\n mainNavigation={menu?.mainNavigation}\n subNavigation={menu?.subNavigation}\n typeSettings={menu?.typeSettings}\n navBarSize={navbarSize}\n header={menuHeader}\n footer={menuFooter}\n navItemsHeader={menuNavItemsHeader}\n onClose={closeMenu}\n />\n </LibThemeProvider>\n </header>\n );\n};\n\nexport default Navigation;\n","import { useEffect, useRef, useState } from 'react';\n\ninterface Settings {\n openMenuIdent: string;\n closeMenuIdent: string;\n}\n\n/**\n * Hooks in to menu state to control it with keyboard inputs\n * @param initialMenuState\n * @param settings\n * @returns\n */\nexport const useMenuKeyboard = (\n initialMenuState: boolean,\n settings: Partial<Settings>\n) => {\n const [isMenuOpen, setIsMenuOpen] = useState(initialMenuState);\n const prevMenuState = useRef<boolean>(false);\n\n const [root, setRoot] = useState<HTMLElement | null>(null);\n const openBtnRef = useRef<HTMLButtonElement | null>(null);\n const closeBtnRef = useRef<HTMLButtonElement | null>(null);\n\n const defaultSettings: Settings = {\n openMenuIdent: 'button[aria-label=\"open menu\"]',\n closeMenuIdent: 'button[aria-label=\"close menu\"]',\n ...settings,\n };\n\n useEffect(() => {\n if (!root) return;\n\n // setting up menu toggle button refs\n if (!openBtnRef.current) {\n openBtnRef.current = root.querySelector(\n defaultSettings.openMenuIdent\n );\n }\n if (!closeBtnRef.current) {\n closeBtnRef.current = root.querySelector(\n defaultSettings.closeMenuIdent\n );\n }\n }, [\n defaultSettings.closeMenuIdent,\n defaultSettings.openMenuIdent,\n isMenuOpen,\n root,\n ]);\n\n useEffect(() => {\n const handleKeyDown = (ev: KeyboardEvent) => {\n if (ev.key === 'Escape' && isMenuOpen) {\n setIsMenuOpen(false);\n }\n };\n\n // settings focus if menu is open\n if (isMenuOpen) {\n closeBtnRef?.current?.focus();\n } else if (prevMenuState.current) {\n openBtnRef?.current?.focus();\n }\n\n prevMenuState.current = isMenuOpen;\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [isMenuOpen]);\n\n return {\n setRoot,\n isMenuOpen,\n setIsMenuOpen,\n };\n};\n"],"names":["PageScrollDirection","View","styled","nav","withConfig","displayName","componentId","templateObject_1","__makeTemplateObject","List","ul","templateObject_2","mq","semilarge","spacings","nudge","ListItem","li","templateObject_3","_a","isCurrent","NavLink","Link","templateObject_4","showOnMobile","clamp","copyStyle","theme","isInverted","color","text","inverted","default","showOnDesktop","NavLabel","span","templateObject_5","Seperator","Copy","templateObject_6","BackIconContainer","templateObject_7","BreadcrumbItem","label","link","children","href","React","__assign","Column","div","takeSpace","undefined","vAlign","getColors","primary","Logo","Image","Toggle","button","invertedHover","hover","BarMenuToggle","_b","isExpanded","onClick","className","createElement","isActive","Header","LanguageCol","MenuHeader","customToggle","menuStates","langs","action","Fragment","Skeletons","closeMenu","Cross","ariaHidden","isValidArray","LanguageSwitcher","navigationStyle","type","css","font","navigation","family","weight","style","withRange","getFonts","size","lineHeight","letterSpacing","textTransform","textDecoration","Backdrop","isOpen","filter","Stage","clampWidth","wrapper","wrapperLarge","Flyout","elementBg","light","medium","large","getMenuHeaderHeights","heights","global","getGlobals","menu","headerHeight","small","clampValue","navBarSize","ScrollContainer","ScrollArea","NavView","templateObject_8","NavList","templateObject_9","hasNonFeaturedItems","concat","NavItemView","templateObject_10","spacer","NavItemContent","templateObject_11","isFeatured","featured","main","NavItemIcon","templateObject_12","NavItemLabel","NavItemCollapse","NavItemCollapseIcon","AngleRight","templateObject_15","isCollapsed","NavItemLink","templateObject_16","NavItemButton","templateObject_17","SubNavList","templateObject_18","isIndented","NavigationItem","forwardRef","ref","icon","subNavTitle","onItemClick","collapseIcon","canFocus","hasSubItems","Children","count","ariaLabel","tabIndex","MenuNav","SubItem","key","SubNavItem","sub","SubNavLink","templateObject_20","NavigationSubItem","SecondaryNavList","templateObject_21","SecondaryNavLink","templateObject_22","secondary","Item","SubList","items","length","n","map","item","i","menuFilter","hideFromMenu","uid","MenuFlyout","isIndexPage","mainNavigation","subNavigation","backdropFilter","header","footer","onClose","navItemsHeader","useLibTheme","flyoutRef","useRef","hasHeader","useMemo","hasMenuHeader","largeHeights","smallHeights","mainList","__spreadArray","subList","_c","useState","initial","getCurrentNavItem","root","activeItems","setActiveItems","_d","currentNavEl","setCurrentNavEl","_e","currentSubNavEl","setCurrentSubNavEl","useEffect","handleFocus","ev","current","target","contains","document","addEventListener","removeEventListener","scrollIntoView","block","inline","e","id","includes","hasCurrentSubItem","subItems","findIndex","prev","subItem","Menu","typeSettings","getTopHeights","navBar","topHeight","hasTopBar","getMainHeights","mainHeight","getBottomHeights","bottomHeight","hasBottomBar","getFullHeight","exclude","includeTop","indexOf","includeMain","includeBottom","topHeights","mainHeights","bottomHeights","isSticky","isAnimated","bgGradient","background","Main","Footer","TopContent","Content","BottomContent","BarSpacer","hasFooter","excludes","push","NavBar","_f","_g","pageFlow","topBg","mainBg","bottomBg","onContentBg","topBar","mainBar","bottomBar","_h","colors","clampContent","isOverContent","showBg","topBackground","mainBackground","bottomBackground","onContentBackground","topBarContent","mainBarContent","bottomBarContent","getNavbarState","ident","navbarIdent","search","hasTop","hasMain","hasBottom","isStickable","generateNavbarIdent","props","stateArray","join","rootLink","rootLabel","navItems","seperator","back","currentNavPath","getCurrentNavPath","rootItem","AngleLeft","logo","coverSpace","ratios","showPlaceholder","navLinks","isCollapsible","mediaQueries","useMediaQueries","isNavBarSticky","setIsNavBarSticky","isNavBarOpen","setNavBarOpen","settings","isTop","setIsTop","isInOffset","setIsInOffset","leftOffsetFromTop","setLeftOffsetFromTop","lastScrollPos","pxSinceLastSwitch","DOWN","scrollDirection","setScrollDirection","directionDownOffset","directionOffset","down","directionUpOffset","up","scrollState","useScrollThrottle","resizeThrottleTimeout","window","scrollY","offset","onLeftOffset","call","diff","absAccPx","Math","abs","UP","usePageScroll","navbarSize","initialMenuState","isMenuOpen","setIsMenuOpen","prevMenuState","setRoot","openBtnRef","closeBtnRef","defaultSettings","openMenuIdent","closeMenuIdent","querySelector","handleKeyDown","focus","useMenuKeyboard","openMenu","body","overflow","isOnPageTop","isInTopOffset","menuHeader","menuFooter","menuNavItemsHeader","getNavBarIdent","LibThemeProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Navigation-6c5d9dee.js","sources":["../src/utils/usePageScroll.ts","../src/components/sections/navigation/skeletons/BarBreadCrumbs.tsx","../src/components/sections/navigation/skeletons/BarColumn.tsx","../src/components/sections/navigation/skeletons/BarLogo.tsx","../src/components/sections/navigation/skeletons/BarMenuToggle.tsx","../src/components/sections/navigation/skeletons/BarNavList.tsx","../src/components/sections/navigation/partials/MenuHeader.tsx","../src/components/sections/navigation/menu/variations/MenuFlyout.tsx","../src/components/sections/navigation/menu/Menu.tsx","../src/components/sections/navigation/NavBar.tsx","../src/components/sections/navigation/Navigation.tsx","../src/utils/menuHooks.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport useScrollThrottle from './useScrollThrottle';\n\nexport enum PageScrollDirection {\n UP,\n DOWN,\n}\n\ninterface ScrollSettings {\n /** Direction state change delay in pixels */\n directionOffset?: {\n up?: number;\n down?: number;\n };\n /** Set top offset area */\n offset?: number;\n /** On leave top offset callback */\n onLeftOffset?: (dir: PageScrollDirection) => void;\n /** Throttle timeout of resize event. Default: 200ms */\n resizeThrottleTimeout?: number;\n}\n\nconst usePageScroll = (settings?: ScrollSettings) => {\n const [isTop, setIsTop] = useState<boolean>(true);\n const [isInOffset, setIsInOffset] = useState<boolean>(true);\n const [leftOffsetFromTop, setLeftOffsetFromTop] = useState<boolean>(false);\n\n const lastScrollPos = useRef<number>(0);\n const pxSinceLastSwitch = useRef<number>(0);\n\n const [scrollDirection, setScrollDirection] = useState<PageScrollDirection>(\n PageScrollDirection.DOWN\n );\n\n const directionDownOffset = settings?.directionOffset?.down || 0;\n const directionUpOffset = settings?.directionOffset?.up || 0;\n\n // Throttle scroll event for perfomance\n const scrollState = useScrollThrottle(\n settings?.resizeThrottleTimeout !== undefined\n ? settings.resizeThrottleTimeout\n : 200\n );\n\n useEffect(() => {\n if (!scrollState) return;\n if (typeof window === 'undefined') return;\n\n const scrollY = scrollState.scrollY;\n const isTop = scrollY <= 0;\n\n // check if page is scroll on top\n setIsTop(isTop);\n\n // check offset\n if (settings?.offset && scrollY <= settings.offset) {\n setIsInOffset(true);\n } else {\n setIsInOffset((prev) => {\n if (prev) {\n settings?.onLeftOffset?.(scrollDirection);\n setLeftOffsetFromTop(true);\n }\n return false;\n });\n }\n\n /**\n * calculate direction changes\n */\n\n // get difference between current and last scrollY position\n const diff = scrollY - lastScrollPos.current;\n // get accumulated pixels since last direction change\n let absAccPx = Math.abs(pxSinceLastSwitch.current);\n\n // check if direction changed. if not iterate accumulated pixels value\n if (diff < 0 && pxSinceLastSwitch.current > 0) {\n pxSinceLastSwitch.current = 0;\n } else if (diff > 0 && pxSinceLastSwitch.current < 0) {\n pxSinceLastSwitch.current = 0;\n } else {\n pxSinceLastSwitch.current += diff;\n }\n\n // set current accumulated value\n absAccPx = Math.abs(pxSinceLastSwitch.current);\n\n // set direction states\n if (isTop) {\n setScrollDirection(PageScrollDirection.DOWN);\n } else if (diff < 0 && absAccPx >= directionUpOffset) {\n setScrollDirection(PageScrollDirection.UP);\n } else if (diff > 0 && absAccPx >= directionDownOffset) {\n setScrollDirection(PageScrollDirection.DOWN);\n }\n\n // save last scroll position\n lastScrollPos.current = scrollY;\n }, [\n directionDownOffset,\n directionUpOffset,\n scrollDirection,\n scrollState,\n settings,\n ]);\n\n useEffect(() => {\n // reset left offset flag on top\n if (isTop) setLeftOffsetFromTop(false);\n }, [isTop]);\n\n return {\n isTop,\n scrollDirection,\n isInOffset,\n leftOffsetFromTop,\n };\n};\n\nexport default usePageScroll;\n","import React, { FC, useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport { NavItem } from '../menu/Menu';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport { spacings, getColors as color, mq } from 'utils/styles';\nimport Copy, { copyStyle } from 'components/typography/Copy';\nimport AngleLeft from 'components/base/icons/AngleLeft';\nimport { getCurrentNavPath } from 'utils/navigation';\n\nconst View = styled.nav`\n min-width: 0;\n`;\n\nconst List = styled.ul`\n display: flex;\n align-items: center;\n list-style: none;\n margin: 0;\n padding: 0;\n min-width: inherit;\n\n & > li:first-child {\n flex: 1 0 auto;\n }\n\n @media ${mq.semilarge} {\n & > li + li {\n margin-left: ${spacings.nudge}px;\n }\n }\n`;\n\nconst ListItem = styled.li<{ isCurrent?: boolean }>`\n display: ${({ isCurrent }) => (isCurrent ? 'flex' : 'none')};\n min-width: inherit;\n\n @media ${mq.semilarge} {\n display: flex;\n\n & > * + * {\n margin-left: ${spacings.nudge}px;\n }\n }\n`;\n\nconst NavLink = styled(Link)<{\n isInverted?: boolean;\n clamp?: boolean;\n showOnMobile?: boolean;\n showOnDesktop?: boolean;\n}>`\n display: ${({ showOnMobile }) => (showOnMobile ? 'inline-flex' : 'none')};\n align-items: center;\n max-width: ${({ clamp }) => clamp && '120px'};\n\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n ${copyStyle('copy', 'small')}\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.default};\n text-decoration: underline;\n\n & > * {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge}px;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).text.inverted\n : color(theme).text.default};\n }\n }\n\n @media ${mq.semilarge} {\n display: ${({ showOnDesktop }) =>\n showOnDesktop ? 'inline-block' : 'none'};\n }\n`;\n\nconst NavLabel = styled.span<{\n isInverted?: boolean;\n clamp?: boolean;\n showOnMobile?: boolean;\n showOnDesktop?: boolean;\n}>`\n display: ${({ showOnMobile }) => (showOnMobile ? 'inline-flex' : 'none')};\n align-items: center;\n max-width: ${({ clamp }) => clamp && '120px'};\n\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n ${copyStyle('copy', 'small')}\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.default};\n text-decoration: none;\n\n & > * {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n & > * + * {\n margin-left: ${spacings.nudge}px;\n }\n\n @media ${mq.semilarge} {\n display: ${({ showOnDesktop }) =>\n showOnDesktop ? 'inline-block' : 'none'};\n }\n`;\n\nconst Seperator = styled(Copy)`\n display: none;\n\n transition: color 0.2s ease-in-out;\n\n @media ${mq.semilarge} {\n display: inline-block;\n }\n`;\n\nconst BackIconContainer = styled.span`\n flex: 0 0 auto;\n`;\n\nconst BreadcrumbItem: FC<\n NavItem & {\n isInverted?: boolean;\n showOnMobile?: boolean;\n showOnDesktop?: boolean;\n children?: React.ReactNode;\n }\n> = ({ isInverted, label, link, showOnMobile, showOnDesktop, children }) => {\n if (link?.href) {\n return (\n <NavLink\n {...link}\n isInverted={isInverted}\n showOnMobile={showOnMobile}\n showOnDesktop={showOnDesktop}\n >\n {children || label}\n </NavLink>\n );\n } else {\n return (\n <NavLabel\n isInverted={isInverted}\n showOnMobile={showOnMobile}\n showOnDesktop={showOnDesktop}\n >\n {children || label}\n </NavLabel>\n );\n }\n};\n\nconst BarBreadcrumbs: FC<{\n isInverted?: boolean;\n rootLink?: LinkProps;\n rootLabel?: string;\n navItems?: Array<NavItem>;\n seperator?: (props: { isInverted?: boolean }) => React.ReactNode;\n back?: (props: { isInverted?: boolean }) => React.ReactNode;\n className?: string;\n}> = ({\n isInverted = false,\n rootLink,\n rootLabel,\n navItems,\n seperator,\n back,\n className,\n}) => {\n const currentNavPath = useMemo(() => {\n return getCurrentNavPath(\n navItems,\n rootLink?.href ? [rootLink?.href] : []\n );\n }, [navItems, rootLink?.href]);\n\n const rootItem: NavItem = {\n uid: 'root',\n label: rootLabel || 'Home',\n link: rootLink,\n };\n\n return (\n <View aria-label=\"breadcrumbs\" className={className}>\n <List>\n <ListItem>\n <BreadcrumbItem\n showOnDesktop\n isInverted={isInverted}\n {...rootItem}\n />\n </ListItem>\n\n {currentNavPath?.map((item, i) => {\n const isCurrent = i === currentNavPath.length - 1;\n const prev = i - 1 >= 0 ? currentNavPath[i - 1] : rootItem;\n\n return (\n <ListItem key={i} isCurrent={isCurrent}>\n <Seperator size=\"small\" isInverted={isInverted}>\n {seperator ? seperator({ isInverted }) : '/'}\n </Seperator>\n {isCurrent ? (\n <>\n {prev && (\n <BreadcrumbItem\n {...prev}\n showOnMobile\n isInverted={isInverted}\n >\n <BackIconContainer>\n {back ? (\n back({ isInverted })\n ) : (\n <AngleLeft />\n )}\n </BackIconContainer>\n <span>{prev.label}</span>\n </BreadcrumbItem>\n )}\n <BreadcrumbItem\n {...item}\n link={{}}\n showOnDesktop\n isInverted={isInverted}\n />\n </>\n ) : (\n <BreadcrumbItem\n {...item}\n showOnDesktop\n isInverted={isInverted}\n />\n )}\n </ListItem>\n );\n })}\n </List>\n </View>\n );\n};\n\nexport default BarBreadcrumbs;\n","import styled from 'styled-components';\nimport { spacings, getColors as color } from 'utils/styles';\n\nconst Column = styled.div<{\n isInverted?: boolean;\n takeSpace?: boolean;\n vAlign?: 'top' | 'center' | 'bottom';\n}>`\n flex: ${({ takeSpace }) => (takeSpace ? 1 : undefined)};\n\n padding: ${spacings.nudge}px 0;\n min-width: -webkit-min-content;\n align-self: ${({ vAlign }) => {\n switch (vAlign) {\n case 'center':\n return 'center';\n\n case 'bottom':\n return 'flex-end';\n\n case 'top':\n return 'flex-start';\n\n default:\n return undefined;\n }\n }};\n\n text-align: center;\n color: ${({ theme, isInverted }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.inverted};\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n }\n\n &:not(:first-child):not(:last-child) {\n margin: 0 ${spacings.nudge * 2}px;\n }\n`;\n\nexport default Column;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport Link, { LinkProps } from 'components/typography/Link';\nimport Image, { ImageProps } from 'components/blocks/Image';\nimport { getColors } from 'utils/styles';\n\nconst View = styled(Link)`\n display: block;\n display: flex;\n justify-content: center;\n min-width: 60px;\n max-width: 100%;\n max-height: 100%;\n\n &:focus {\n outline: 2px solid ${({ theme }) => getColors(theme).primary.default};\n outline-offset: 1px;\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n`;\n\nconst Logo = styled(Image)`\n width: auto;\n height: 100%;\n object-fit: contain;\n`;\n\nexport interface Logo {\n src?: string;\n alt?: string;\n}\n\nconst BarLogo: FC<{\n link?: Omit<LinkProps, 'coverSpace' | 'ratios'>;\n logo?: ImageProps;\n className?: string;\n}> = ({ link, logo, className }) => {\n return (\n <View {...link} className={className}>\n {logo?.small && (\n <Logo\n {...logo}\n coverSpace={false}\n ratios={undefined}\n showPlaceholder={false}\n />\n )}\n </View>\n );\n};\n\nexport default BarLogo;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport { getColors as color, spacings } from 'utils/styles';\n\nconst Toggle = styled.button<{ isInverted?: boolean }>`\n background: transparent;\n border: none;\n color: ${({ isInverted, theme }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.default};\n\n padding: ${spacings.nudge}px;\n margin-left: -${spacings.nudge}px;\n outline: none;\n\n cursor: pointer;\n\n transition: color 0.2s ease-in-out;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n }\n }\n\n &:focus > * {\n outline: dotted 2px\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n outline-offset: 4px;\n\n color: ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.invertedHover\n : color(theme).primary.hover};\n }\n\n &:focus:not(:focus-visible) > * {\n outline: none;\n }\n`;\n\nconst BarMenuToggle: FC<{\n isInverted?: boolean;\n isExpanded?: boolean;\n onClick?: (ev?: React.SyntheticEvent<HTMLButtonElement>) => void;\n className?: string;\n children?: React.ReactNode;\n}> = ({ isInverted, isExpanded = false, onClick, children, className }) => {\n return (\n <Toggle\n isInverted={isInverted}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? 'close menu' : 'open menu'}\n aria-haspopup=\"true\"\n aria-controls=\"mainMenu\"\n onClick={onClick}\n className={className}\n >\n {children}\n </Toggle>\n );\n};\n\nexport default BarMenuToggle;\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\n\nimport Link from 'components/typography/Link';\nimport { spacings, getColors as color } from 'utils/styles';\nimport { copyStyle } from 'components/typography/Copy';\nimport { NavItem } from '../menu/Menu';\n\nconst View = styled.nav<{ isInverted?: boolean }>`\n display: inline-flex;\n align-items: center;\n\n margin: 0 -${spacings.nudge}px;\n\n & > * + * {\n &:before {\n content: '';\n display: block;\n position: absolute;\n top: 3px;\n left: 0;\n height: 1em;\n width: 2px;\n background-color: ${({ isInverted, theme }) =>\n isInverted\n ? color(theme).text.inverted\n : color(theme).text.default};\n\n transition: background-color 0.2s ease-in-out;\n }\n }\n`;\n\nconst NavLink = styled(Link)<{ isInverted?: boolean; isActive?: boolean }>`\n display: inline-block;\n position: relative;\n padding: 0 ${spacings.nudge}px;\n\n ${copyStyle('copy', 'medium')}\n font-weight: ${({ isActive }) => isActive && '700'};\n\n color: ${({ isInverted, theme }) =>\n isInverted ? color(theme).text.inverted : color(theme).text.default};\n text-decoration: none;\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n color: ${({ isInverted, theme }) =>\n isInverted\n ? color(theme).text.inverted\n : color(theme).text.default};\n text-decoration: underline;\n }\n }\n`;\n\nconst BarNavList: FC<{\n isInverted?: boolean;\n navLinks?: NavItem[];\n className?: string;\n}> = ({ isInverted, navLinks, className }) => {\n return (\n <View isInverted={isInverted} className={className}>\n {navLinks?.map((item, i) => (\n <NavLink\n key={i}\n {...item.link}\n isInverted={isInverted}\n isActive={item.isCurrent}\n >\n {item.label}\n </NavLink>\n ))}\n </View>\n );\n};\n\nexport default BarNavList;\n","import Cross from 'components/base/icons/Cross';\nimport React, { FC } from 'react';\n\nimport styled from 'styled-components';\nimport { spacings } from 'utils/styles';\nimport { NavMenuStates } from '../Navigation';\nimport * as Skeletons from 'components/sections/navigation/skeletons/index';\nimport LanguageSwitcher, { Language } from 'components/blocks/LanguageSwitcher';\nimport { isValidArray } from 'utils/arrays';\n\nconst Header = styled.div`\n display: flex;\n align-items: center;\n\n padding: 0 ${spacings.nudge * 2}px;\n padding-top: ${spacings.nudge * 5}px;\n`;\n\nconst LanguageCol = styled.div`\n display: block;\n margin-left: ${spacings.nudge * 3}px;\n margin-top: 2px;\n`;\n\nconst MenuHeader: FC<{\n isInverted?: boolean;\n menuStates?: NavMenuStates;\n customToggle?: (props: { isInverted?: boolean }) => React.ReactNode;\n langs?: Language[];\n action?: (\n props: { isInverted?: boolean } & NavMenuStates\n ) => React.ReactNode;\n}> = ({ isInverted, customToggle, menuStates, langs, action }) => {\n return (\n <React.Fragment>\n <Header>\n <Skeletons.MenuToggle\n isInverted={isInverted}\n isExpanded={true}\n onClick={menuStates?.closeMenu}\n >\n {customToggle ? (\n customToggle({ isInverted })\n ) : (\n <Cross ariaHidden={true} />\n )}\n </Skeletons.MenuToggle>\n {isValidArray(langs, false) && (\n <LanguageCol>\n <LanguageSwitcher\n isInverted={isInverted}\n langs={langs}\n />\n </LanguageCol>\n )}\n {action && action({ isInverted, ...menuStates })}\n </Header>\n </React.Fragment>\n );\n};\n\nexport default MenuHeader;\n","import AngleRight from 'components/base/icons/AngleRight';\nimport Link, { LinkProps } from 'components/typography/Link';\nimport React, {\n FC,\n useState,\n useMemo,\n useRef,\n useEffect,\n forwardRef,\n} from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\nimport { isValidArray } from 'utils/arrays';\nimport { clampValue } from 'utils/clamp';\nimport { useLibTheme } from 'utils/LibThemeProvider';\nimport { getCurrentNavItem } from 'utils/navigation';\nimport {\n mq,\n spacings,\n getColors as color,\n getFonts as font,\n getGlobals as global,\n withRange,\n Fonts,\n} from 'utils/styles';\nimport { NavBarSize } from '../../NavBar';\nimport MenuHeader from '../../partials/MenuHeader';\nimport { MenuBaseProps, NavItem } from '../Menu';\nimport { css } from 'styled-components';\n\ntype NavigationFontType = keyof Fonts['navigation'];\n\nconst navigationStyle = (type: NavigationFontType) => css`\n font-family: ${({ theme }) => font(theme).navigation[type].family};\n font-weight: ${({ theme }) => font(theme).navigation[type].weight};\n font-style: ${({ theme }) => font(theme).navigation[type].style};\n ${({ theme }) => withRange(font(theme).navigation[type].size, 'font-size')}\n line-height: ${({ theme }) => font(theme).navigation[type].lineHeight};\n letter-spacing: ${({ theme }) =>\n font(theme).navigation[type].letterSpacing};\n text-transform: ${({ theme }) =>\n font(theme).navigation[type].textTransform};\n text-decoration: ${({ theme }) =>\n font(theme).navigation[type].textDecoration};\n`;\n\nconst Backdrop = styled.div<{ isOpen?: boolean; filter?: string }>`\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background-color: rgba(0, 0, 0, 0.5);\n opacity: ${({ isOpen }) => (isOpen ? 1 : 0)};\n pointer-events: ${({ isOpen }) => (isOpen ? 'all' : 'none')};\n z-index: 101;\n\n transition: opacity 0.3s ease-in-out;\n\n @supports ((-webkit-backdrop-filter: none) or (backdrop-filter: none)) {\n backdrop-filter: ${({ filter }) => filter};\n }\n`;\n\nconst Stage = styled.div<{ isOpen?: boolean; clampWidth?: 'content' | 'full' }>`\n position: fixed;\n top: 0;\n left: ${({ isOpen }) => (isOpen ? '50%' : '0px')};\n height: 100vh;\n width: 100vw;\n max-width: ${({ clampWidth }) =>\n clampWidth === 'content' ? spacings.wrapper : spacings.wrapperLarge}px;\n pointer-events: none;\n\n z-index: 102;\n\n transform: translate(${({ isOpen }) => (isOpen ? '-50%' : '-100%')}, 0px);\n\n transition: transform 0.4s ease-in-out, left 0.4s ease-in-out;\n will-change: transform;\n`;\n\nconst Flyout = styled.div<{ isOpen?: boolean }>`\n display: flex;\n flex-direction: column;\n visibility: visible;\n\n position: relative;\n width: 100%;\n height: 100%;\n background-color: ${({ theme }) => color(theme).elementBg.light};\n\n pointer-events: ${({ isOpen }) => (isOpen ? 'all' : 'none')};\n\n /** Animation to disable keyboard tabbing if flyout is closed */\n animation: ${({ isOpen }) => !isOpen && 'hideAnim 0s ease-in 2s forwards'};\n\n @media ${mq.medium} {\n width: 384px;\n }\n\n @media ${mq.large} {\n width: 460px;\n }\n\n &:before {\n content: '';\n position: absolute;\n top: 0;\n left: 2px;\n height: 100%;\n width: 40vw;\n background-color: ${({ theme }) => color(theme).elementBg.light};\n z-index: -1;\n\n transform: translateX(-100%);\n }\n\n @keyframes hideAnim {\n to {\n visibility: hidden;\n }\n }\n`;\n\nexport const getMenuHeaderHeights = (\n theme: DefaultTheme,\n size?: NavBarSize\n): [number, number] => {\n const heights =\n size === 'large'\n ? global(theme).navigation.menu.headerHeight.large\n : global(theme).navigation.menu.headerHeight.small;\n\n // if second value is not defined use first array index value for both\n return [\n clampValue(heights[0], 0),\n clampValue(heights?.[1] === undefined ? heights[0] : heights[1], 0),\n ];\n};\n\nexport const hasMenuHeader = (theme: DefaultTheme) => {\n const largeHeights = getMenuHeaderHeights(theme, 'large');\n const smallHeights = getMenuHeaderHeights(theme, 'small');\n\n return (\n largeHeights[0] > 0 ||\n largeHeights[1] > 0 ||\n smallHeights[0] > 0 ||\n smallHeights[1] > 0\n );\n};\n\nconst Header = styled.div<{ navBarSize?: NavBarSize }>`\n flex: 0 0\n ${({ theme, navBarSize }) =>\n getMenuHeaderHeights(theme, navBarSize)[0]}px;\n height: ${({ theme, navBarSize }) =>\n getMenuHeaderHeights(theme, navBarSize)[0]}px;\n\n @media ${mq.semilarge} {\n height: ${({ theme, navBarSize }) =>\n getMenuHeaderHeights(theme, navBarSize)[1]}px;\n flex: 0 0\n ${({ theme, navBarSize }) =>\n getMenuHeaderHeights(theme, navBarSize)[1]}px;\n }\n`;\n\nconst ScrollContainer = styled.div`\n display: block;\n max-height: 100%;\n min-height: 0;\n`;\n\nconst ScrollArea = styled.div`\n display: block;\n width: 100vw;\n max-height: 100%;\n overflow: auto;\n -ms-overflow-style: none; /* for Internet Explorer, Edge */\n scrollbar-width: none; /* for Firefox */\n overflow-y: scroll;\n\n &::-webkit-scrollbar {\n display: none; /* for Chrome, Safari, and Opera */\n }\n\n & > *:last-child {\n margin-bottom: 120px;\n }\n\n @media ${mq.medium} {\n max-width: 100%;\n }\n`;\n\n//#region NAVIGATION\n//#region NAVIGATION.Containers\nconst NavView = styled.nav``;\n\nconst Navigation: FC<{ children?: React.ReactNode }> = ({ children }) => {\n return <NavView aria-label=\"menu\">{children}</NavView>;\n};\n\nconst NavList = styled.ul<{ hasNonFeaturedItems?: boolean }>`\n margin: 0;\n padding: 0;\n list-style: none;\n margin: ${spacings.nudge * 2}px 0;\n\n border-bottom: ${({ hasNonFeaturedItems, theme }) =>\n hasNonFeaturedItems && `solid 2px ${color(theme).elementBg.medium}`};\n`;\n\n// #endregion\n// #region NAVIGATION.NavItem\nconst NavItemView = styled.li<{ isActive?: boolean }>`\n flex: 0 0 80px;\n\n height: 100%;\n background-color: ${({ theme, isActive }) =>\n isActive\n ? color(theme).elementBg.medium\n : color(theme).elementBg.light};\n\n transition: background-color 0.2s ease-in-out;\n\n li + &:not([data-featured='true']) {\n border-top: solid 2px ${({ theme }) => color(theme).elementBg.medium};\n }\n\n li[data-featured='true'] + &:not([data-featured='true']) {\n margin-top: ${spacings.spacer}px;\n }\n\n &:not([data-featured='true']):first-child {\n border-top: solid 2px ${({ theme }) => color(theme).elementBg.medium};\n }\n\n @media ${mq.semilarge} {\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n }\n\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background-color: ${({ theme }) => color(theme).elementBg.medium};\n }\n }\n`;\n\nconst NavItemContent = styled.span<{\n isCurrent?: boolean;\n isFeatured?: boolean;\n}>`\n display: flex;\n align-items: center;\n position: relative;\n min-height: 80px;\n\n padding: 0 ${spacings.nudge * 2}px;\n\n ${({ isFeatured }) => navigationStyle(isFeatured ? 'featured' : 'main')}\n color: ${({ theme, isFeatured }) =>\n isFeatured\n ? font(theme).navigation.featured.color\n : font(theme).navigation.main.color};\n text-decoration: ${({ isCurrent }) => (isCurrent ? 'underline' : 'none')};\n`;\n\nconst NavItemIcon = styled.span`\n display: flex;\n align-items: center;\n width: 48px;\n max-width: 48px;\n\n * {\n width: 100%;\n max-width: 48px;\n max-height: 80px;\n }\n`;\n\nconst NavItemLabel = styled.span`\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:not(:first-child) {\n margin-left: ${spacings.nudge * 2}px;\n }\n`;\n\nconst NavItemCollapse = styled.span`\n display: block;\n margin-left: auto;\n padding-left: ${spacings.nudge * 3}px;\n`;\n\nconst NavItemCollapseIcon = styled(AngleRight)<{ isCollapsed?: boolean }>`\n transform: ${({ isCollapsed }) => !isCollapsed && 'rotate(90deg)'};\n\n transition: transform 0.2s ease-in-out;\n\n @media ${mq.semilarge} {\n transform: rotate(0deg);\n }\n`;\n\nconst NavItemLink = styled(Link)`\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n &:focus {\n outline: solid 2px\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n`;\n\nconst NavItemButton = styled.button`\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n background: none;\n border: none;\n border-bottom: solid 2px ${({ theme }) => color(theme).elementBg.light};\n width: 100%;\n cursor: pointer;\n outline: none;\n border-radius: 0px;\n\n &:focus {\n outline: solid 2px ${({ theme }) => color(theme).primary.default};\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n\n @media ${mq.semilarge} {\n border-bottom: none;\n }\n`;\n\nconst SubNavList = styled.ul<{ isActive?: boolean; isIndented?: boolean }>`\n display: ${({ isActive }) => !isActive && 'none'};\n position: relative;\n margin: 0;\n padding: 0;\n padding-left: ${({ isIndented }) =>\n isIndented ? 48 + spacings.nudge * 4 : spacings.nudge * 2}px;\n padding-right: ${spacings.nudge * 2}px;\n list-style: none;\n\n max-height: 100%;\n overflow: auto;\n -ms-overflow-style: none; /* for Internet Explorer, Edge */\n scrollbar-width: none; /* for Firefox */\n overflow-y: scroll;\n\n &::-webkit-scrollbar {\n display: none; /* for Chrome, Safari, and Opera */\n }\n\n background-color: ${({ theme }) => color(theme).elementBg.medium};\n\n @media ${mq.semilarge} {\n position: absolute;\n top: 0;\n left: calc(100% - 1px);\n width: 100vw;\n height: 100%;\n max-width: 384px;\n padding-left: ${spacings.nudge * 3}px;\n }\n`;\n\nconst NavigationItem = forwardRef<\n HTMLLIElement,\n {\n isCurrent?: boolean;\n isActive?: boolean;\n isFeatured?: boolean;\n label?: string;\n link?: LinkProps;\n icon?: React.ReactNode;\n\n subNavTitle?: string;\n\n navBarSize?: NavBarSize;\n onItemClick?: () => void;\n collapseIcon?: (props: { isCollapsed?: boolean }) => React.ReactNode;\n canFocus?: boolean;\n children?: React.ReactNode;\n }\n>(\n (\n {\n isCurrent,\n isActive,\n isFeatured,\n label,\n link,\n icon,\n subNavTitle,\n navBarSize,\n onItemClick,\n collapseIcon,\n canFocus,\n children,\n },\n ref\n ) => {\n const hasSubItems = !!children && React.Children.count(children) > 0;\n\n return (\n <NavItemView\n ref={ref}\n isActive={isActive}\n data-featured={isFeatured}\n >\n <NavItemContent isCurrent={isCurrent} isFeatured={isFeatured}>\n {icon && <NavItemIcon>{icon}</NavItemIcon>}\n {label && <NavItemLabel>{label}</NavItemLabel>}\n {hasSubItems && (\n <NavItemCollapse>\n {collapseIcon ? (\n collapseIcon({\n isCollapsed: !isActive,\n })\n ) : (\n <NavItemCollapseIcon\n ariaHidden\n isCollapsed={!isActive}\n />\n )}\n </NavItemCollapse>\n )}\n {!hasSubItems && link?.href && (\n <NavItemLink\n {...link}\n ariaLabel={label}\n tabIndex={!canFocus ? -1 : undefined}\n />\n )}\n {hasSubItems && (\n <React.Fragment>\n <NavItemButton\n aria-label={label}\n aria-expanded={isActive}\n onClick={onItemClick}\n tabIndex={!canFocus ? -1 : undefined}\n />\n </React.Fragment>\n )}\n </NavItemContent>\n {hasSubItems && (\n <SubNavList isActive={isActive} isIndented={!!icon}>\n {link?.href && (\n <MenuNav.SubItem\n key=\"overview\"\n link={link}\n label={subNavTitle || 'Overview'}\n navBarSize={navBarSize}\n canFocus={canFocus}\n />\n )}\n {children}\n </SubNavList>\n )}\n </NavItemView>\n );\n }\n);\n\nNavigationItem.displayName = 'NavigationItem';\n\n//#endregion NAVIGATION.NavItem\n//#region NAVIGATION.SubNavItem\nconst SubNavItem = styled.li<{ navBarSize?: NavBarSize }>`\n display: flex;\n align-items: center;\n list-style: none;\n margin: 0;\n padding: 0;\n height: 56px;\n\n ${navigationStyle('main')}\n color: ${({ theme }) => font(theme).navigation.sub.color};\n\n @media ${mq.semilarge} {\n &:first-child {\n margin-top: ${({ theme, navBarSize }) =>\n getMenuHeaderHeights(theme, navBarSize)[1] +\n spacings.nudge * 2}px;\n }\n\n &:last-child {\n margin-bottom: ${spacings.spacer}px;\n }\n }\n`;\n\nconst SubNavLink = styled(Link)<{ isCurrent?: boolean }>`\n /* width: 100%; */\n padding: ${spacings.nudge}px 0;\n outline-color: ${({ theme }) => color(theme).primary.default};\n vertical-align: middle;\n\n ${navigationStyle('sub')}\n color: ${({ theme }) => font(theme).navigation.sub.color};\n text-decoration: ${({ isCurrent }) => (isCurrent ? 'underline' : 'none')};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n & > * {\n margin: 2px;\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus > * {\n outline: dashed 1px\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n outline-offset: 1px;\n }\n\n &:focus:not(:focus-visible) > * {\n outline: none;\n }\n`;\n\nconst NavigationSubItem = forwardRef<\n HTMLLIElement,\n {\n isCurrent?: boolean;\n label: string;\n link?: LinkProps;\n navBarSize?: NavBarSize;\n canFocus?: boolean;\n }\n>(({ isCurrent, label, link, navBarSize, canFocus }, ref) => {\n return (\n <SubNavItem ref={ref} navBarSize={navBarSize}>\n <SubNavLink\n tabIndex={!canFocus ? -1 : undefined}\n isCurrent={isCurrent}\n {...link}\n >\n <span>{label}</span>\n </SubNavLink>\n </SubNavItem>\n );\n});\n\nNavigationSubItem.displayName = 'NavigationSubItem';\n//#endregion\n//#region NAVIGATION.SecondaryNavigation\nconst SecondaryNavList = styled.ul`\n display: block;\n list-style: none;\n padding: 0 ${spacings.nudge * 2}px;\n margin: ${spacings.spacer}px 0;\n\n li {\n display: flex;\n margin: 0;\n padding: 0;\n }\n`;\n\nconst SecondaryNavLink = styled(Link)<{ isCurrent?: boolean }>`\n display: inline-block;\n padding: ${spacings.nudge * 0.5}px 0;\n outline-color: ${({ theme }) => color(theme).primary.default};\n vertical-align: middle;\n\n ${navigationStyle('secondary')}\n color: ${({ theme }) => font(theme).navigation.secondary.color};\n text-decoration: ${({ isCurrent }) => (isCurrent ? 'underline' : 'none')};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:focus {\n outline: dashed 2px\n ${({ theme, isInverted }) =>\n isInverted\n ? color(theme).primary.inverted\n : color(theme).primary.default};\n outline-offset: 1px;\n }\n\n &:focus:not(:focus-visible) {\n outline: none;\n }\n`;\n\nconst SecondaryNavigation: FC<{\n items?: NavItem[];\n canFocus?: boolean;\n}> = ({ items, canFocus }) => {\n return items && items.length > 0 ? (\n <SecondaryNavList>\n {items\n ?.filter((n) => n.link?.href)\n .map((item, i) => (\n <li key={i}>\n <SecondaryNavLink\n isCurrent={item.isCurrent}\n href={item.link?.href}\n tabIndex={!canFocus ? -1 : undefined}\n >\n {item.label}\n </SecondaryNavLink>\n </li>\n ))}\n </SecondaryNavList>\n ) : null;\n};\n//#endregion\n\nconst MenuNav = {\n View: Navigation,\n List: NavList,\n Item: NavigationItem,\n SubItem: NavigationSubItem,\n SubList: SecondaryNavigation,\n};\n// #endregion\n\nexport interface FlyoutMenuProps {\n type: 'flyout';\n collapseIcon?: (props: { isCollapsed?: boolean }) => React.ReactNode;\n subNavTitle?: string;\n backdropFilter?: string;\n}\n\nconst menuFilter = (item: NavItem) =>\n !item.hideFromMenu && item.uid && item.label;\n\nconst MenuFlyout: FC<MenuBaseProps & FlyoutMenuProps> = ({\n isOpen,\n clampWidth,\n isIndexPage,\n mainNavigation,\n subNavigation,\n navBarSize,\n subNavTitle,\n backdropFilter = 'grayscale(1)',\n header,\n footer,\n onClose,\n collapseIcon,\n navItemsHeader,\n}) => {\n const { theme } = useLibTheme();\n const flyoutRef = useRef<HTMLDivElement>(null);\n const hasHeader = useMemo(() => hasMenuHeader(theme), [theme]);\n\n const mainList = useMemo(() => {\n const featured = mainNavigation?.filter((n) => n.isFeatured) || [];\n const main = mainNavigation?.filter((n) => !n.isFeatured) || [];\n\n return [...featured, ...main].filter(menuFilter);\n }, [mainNavigation]);\n\n const hasNonFeaturedItems = useMemo(() => {\n const main = mainNavigation?.filter((n) => !n.isFeatured) || [];\n return main && main.length > 0;\n }, [mainNavigation]);\n\n const subList = useMemo(() => {\n return subNavigation?.filter(menuFilter);\n }, [subNavigation]);\n\n const [activeItems, setActiveItems] = useState<string[]>(() => {\n const initial = getCurrentNavItem(mainList, true)?.root?.uid;\n return initial ? [initial] : [''];\n });\n const [currentNavEl, setCurrentNavEl] =\n useState<HTMLLIElement | null>(null);\n const [currentSubNavEl, setCurrentSubNavEl] =\n useState<HTMLLIElement | null>(null);\n\n const toggleActiveItem = (uid: string) => {\n setActiveItems((prev) => (prev.includes(uid) ? [] : [uid]));\n\n // if multiple nav items can be selected:\n // setActiveItems((prev) => {\n // const copy = [...prev];\n // const activeIndex = activeItems.indexOf(index);\n // if (activeIndex !== -1) {\n // copy.splice(activeIndex, 1);\n // } else {\n // copy.push(index);\n // }\n // return copy;\n // });\n };\n\n // check if flyout lost focus\n useEffect(() => {\n const handleFocus = (ev: FocusEvent) => {\n if (!flyoutRef.current || !ev.target) return;\n const isFlyoutChild = flyoutRef.current.contains(\n ev.target as Element\n );\n\n if (!isFlyoutChild) onClose && onClose();\n };\n\n if (isOpen) {\n document.addEventListener('focusin', handleFocus);\n } else {\n document.removeEventListener('focusin', handleFocus);\n }\n\n return () => {\n document.removeEventListener('focusin', handleFocus);\n };\n }, [isOpen, onClose]);\n\n // scroll to current nav items\n useEffect(() => {\n try {\n currentNavEl?.scrollIntoView({\n block: 'center',\n inline: 'start',\n });\n currentSubNavEl?.scrollIntoView({\n block: 'center',\n inline: 'start',\n });\n } catch (e) {\n // console.log(e);\n }\n }, [currentNavEl, currentSubNavEl]);\n\n return (\n <React.Fragment>\n <Backdrop\n isOpen={isOpen}\n filter={backdropFilter}\n onClick={onClose}\n />\n <Stage isOpen={isOpen} clampWidth={clampWidth}>\n <Flyout ref={flyoutRef} isOpen={isOpen}>\n {hasHeader && (\n <Header navBarSize={navBarSize}>\n {header ? (\n header({\n isOpen,\n mainNavigation: mainList,\n subNavigation: subList,\n isIndexPage,\n navBarSize,\n })\n ) : (\n <MenuHeader\n menuStates={{\n isOpen,\n mainNavigation,\n subNavigation,\n isIndexPage,\n navBarSize,\n }}\n />\n )}\n </Header>\n )}\n\n <ScrollContainer>\n <ScrollArea>\n {navItemsHeader &&\n navItemsHeader({\n isOpen,\n mainNavigation: mainList,\n subNavigation: subList,\n isIndexPage,\n navBarSize,\n })}\n <MenuNav.View>\n {isValidArray(mainList, false) && (\n <MenuNav.List\n id=\"mainMenu\"\n hasNonFeaturedItems={\n hasNonFeaturedItems\n }\n >\n {mainList.map((item) => {\n const isActive =\n activeItems.includes(item.uid);\n const hasCurrentSubItem =\n item?.subItems\n ? item.subItems.findIndex(\n (n) => n.isCurrent\n ) >= 0\n : false;\n\n const isCurrent =\n item.isCurrent ||\n hasCurrentSubItem;\n\n return (\n <MenuNav.Item\n key={item.uid}\n {...item}\n ref={\n isCurrent\n ? setCurrentNavEl\n : undefined\n }\n isActive={isActive}\n isCurrent={isCurrent}\n subNavTitle={subNavTitle}\n navBarSize={navBarSize}\n collapseIcon={collapseIcon}\n onItemClick={() =>\n toggleActiveItem(\n item.uid\n )\n }\n canFocus={isOpen}\n >\n {item?.subItems\n ?.filter(menuFilter)\n .map((subItem) => (\n <MenuNav.SubItem\n key={\n subItem.uid\n }\n ref={\n subItem.isCurrent\n ? setCurrentSubNavEl\n : undefined\n }\n {...subItem}\n navBarSize={\n navBarSize\n }\n canFocus={\n isOpen\n }\n />\n ))}\n </MenuNav.Item>\n );\n })}\n </MenuNav.List>\n )}\n {isValidArray(subList, false) && (\n <MenuNav.SubList\n items={subList}\n canFocus={isOpen}\n />\n )}\n </MenuNav.View>\n {footer\n ? footer({\n isOpen,\n mainNavigation: mainList,\n subNavigation: subList,\n isIndexPage,\n })\n : ''}\n </ScrollArea>\n </ScrollContainer>\n </Flyout>\n </Stage>\n </React.Fragment>\n );\n};\n\nexport default MenuFlyout;\n","import React, { FC } from 'react';\n\nimport { LinkProps } from 'components/typography/Link';\n\n/** Menu Variations */\nimport MenuFlyout, { FlyoutMenuProps } from './variations/MenuFlyout';\nimport { /* MenuLarge,*/ LargeMenuProps } from './variations/MenuLarge';\nimport { NavBarSize } from '../NavBar';\n\n/** Navigation item types */\n\nexport interface NavItem {\n uid: string;\n label: string;\n link?: LinkProps;\n isCurrent?: boolean;\n subItems?: NavItem[];\n isFeatured?: boolean;\n icon?: React.ReactNode;\n hideFromMenu?: boolean;\n}\n\n/** Menu base type */\nexport interface MenuStates {\n isOpen?: boolean;\n isIndexPage?: boolean;\n mainNavigation?: Array<NavItem>;\n subNavigation?: Array<NavItem>;\n navBarSize?: NavBarSize;\n}\n\nexport interface MenuBaseProps {\n isOpen?: boolean;\n clampWidth?: 'content' | 'full';\n isIndexPage?: boolean;\n mainNavigation?: Array<NavItem>;\n subNavigation?: Array<NavItem>;\n navBarSize?: NavBarSize;\n header?: (props: MenuStates) => React.ReactNode;\n footer?: (props: MenuStates) => React.ReactNode;\n navItemsHeader?: (menuStates: MenuStates) => React.ReactNode;\n onClose?: () => void;\n}\n\nexport type MenuTypeProps = FlyoutMenuProps | LargeMenuProps;\n\nconst Menu: FC<MenuBaseProps & { typeSettings?: MenuTypeProps }> = ({\n isOpen,\n clampWidth,\n isIndexPage,\n mainNavigation,\n subNavigation,\n navBarSize,\n header,\n footer,\n navItemsHeader,\n onClose,\n typeSettings,\n}) => {\n if (!typeSettings) {\n typeSettings = { type: 'flyout' };\n }\n\n switch (typeSettings?.type) {\n // case 'large': {\n // return (\n // <MenuLarge\n // isOpen={isOpen}\n // clampWidth={clampWidth}\n // isIndexPage={isIndexPage}\n // mainNavigation={mainNavigation}\n // subNavigation={subNavigation}\n // navBarSize={navBarSize}\n // header={header}\n // footer={footer}\n // navItemsHeader={navItemsHeader}\n // onClose={onClose}\n // {...(typeSettings as LargeMenuProps)}\n // />\n // );\n // }\n\n default:\n case 'flyout': {\n return (\n <MenuFlyout\n isOpen={isOpen}\n clampWidth={clampWidth}\n isIndexPage={isIndexPage}\n mainNavigation={mainNavigation}\n subNavigation={subNavigation}\n navBarSize={navBarSize}\n header={header}\n footer={footer}\n onClose={onClose}\n navItemsHeader={navItemsHeader}\n {...(typeSettings as FlyoutMenuProps)}\n />\n );\n }\n }\n};\n\nexport default Menu;\n","import React, { FC, useMemo } from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\nimport {\n spacings,\n mq,\n getGlobals as global,\n getColors as color,\n} from 'utils/styles';\nimport { clampValue } from 'utils/clamp';\nimport { useLibTheme } from 'utils/LibThemeProvider';\nimport * as Skeletons from 'components/sections/navigation/skeletons/index';\n\nexport const getTopHeights = (\n theme: DefaultTheme,\n size?: NavBarSize\n): [number, number] => {\n const heights =\n size === 'large'\n ? global(theme).navigation.navBar.topHeight.large\n : global(theme).navigation.navBar.topHeight.small;\n\n // if second value is not defined use first array index value for both\n return [\n clampValue(heights[0], 0),\n clampValue(heights?.[1] === undefined ? heights[0] : heights[1], 0),\n ];\n};\n\nexport const hasTopBar = (theme: DefaultTheme) => {\n const largeHeights = getTopHeights(theme, 'large');\n const smallHeights = getTopHeights(theme, 'small');\n\n return (\n largeHeights[0] > 0 ||\n largeHeights[1] > 0 ||\n smallHeights[0] > 0 ||\n smallHeights[1] > 0\n );\n};\n\nexport const getMainHeights = (\n theme: DefaultTheme,\n size?: NavBarSize\n): [number, number] => {\n const heights =\n size === 'large'\n ? global(theme).navigation.navBar.mainHeight.large\n : global(theme).navigation.navBar.mainHeight.small;\n\n // if second value is not defined use first array index value for both\n return [\n clampValue(heights[0], 0),\n clampValue(heights?.[1] === undefined ? heights[0] : heights[1], 0),\n ];\n};\n\nexport const getBottomHeights = (\n theme: DefaultTheme,\n size?: NavBarSize\n): [number, number] => {\n const heights =\n size === 'large'\n ? global(theme).navigation.navBar.bottomHeight.large\n : global(theme).navigation.navBar.bottomHeight.small;\n\n // if second value is not defined use first array index value for both\n return [\n clampValue(heights[0], 0),\n clampValue(heights?.[1] === undefined ? heights[0] : heights[1], 0),\n ];\n};\n\nexport const hasBottomBar = (theme: DefaultTheme) => {\n const largeHeights = getBottomHeights(theme, 'large');\n const smallHeights = getBottomHeights(theme, 'small');\n\n return (\n largeHeights[0] > 0 ||\n largeHeights[1] > 0 ||\n smallHeights[0] > 0 ||\n smallHeights[1] > 0\n );\n};\n\nexport type ExcludeType = 'top' | 'main' | 'bottom';\n\n/**\n * Get full height of navigation bar\n * @param theme Theme object\n * @param size Navigation bar size\n * @param exclude Exclude parts of the navbar for height calculation\n * @returns [mobile, desktop]\n */\nexport const getFullHeight = (\n theme: DefaultTheme,\n size?: NavBarSize,\n exclude?: ExcludeType[]\n): [number, number] => {\n const includeTop = exclude ? exclude.indexOf('top') === -1 : true;\n const includeMain = exclude ? exclude.indexOf('main') === -1 : true;\n const includeBottom = exclude ? exclude.indexOf('bottom') === -1 : true;\n\n const topHeights = includeTop ? getTopHeights(theme, size) : [0, 0];\n const mainHeights = includeMain ? getMainHeights(theme, size) : [0, 0];\n const bottomHeights = includeBottom\n ? getBottomHeights(theme, size)\n : [0, 0];\n\n // calculate mobile navbar height\n const mobile = topHeights[0] + mainHeights[0] + bottomHeights[0];\n\n // calculate desktop navbar height\n const desktop = topHeights[1] + mainHeights[1] + bottomHeights[1];\n\n return [mobile, desktop];\n};\n\nconst View = styled.div<{\n isOpen?: boolean;\n isSticky?: boolean;\n isAnimated?: boolean;\n bgGradient?: string;\n}>`\n position: ${({ isSticky }) => (isSticky ? 'fixed' : 'absolute')};\n top: 0;\n left: 0;\n right: 0;\n\n transform: ${({ isOpen }) => !isOpen && 'translate3d(0, -101%, 0)'};\n\n margin: 0 auto;\n /* max-width: ${spacings.wrapperLarge}px; */\n z-index: 100;\n\n ${({ isAnimated }) => `transition: ${\n isAnimated ? 'transform 0.3s ease-in-out, ' : ''\n }height 0.3s ease-in-out,\n opacity 0.3s ease-in-out;`}\n will-change: transform;\n\n &:before {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: ${({ bgGradient }) => bgGradient || ''};\n margin: 0 auto;\n max-width: ${spacings.wrapperLarge}px;\n z-index: -1;\n }\n\n // print version\n @media print {\n position: relative;\n }\n`;\n\nconst Header = styled.div<{ size?: NavBarSize; background?: string }>`\n opacity: ${({ theme, size }) =>\n getTopHeights(theme, size)[0] > 0 ? 1 : 0};\n pointer-events: ${({ theme, size }) =>\n getTopHeights(theme, size)[0] > 0 ? 'all' : 'none'};\n overflow: ${({ theme, size }) =>\n getTopHeights(theme, size)[0] <= 0 && 'hidden'};\n\n background-color: ${({ background }) => background};\n color: ${({ theme, background }) =>\n background ? color(theme).text.default : color(theme).text.inverted};\n\n transition: background-color 0.2s ease-in-out;\n\n @media ${mq.semilarge} {\n opacity: ${({ theme, size }) =>\n getTopHeights(theme, size)[1] > 0 ? 1 : 0};\n pointer-events: ${({ theme, size }) =>\n getTopHeights(theme, size)[1] > 0 ? 'all' : 'none'};\n overflow: ${({ theme, size }) =>\n getTopHeights(theme, size)[1] <= 0 && 'hidden'};\n }\n`;\n\nconst Main = styled.div<{ background?: string }>`\n background-color: ${({ background }) => background};\n color: ${({ theme, background }) =>\n background ? color(theme).text.default : color(theme).text.inverted};\n\n transition: background-color 0.2s ease-in-out;\n`;\n\nconst Footer = styled.div<{ size?: NavBarSize; background?: string }>`\n opacity: ${({ theme, size }) =>\n getBottomHeights(theme, size)[0] > 0 ? 1 : 0};\n pointer-events: ${({ theme, size }) =>\n getBottomHeights(theme, size)[0] > 0 ? 'all' : 'none'};\n overflow: ${({ theme, size }) =>\n getBottomHeights(theme, size)[0] <= 0 && 'hidden'};\n\n background-color: ${({ background }) => background};\n color: ${({ theme, background }) =>\n background ? color(theme).text.default : color(theme).text.inverted};\n\n opacity: ${({ theme, size }) =>\n getBottomHeights(theme, size)[0] > 0 ? 1 : 0};\n\n transition: background-color 0.2s ease-in-out, opacity 0.2s ease-in-out;\n\n @media ${mq.semilarge} {\n opacity: ${({ theme, size }) =>\n getBottomHeights(theme, size)[1] > 0 ? 1 : 0};\n pointer-events: ${({ theme, size }) =>\n getBottomHeights(theme, size)[1] > 0 ? 'all' : 'none'};\n overflow: ${({ theme, size }) =>\n getBottomHeights(theme, size)[1] <= 0 && 'hidden'};\n\n opacity: ${({ theme, size }) =>\n getBottomHeights(theme, size)[1] > 0 ? 1 : 0};\n }\n`;\n\nconst TopContent = styled.div<{ size?: NavBarSize; clamp?: boolean }>`\n display: flex;\n justify-content: flex-end;\n position: relative;\n max-width: ${({ clamp }) =>\n clamp ? spacings.wrapper : spacings.wrapperLarge}px;\n padding: ${({ size, theme }) =>\n getTopHeights(theme, size)[0] > 0 && `0 ${spacings.nudge * 2}px`};\n margin: 0 auto;\n\n height: ${({ theme, size }) => getTopHeights(theme, size)[0]}px;\n\n transition: height 0.2s ease-in-out, padding-top 0.2s ease-in-out,\n padding-bottom 0.2s ease-in-out;\n will-change: height;\n\n @media ${mq.semilarge} {\n height: ${({ theme, size }) => getTopHeights(theme, size)[1]}px;\n padding: ${({ size, theme }) =>\n getTopHeights(theme, size)[1] > 0 && `0 ${spacings.nudge * 2}px`};\n }\n`;\n\nconst Content = styled.div<{ size?: NavBarSize; clamp?: boolean }>`\n display: flex;\n position: relative;\n max-width: ${({ clamp }) =>\n clamp ? spacings.wrapper : spacings.wrapperLarge}px;\n padding: 0 ${spacings.nudge * 2}px;\n margin: 0 auto;\n\n height: ${({ theme, size }) => getMainHeights(theme, size)[0]}px;\n\n transition: height 0.2s ease-in-out;\n will-change: height;\n\n @media ${mq.semilarge} {\n height: ${({ theme, size }) =>\n getMainHeights(theme, size)[1] || getMainHeights(theme, size)[0]}px;\n }\n`;\n\nconst BottomContent = styled.div<{ size?: NavBarSize; clamp?: boolean }>`\n display: flex;\n justify-content: flex-start;\n position: relative;\n max-width: ${({ clamp }) =>\n clamp ? spacings.wrapper : spacings.wrapperLarge}px;\n padding: 0 ${spacings.nudge * 2}px;\n margin: 0 auto;\n\n height: ${({ theme, size }) => getBottomHeights(theme, size)[0]}px;\n transition: 0.2s height ease-in-out;\n\n @media ${mq.semilarge} {\n height: ${({ theme, size }) => getBottomHeights(theme, size)[1]}px;\n padding: 0 ${spacings.nudge * 2}px;\n }\n`;\n\nconst BarSpacer = styled.div<{ hasHeader?: boolean; hasFooter?: boolean }>`\n height: ${({ theme, hasHeader, hasFooter }) => {\n const excludes: ExcludeType[] = [];\n if (!hasHeader) excludes.push('top');\n if (!hasFooter) excludes.push('bottom');\n\n return getFullHeight(theme, 'large', excludes)[0];\n }}px;\n\n @media ${mq.semilarge} {\n height: ${({ theme, hasHeader, hasFooter }) => {\n const excludes: ExcludeType[] = [];\n if (!hasHeader) excludes.push('top');\n if (!hasFooter) excludes.push('bottom');\n\n return getFullHeight(theme, 'large', excludes)[1];\n }}px;\n }\n\n // print version\n @media print {\n display: none;\n }\n`;\n\nexport type NavBarSize = 'small' | 'large';\n\nexport interface BarStates {\n size: NavBarSize;\n isOpen?: boolean;\n isSticky?: boolean;\n pageFlow?: PageFlow;\n}\n\nexport type PageFlow = 'overContent' | 'beforeContent';\n\nexport interface NavBarProps {\n size?: NavBarSize;\n isOpen?: boolean;\n isSticky?: boolean;\n isAnimated?: boolean;\n clampWidth?: 'content' | 'full';\n pageFlow?: PageFlow;\n\n topBg?: string;\n mainBg?: string;\n bottomBg?: string;\n /** Custom background value for NavBar with pageFlow === overContent and large size */\n onContentBg?: string;\n\n topBar?: ((props: BarStates) => React.ReactNode) | null;\n mainBar?: ((props: BarStates) => React.ReactNode) | null;\n bottomBar?: ((props: BarStates) => React.ReactNode) | null;\n}\n\nconst NavBar: FC<\n NavBarProps & {\n className?: string;\n }\n> = ({\n size = 'large',\n isOpen = false,\n isSticky = false,\n isAnimated = false,\n clampWidth = false,\n pageFlow = 'beforeContent',\n topBg,\n mainBg,\n bottomBg,\n onContentBg,\n topBar,\n mainBar,\n bottomBar,\n className,\n}) => {\n const { theme, colors } = useLibTheme();\n const clampContent = clampWidth === 'content';\n const isOverContent = pageFlow === 'overContent';\n\n const hasHeader = useMemo(\n () => hasTopBar(theme) && topBar !== null,\n [theme, topBar]\n );\n const hasFooter = useMemo(\n () => hasBottomBar(theme) && bottomBar !== null,\n [bottomBar, theme]\n );\n const showBg = useMemo(\n () => size === 'small' || (size === 'large' && !isOverContent),\n [isOverContent, size]\n );\n\n const topBackground = topBg || colors.elementBg.light;\n const mainBackground = mainBg || colors.elementBg.light;\n const bottomBackground = bottomBg || colors.elementBg.light;\n const onContentBackground =\n onContentBg ||\n 'linear-gradient(180deg,rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.2) 40%, rgba(0,0,0,0) 100%)';\n\n const topBarContent = useMemo(\n () =>\n topBar &&\n topBar({\n size,\n isOpen,\n isSticky,\n pageFlow,\n }),\n [isOpen, isSticky, pageFlow, size, topBar]\n );\n\n const mainBarContent = useMemo(\n () =>\n mainBar &&\n mainBar({\n size,\n isOpen,\n isSticky,\n pageFlow,\n }),\n [isOpen, isSticky, mainBar, pageFlow, size]\n );\n\n const bottomBarContent = useMemo(\n () =>\n bottomBar &&\n bottomBar({\n size,\n isOpen,\n isSticky,\n pageFlow,\n }),\n [bottomBar, isOpen, isSticky, pageFlow, size]\n );\n\n return (\n <React.Fragment>\n {pageFlow === 'beforeContent' && (\n <BarSpacer hasHeader={hasHeader} hasFooter={hasFooter} />\n )}\n <View\n isOpen={isOpen}\n isSticky={isSticky}\n isAnimated={isAnimated}\n bgGradient={\n size === 'large' && isOverContent\n ? onContentBackground\n : undefined\n }\n className={className}\n >\n {hasHeader && (\n <Header\n size={size}\n background={showBg ? topBackground : undefined}\n >\n <TopContent size={size} clamp={clampContent}>\n {topBarContent ? (\n topBarContent\n ) : (\n <Skeletons.Column isInverted>\n Top Nav\n </Skeletons.Column>\n )}\n </TopContent>\n </Header>\n )}\n {mainBar !== null && (\n <Main background={showBg ? mainBackground : undefined}>\n <Content size={size} clamp={clampContent}>\n {mainBarContent ? (\n mainBarContent\n ) : (\n <React.Fragment>\n <Skeletons.Column\n takeSpace\n isInverted={\n size === 'large' && isOverContent\n }\n >\n Left\n </Skeletons.Column>\n <Skeletons.Column\n isInverted={\n size === 'large' && isOverContent\n }\n >\n Center\n </Skeletons.Column>\n <Skeletons.Column\n takeSpace\n isInverted={\n size === 'large' && isOverContent\n }\n >\n Right\n </Skeletons.Column>\n </React.Fragment>\n )}\n </Content>\n </Main>\n )}\n {hasFooter && (\n <Footer\n size={size}\n background={showBg ? bottomBackground : undefined}\n >\n <BottomContent size={size} clamp={clampContent}>\n {bottomBarContent ? bottomBarContent : 'bottom bar'}\n </BottomContent>\n </Footer>\n )}\n </View>\n </React.Fragment>\n );\n};\n\nexport default NavBar;\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { DefaultTheme } from 'styled-components';\nimport {\n LibThemeProvider,\n ThemeMods,\n useLibTheme,\n} from 'utils/LibThemeProvider';\nimport { useMediaQueries } from 'utils/useMediaQuery';\nimport { useMenuKeyboard } from 'utils/menuHooks';\nimport usePageScroll, { PageScrollDirection } from 'utils/usePageScroll';\nimport Menu, { MenuStates, MenuTypeProps, NavItem } from './menu/Menu';\n\nimport NavBar, {\n getFullHeight,\n NavBarSize,\n BarStates,\n hasTopBar,\n hasBottomBar,\n ExcludeType,\n PageFlow,\n} from './NavBar';\n\n/**\n * Checks which navbar parts are defined in navigation.\n * With this values you can calculate each height by the Navbar component functions\n * @param ident Identification string from Navigation component\n * @returns\n */\nexport const getNavbarState = (ident: string) => {\n const navbarIdent = ident || '';\n\n let pageFlow: PageFlow | undefined = undefined;\n switch (true) {\n case navbarIdent.search('overContent') !== -1: {\n pageFlow = 'overContent';\n break;\n }\n\n case navbarIdent.search('beforeContent') !== -1: {\n pageFlow = 'beforeContent';\n break;\n }\n }\n\n return {\n hasTop: navbarIdent.search('top') !== -1,\n hasMain: navbarIdent.search('main') !== -1,\n hasBottom: navbarIdent.search('bottom') !== -1,\n pageFlow: pageFlow,\n isStickable: navbarIdent.search('stickable') !== -1,\n };\n};\n\n/** Generate Navbar identifier */\nexport const generateNavbarIdent = (props: {\n hasTop?: boolean;\n hasMain?: boolean;\n hasBottom?: boolean;\n pageFlow?: PageFlow;\n isStickable?: boolean;\n}): string => {\n if (!props) return '';\n const stateArray: string[] = [];\n\n if (props.hasTop) stateArray.push('top');\n if (props.hasMain) stateArray.push('main');\n if (props.hasBottom) stateArray.push('bottom');\n if (props.isStickable) stateArray.push('stickable');\n if (props.pageFlow) stateArray.push(props.pageFlow);\n\n return stateArray.join('-');\n};\n\n/**\n * Get full navbar heights\n * @param theme Theme object\n * @param ident Indentification string from Navigation component\n * @returns\n */\nexport const getFullNavbarHeights = (theme: DefaultTheme, ident: string) => {\n const { hasTop, hasBottom } = getNavbarState(ident || '');\n const excludes: ExcludeType[] = [];\n if (!hasTop) excludes.push('top');\n if (!hasBottom) excludes.push('bottom');\n\n return {\n large: getFullHeight(theme, 'large', excludes),\n small: getFullHeight(theme, 'small', excludes),\n };\n};\n\nexport interface NavBarStates extends BarStates {\n isMenuOpen?: boolean;\n openMenu?: () => void;\n closeMenu?: () => void;\n mainNavigation?: Array<NavItem>;\n subNavigation?: Array<NavItem>;\n isOnPageTop?: boolean;\n isInTopOffset?: boolean;\n}\n\nexport interface NavMenuStates extends MenuStates {\n isMenuOpen?: boolean;\n openMenu?: () => void;\n closeMenu?: () => void;\n navBarSize?: NavBarSize;\n}\n\nexport interface NavBarSettings {\n isStickable?: boolean;\n isCollapsible?: boolean;\n pageFlow?: 'overContent' | 'beforeContent';\n\n topBg?: string;\n mainBg?: string;\n bottomBg?: string;\n /** Custom background value for NavBar with pageFlow === overContent and large size */\n onContentBg?: string;\n\n topBar?: ((props: NavBarStates) => React.ReactNode) | null;\n mainBar?: ((props: NavBarStates) => React.ReactNode) | null;\n bottomBar?: ((props: NavBarStates) => React.ReactNode) | null;\n theme?: ThemeMods;\n}\n\nexport interface MenuSettings {\n isIndexPage?: boolean;\n mainNavigation?: Array<NavItem>;\n subNavigation?: Array<NavItem>;\n header?: (props: NavMenuStates) => React.ReactNode;\n footer?: (props: NavMenuStates) => React.ReactNode;\n navItemsHeader?: (props: NavMenuStates) => React.ReactNode;\n typeSettings: MenuTypeProps;\n\n theme?: ThemeMods;\n}\n\nexport interface NavigationProps {\n navBar?: NavBarSettings;\n menu?: MenuSettings;\n clampWidth?: 'content' | 'full';\n}\n\nconst Navigation: FC<NavigationProps> = ({\n clampWidth = 'content',\n navBar,\n menu,\n}) => {\n const isStickable = navBar?.isStickable || false;\n const isCollapsible = navBar?.isCollapsible || false;\n\n const mediaQueries = useMediaQueries();\n\n const { theme } = useLibTheme();\n\n /** Navigation bar states */\n const [isNavBarSticky, setIsNavBarSticky] = useState<boolean>(false);\n const [isNavBarOpen, setNavBarOpen] = useState<boolean>(true);\n const { isTop, scrollDirection, isInOffset, leftOffsetFromTop } =\n usePageScroll({\n directionOffset: { up: 40, down: 40 },\n offset: getFullHeight(theme, 'large')[\n mediaQueries.semilarge ? 1 : 0\n ],\n });\n\n const navbarSize = useMemo<NavBarSize>(() => {\n return isTop || isInOffset || !isStickable ? 'large' : 'small';\n }, [isTop, isInOffset, isStickable]);\n\n useEffect(() => {\n if (isStickable && isCollapsible) {\n setNavBarOpen(\n isTop ||\n isInOffset ||\n scrollDirection === PageScrollDirection.UP\n );\n }\n }, [scrollDirection, isTop, isStickable, isInOffset, isCollapsible]);\n\n useEffect(() => {\n if (!isStickable) return;\n if (\n !isCollapsible ||\n (leftOffsetFromTop && scrollDirection === PageScrollDirection.UP)\n ) {\n setIsNavBarSticky(true);\n } else if (isTop) {\n setIsNavBarSticky(false);\n }\n }, [isCollapsible, isStickable, isTop, leftOffsetFromTop, scrollDirection]);\n\n /** Menu states */\n const { isMenuOpen, setIsMenuOpen, setRoot } = useMenuKeyboard(false, {});\n\n const openMenu = () => {\n setIsMenuOpen(true);\n };\n\n const closeMenu = () => {\n setIsMenuOpen(false);\n };\n\n useEffect(() => {\n document.body.style.overflow = isMenuOpen ? 'hidden' : 'visible';\n }, [isMenuOpen]);\n\n const topBar = navBar?.topBar\n ? (props: BarStates) => {\n if (!navBar?.topBar) return '';\n return navBar.topBar({\n ...props,\n isMenuOpen,\n openMenu,\n closeMenu,\n mainNavigation: menu?.mainNavigation,\n subNavigation: menu?.subNavigation,\n isOnPageTop: isTop,\n isInTopOffset: isInOffset,\n });\n }\n : navBar?.topBar;\n\n const mainBar = navBar?.mainBar\n ? (props: BarStates) => {\n if (!navBar?.mainBar) return '';\n return navBar.mainBar({\n ...props,\n isMenuOpen,\n openMenu,\n closeMenu,\n mainNavigation: menu?.mainNavigation,\n subNavigation: menu?.subNavigation,\n isOnPageTop: isTop,\n isInTopOffset: isInOffset,\n });\n }\n : navBar?.mainBar;\n\n const bottomBar = navBar?.bottomBar\n ? (props: BarStates) => {\n if (!navBar?.bottomBar) return '';\n return navBar.bottomBar({\n ...props,\n isMenuOpen,\n openMenu,\n closeMenu,\n mainNavigation: menu?.mainNavigation,\n subNavigation: menu?.subNavigation,\n isOnPageTop: isTop,\n isInTopOffset: isInOffset,\n });\n }\n : navBar?.bottomBar;\n\n const menuHeader = menu?.header\n ? (props: MenuStates) => {\n if (!menu?.header) return '';\n return menu?.header({\n ...props,\n openMenu,\n closeMenu,\n mainNavigation: menu?.mainNavigation,\n subNavigation: menu?.subNavigation,\n navBarSize: navbarSize,\n });\n }\n : undefined;\n\n const menuFooter = menu?.footer\n ? (props: MenuStates) => {\n if (!menu?.footer) return '';\n return menu?.footer({\n ...props,\n openMenu,\n closeMenu,\n mainNavigation: menu?.mainNavigation,\n subNavigation: menu?.subNavigation,\n navBarSize: navbarSize,\n });\n }\n : undefined;\n\n const menuNavItemsHeader = menu?.navItemsHeader\n ? (props: MenuStates) => {\n if (!menu?.navItemsHeader) return '';\n return menu?.navItemsHeader({\n ...props,\n openMenu,\n closeMenu,\n mainNavigation: menu?.mainNavigation,\n subNavigation: menu?.subNavigation,\n navBarSize: navbarSize,\n });\n }\n : undefined;\n\n /**\n * Get ident string that shows if each navbar section is defined.\n * @returns Navbar ident string\n */\n const getNavBarIdent = (theme: DefaultTheme) => {\n const ident = generateNavbarIdent({\n hasTop: topBar !== null && hasTopBar(theme),\n hasMain: mainBar !== null,\n hasBottom: bottomBar !== null && hasBottomBar(theme),\n isStickable: navBar?.isStickable,\n pageFlow: navBar?.pageFlow,\n });\n\n return ident;\n };\n\n return (\n <header ref={setRoot} data-navbar-ident={getNavBarIdent(theme)}>\n <LibThemeProvider theme={navBar?.theme}>\n <NavBar\n isOpen={isNavBarOpen}\n isSticky={isNavBarSticky}\n isAnimated\n size={navbarSize}\n clampWidth={clampWidth}\n pageFlow={navBar?.pageFlow}\n topBar={topBar}\n mainBar={mainBar}\n bottomBar={bottomBar}\n topBg={navBar?.topBg}\n mainBg={navBar?.mainBg}\n bottomBg={navBar?.bottomBg}\n onContentBg={navBar?.onContentBg}\n />\n </LibThemeProvider>\n <LibThemeProvider theme={menu?.theme}>\n <Menu\n isOpen={isMenuOpen}\n clampWidth={clampWidth}\n isIndexPage={menu?.isIndexPage}\n mainNavigation={menu?.mainNavigation}\n subNavigation={menu?.subNavigation}\n typeSettings={menu?.typeSettings}\n navBarSize={navbarSize}\n header={menuHeader}\n footer={menuFooter}\n navItemsHeader={menuNavItemsHeader}\n onClose={closeMenu}\n />\n </LibThemeProvider>\n </header>\n );\n};\n\nexport default Navigation;\n","import { useEffect, useRef, useState } from 'react';\n\ninterface Settings {\n openMenuIdent: string;\n closeMenuIdent: string;\n}\n\n/**\n * Hooks in to menu state to control it with keyboard inputs\n * @param initialMenuState\n * @param settings\n * @returns\n */\nexport const useMenuKeyboard = (\n initialMenuState: boolean,\n settings: Partial<Settings>\n) => {\n const [isMenuOpen, setIsMenuOpen] = useState(initialMenuState);\n const prevMenuState = useRef<boolean>(false);\n\n const [root, setRoot] = useState<HTMLElement | null>(null);\n const openBtnRef = useRef<HTMLButtonElement | null>(null);\n const closeBtnRef = useRef<HTMLButtonElement | null>(null);\n\n const defaultSettings: Settings = {\n openMenuIdent: 'button[aria-label=\"open menu\"]',\n closeMenuIdent: 'button[aria-label=\"close menu\"]',\n ...settings,\n };\n\n useEffect(() => {\n if (!root) return;\n\n // setting up menu toggle button refs\n if (!openBtnRef.current) {\n openBtnRef.current = root.querySelector(\n defaultSettings.openMenuIdent\n );\n }\n if (!closeBtnRef.current) {\n closeBtnRef.current = root.querySelector(\n defaultSettings.closeMenuIdent\n );\n }\n }, [\n defaultSettings.closeMenuIdent,\n defaultSettings.openMenuIdent,\n isMenuOpen,\n root,\n ]);\n\n useEffect(() => {\n const handleKeyDown = (ev: KeyboardEvent) => {\n if (ev.key === 'Escape' && isMenuOpen) {\n setIsMenuOpen(false);\n }\n };\n\n // settings focus if menu is open\n if (isMenuOpen) {\n closeBtnRef?.current?.focus();\n } else if (prevMenuState.current) {\n openBtnRef?.current?.focus();\n }\n\n prevMenuState.current = isMenuOpen;\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [isMenuOpen]);\n\n return {\n setRoot,\n isMenuOpen,\n setIsMenuOpen,\n };\n};\n"],"names":["PageScrollDirection","View","styled","nav","withConfig","displayName","componentId","templateObject_1","__makeTemplateObject","List","ul","templateObject_2","mq","semilarge","spacings","nudge","ListItem","li","templateObject_3","_a","isCurrent","NavLink","Link","templateObject_4","showOnMobile","clamp","copyStyle","theme","isInverted","color","text","inverted","default","showOnDesktop","NavLabel","span","templateObject_5","Seperator","Copy","templateObject_6","BackIconContainer","templateObject_7","BreadcrumbItem","label","link","children","href","React","__assign","Column","div","takeSpace","undefined","vAlign","getColors","primary","Logo","Image","Toggle","button","invertedHover","hover","BarMenuToggle","_b","isExpanded","onClick","className","createElement","isActive","Header","LanguageCol","MenuHeader","customToggle","menuStates","langs","action","Fragment","Skeletons","closeMenu","Cross","ariaHidden","isValidArray","LanguageSwitcher","navigationStyle","type","css","font","navigation","family","weight","style","withRange","getFonts","size","lineHeight","letterSpacing","textTransform","textDecoration","Backdrop","isOpen","filter","Stage","clampWidth","wrapper","wrapperLarge","Flyout","elementBg","light","medium","large","getMenuHeaderHeights","heights","global","getGlobals","menu","headerHeight","small","clampValue","navBarSize","ScrollContainer","ScrollArea","NavView","templateObject_8","NavList","templateObject_9","hasNonFeaturedItems","concat","NavItemView","templateObject_10","spacer","NavItemContent","templateObject_11","isFeatured","featured","main","NavItemIcon","templateObject_12","NavItemLabel","NavItemCollapse","NavItemCollapseIcon","AngleRight","templateObject_15","isCollapsed","NavItemLink","templateObject_16","NavItemButton","templateObject_17","SubNavList","templateObject_18","isIndented","NavigationItem","forwardRef","ref","icon","subNavTitle","onItemClick","collapseIcon","canFocus","hasSubItems","Children","count","ariaLabel","tabIndex","MenuNav","SubItem","key","SubNavItem","sub","SubNavLink","templateObject_20","NavigationSubItem","SecondaryNavList","templateObject_21","SecondaryNavLink","templateObject_22","secondary","Item","SubList","items","length","n","map","item","i","menuFilter","hideFromMenu","uid","MenuFlyout","isIndexPage","mainNavigation","subNavigation","backdropFilter","header","footer","onClose","navItemsHeader","useLibTheme","flyoutRef","useRef","hasHeader","useMemo","hasMenuHeader","largeHeights","smallHeights","mainList","__spreadArray","subList","_c","useState","initial","getCurrentNavItem","root","activeItems","setActiveItems","_d","currentNavEl","setCurrentNavEl","_e","currentSubNavEl","setCurrentSubNavEl","useEffect","handleFocus","ev","current","target","contains","document","addEventListener","removeEventListener","scrollIntoView","block","inline","e","id","includes","hasCurrentSubItem","subItems","findIndex","prev","subItem","Menu","typeSettings","getTopHeights","navBar","topHeight","hasTopBar","getMainHeights","mainHeight","getBottomHeights","bottomHeight","hasBottomBar","getFullHeight","exclude","includeTop","indexOf","includeMain","includeBottom","topHeights","mainHeights","bottomHeights","isSticky","isAnimated","bgGradient","background","Main","Footer","TopContent","Content","BottomContent","BarSpacer","hasFooter","excludes","push","NavBar","_f","_g","pageFlow","topBg","mainBg","bottomBg","onContentBg","topBar","mainBar","bottomBar","_h","colors","clampContent","isOverContent","showBg","topBackground","mainBackground","bottomBackground","onContentBackground","topBarContent","mainBarContent","bottomBarContent","getNavbarState","ident","navbarIdent","search","hasTop","hasMain","hasBottom","isStickable","generateNavbarIdent","props","stateArray","join","rootLink","rootLabel","navItems","seperator","back","currentNavPath","getCurrentNavPath","rootItem","AngleLeft","logo","coverSpace","ratios","showPlaceholder","navLinks","isCollapsible","mediaQueries","useMediaQueries","isNavBarSticky","setIsNavBarSticky","isNavBarOpen","setNavBarOpen","settings","isTop","setIsTop","isInOffset","setIsInOffset","leftOffsetFromTop","setLeftOffsetFromTop","lastScrollPos","pxSinceLastSwitch","DOWN","scrollDirection","setScrollDirection","directionDownOffset","directionOffset","down","directionUpOffset","up","scrollState","useScrollThrottle","resizeThrottleTimeout","window","scrollY","offset","onLeftOffset","call","diff","absAccPx","Math","abs","UP","usePageScroll","navbarSize","initialMenuState","isMenuOpen","setIsMenuOpen","prevMenuState","setRoot","openBtnRef","closeBtnRef","defaultSettings","openMenuIdent","closeMenuIdent","querySelector","handleKeyDown","focus","useMenuKeyboard","openMenu","body","overflow","isOnPageTop","isInTopOffset","menuHeader","menuFooter","menuNavItemsHeader","getNavBarIdent","LibThemeProvider"],"mappings":"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"}
|