import { css, Global } from '@emotion/react'; import { breakpoints, spacing, theme } from '@expo/styleguide'; import React, { PropsWithChildren, ReactNode } from 'react'; import { Header } from '~/ui/components/Header'; import { LayoutScroll } from '~/ui/components/Layout'; type LayoutProps = PropsWithChildren<{ // The content within the top bar that spans the columns header?: ReactNode; // The content within the left column navigation?: ReactNode; // The content within the right column sidebar?: ReactNode; }>; export const Layout = ({ header =
, navigation, sidebar, children }: LayoutProps) => ( <>
{header}
{navigation && }
{children}
{sidebar && }
); const HEADER_HEIGHT = 60; const layoutStyle = css({ display: 'flex', alignItems: 'stretch', maxHeight: `calc(100vh - ${HEADER_HEIGHT}px)`, marginTop: HEADER_HEIGHT, backgroundColor: theme.background.default, '[data-expo-theme="dark"] &': { backgroundColor: theme.background.screen, }, [`@media screen and (max-width: ${breakpoints.medium}px)`]: { // Ditch inner scroll on mobile, which results in weird bugs maxHeight: 'none', }, }); const headerStyle = css({ position: 'fixed', top: 0, width: '100%', height: HEADER_HEIGHT, zIndex: 100, }); const navigationStyle = css({ flexBasis: 256, [`@media screen and (max-width: ${breakpoints.medium}px)`]: { display: 'none', }, }); const innerContentStyle = css({ margin: '0 auto', maxWidth: breakpoints.large, padding: `${spacing[8]}px ${spacing[4]}px`, }); const asideStyle = css({ flexBasis: 288, [`@media screen and (max-width: ${breakpoints.medium}px)`]: { display: 'none', }, });