UNPKG

@atlaskit/page-layout

Version:

A collection of components which let you compose an application's page layout.

76 lines (74 loc) 3.12 kB
import _extends from "@babel/runtime/helpers/extends"; /** * @jsxRuntime classic * @jsx jsx */ import { useEffect } from 'react'; // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766 import { css, jsx } from '@emotion/react'; import { BANNER_HEIGHT, DEFAULT_TOP_NAVIGATION_HEIGHT, LEFT_PANEL_WIDTH, RIGHT_PANEL_WIDTH, TOP_NAVIGATION, TOP_NAVIGATION_HEIGHT, VAR_TOP_NAVIGATION_HEIGHT } from '../../common/constants'; import { getPageLayoutSlotSelector, resolveDimension } from '../../common/utils'; import { publishGridState, useSkipLink } from '../../controllers'; import SlotFocusRing from './internal/slot-focus-ring'; import SlotDimensions from './slot-dimensions'; const topNavigationStyles = css({ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 height: TOP_NAVIGATION_HEIGHT, // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 gridArea: TOP_NAVIGATION }); const fixedStyles = css({ position: 'fixed', zIndex: 2, // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 insetBlockStart: BANNER_HEIGHT, // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 insetInlineEnd: RIGHT_PANEL_WIDTH, // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 insetInlineStart: LEFT_PANEL_WIDTH }); /** * __Top navigation__ * * Provides a slot for top navigation within the PageLayout. * * - [Examples](https://atlassian.design/components/page-layout/examples) * - [Code](https://atlassian.design/components/page-layout/code) */ const TopNavigation = props => { const { children, height = DEFAULT_TOP_NAVIGATION_HEIGHT, isFixed = true, shouldPersistHeight, testId, id, skipLinkTitle } = props; const topNavigationHeight = resolveDimension(VAR_TOP_NAVIGATION_HEIGHT, height, shouldPersistHeight); useEffect(() => { publishGridState({ [VAR_TOP_NAVIGATION_HEIGHT]: topNavigationHeight }); return () => { publishGridState({ [VAR_TOP_NAVIGATION_HEIGHT]: 0 }); }; }, [topNavigationHeight]); useSkipLink(id, skipLinkTitle); return jsx(SlotFocusRing, null, ({ className }) => jsx("div", _extends({ css: [topNavigationStyles, isFixed && fixedStyles] // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 , className: className, "data-testid": testId, id: id }, getPageLayoutSlotSelector('top-navigation')), jsx(SlotDimensions, { variableName: VAR_TOP_NAVIGATION_HEIGHT, value: topNavigationHeight }), children)); }; export default TopNavigation;