1
0
mirror of synced 2025-12-21 10:57:10 -05:00
Files
docs/components/article/ArticleGridLayout.tsx
Kevin Heis 6ec20638b5 Version picker combo (#22694)
* Move version picker next to product picker

* Always render in header

* Inline variant

* Remove topper-sidebar

* Handle breadcrumb length

* Have breadcrumbs use Primer breakpoint

* Make a breadcrumbs scss module

* Update Breadcrumbs.tsx

* Update Breadcrumbs.module.scss

* Update Breadcrumbs.module.scss

* Update server.js

* Use responsive classes for hide/show breadcrumb
2021-11-10 16:20:34 +00:00

71 lines
1.7 KiB
TypeScript

import React from 'react'
import styled from 'styled-components'
import { Box, themeGet } from '@primer/components'
type Props = {
intro?: React.ReactNode
topper?: React.ReactNode
toc?: React.ReactNode
children?: React.ReactNode
className?: string
}
export const ArticleGridLayout = ({ intro, topper, toc, children, className }: Props) => {
return (
<Container className={className}>
{topper && <Box gridArea="topper">{topper}</Box>}
{toc && (
<SidebarContent
gridArea="sidebar"
alignSelf="flex-start"
className="border-bottom border-xl-0 pb-4 mb-5 pb-xl-0 mb-xl-0"
>
{toc}
</SidebarContent>
)}
{intro && <Box gridArea="intro">{intro}</Box>}
<Box gridArea="content" data-search="article-body">
{children}
</Box>
</Container>
)
}
const Container = styled(Box)`
max-width: 720px;
display: grid;
grid-template-columns: minmax(0, 1fr);
grid-template-areas:
'topper'
'intro'
'sidebar'
'content';
row-gap: ${themeGet('space.2')};
@media (min-width: ${themeGet('breakpoints.3')}) {
max-width: none;
padding-top: ${themeGet('space.4')};
grid-template-rows: auto 1fr;
grid-template-columns: minmax(500px, 720px) minmax(220px, 1fr);
grid-template-areas:
'topper sidebar'
'intro sidebar'
'content sidebar';
column-gap: ${themeGet('space.9')};
row-gap: 0;
}
`
const SidebarContent = styled(Box)`
@media (min-width: ${themeGet('breakpoints.3')}) {
position: sticky;
padding-top: ${themeGet('space.4')};
top: 4em;
max-height: calc(100vh - ${themeGet('space.4')});
overflow-y: auto;
padding-bottom: ${themeGet('space.4')};
}
`