UNPKG

gatsby-remark-dictionary

Version:

Create a dictionary of word and phrases to be converted to highlighted values and links. define once and all phrases will be converted during build time.

139 lines (126 loc) 3.25 kB
import React from 'react'; import Tree from './tree'; import { StaticQuery, graphql } from 'gatsby'; import styled from '@emotion/styled'; import { ExternalLink } from 'react-feather'; import config from '../../../config'; // eslint-disable-next-line no-unused-vars const ListItem = styled(({ className, active, level, ...props }) => { return ( <li className={className}> <a href={props.to} {...props} target="_blank" rel="noopener noreferrer"> {props.children} </a> </li> ); })` list-style: none; a { color: #5c6975; text-decoration: none; font-weight: ${({ level }) => (level === 0 ? 700 : 400)}; padding: 0.45rem 0 0.45rem ${props => 2 + (props.level || 0) * 1}rem; display: block; position: relative; &:hover { color: #1ed3c6 !important; } ${props => props.active && ` // color: #663399; border-color: rgb(230,236,241) !important; border-style: solid none solid solid; border-width: 1px 0px 1px 1px; background-color: #fff; `} // external link icon svg { float: right; margin-right: 1rem; } } `; const Sidebar = styled('aside')` width: 100%; height: 100vh; overflow: auto; position: fixed; padding-left: 0px; position: -webkit-sticky; position: -moz-sticky; position: sticky; top: 0; padding-right: 0; -webkit-box-shadow: -1px 0px 4px 1px rgba(175, 158, 232, 0.4); @media only screen and (max-width: 1023px) { width: 100%; /* position: relative; */ height: 100vh; } @media (min-width: 767px) and (max-width: 1023px) { padding-left: 0; } @media only screen and (max-width: 767px) { padding-left: 0px; height: auto; } `; const Divider = styled(props => ( <li {...props}> <hr /> </li> ))` list-style: none; padding: 0.5rem 0; hr { margin: 0; padding: 0; border: 0; border-bottom: 1px solid #ede7f3; } `; const SidebarLayout = ({ location }) => ( <StaticQuery query={graphql` query { allMdx { edges { node { fields { slug title } } } } } `} render={({ allMdx }) => { return ( <Sidebar> {config.sidebar.title ? ( <div className={'sidebarTitle hiddenMobile'} dangerouslySetInnerHTML={{ __html: config.sidebar.title }} /> ) : null} <ul className={'sideBarUL'}> <Tree edges={allMdx.edges} /> {config.sidebar.links && config.sidebar.links.length > 0 && <Divider />} {config.sidebar.links.map((link, key) => { if (link.link !== '' && link.text !== '') { return ( <ListItem key={key} to={link.link}> {link.text} <ExternalLink size={14} /> </ListItem> ); } })} </ul> </Sidebar> ); }} /> ); export default SidebarLayout;