Stylize active docs link [Fixes #74, Fixes #115] (#108)

* add bold for active docs link [Fixes #74]

* Add ::before indicator to active doc link

Removes bold styling per design

* Update documentation-links.yaml

Makes it so `id` is paired with either a `to` field OR a list of `items` but not both

* Updates hover styling for left docs nav

* clean up styling

Removes remaining underlines from links styled as buttons. Cleans up logic for conditionally showing the ::before pseudo element. Makes the ::before indicator slightly larger.

* tweak ::before indicator styling

* tweak ::before indicator styling
This commit is contained in:
Paul Wackerow 2022-12-05 16:13:47 +01:00 committed by GitHub
parent 3a2a4b1cbf
commit 2ae5698622
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 134 additions and 85 deletions

View File

@ -11,6 +11,7 @@ import {
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { AddIcon, MinusIcon } from '@chakra-ui/icons'; import { AddIcon, MinusIcon } from '@chakra-ui/icons';
import NextLink from 'next/link'; import NextLink from 'next/link';
import { useRouter } from 'next/router';
import { LinksList } from './'; import { LinksList } from './';
@ -20,9 +21,14 @@ interface Props {
navLinks: NavLink[]; navLinks: NavLink[];
} }
export const DocsLinks: FC<Props> = ({ navLinks }) => ( export const DocsLinks: FC<Props> = ({ navLinks }) => {
const router = useRouter();
const { slug } = router.query;
return (
<Stack border='2px' borderColor='primary'> <Stack border='2px' borderColor='primary'>
{navLinks.map(({ id, to, items }, idx) => { {navLinks.map(({ id, to, items }, idx) => {
const split = to?.split('/')
const isActive = slug && split && split[split.length - 1] === slug[slug.length - 1];
return ( return (
<Accordion key={id} allowToggle mt='0 !important' defaultIndex={[0]}> <Accordion key={id} allowToggle mt='0 !important' defaultIndex={[0]}>
<AccordionItem border='none'> <AccordionItem border='none'>
@ -35,6 +41,7 @@ export const DocsLinks: FC<Props> = ({ navLinks }) => (
justifyContent='space-between' justifyContent='space-between'
placeContent='flex-end' placeContent='flex-end'
bg='button-bg' bg='button-bg'
data-group
> >
<Stack <Stack
p={4} p={4}
@ -42,11 +49,25 @@ export const DocsLinks: FC<Props> = ({ navLinks }) => (
borderColor='primary' borderColor='primary'
w='100%' w='100%'
bg='bg' bg='bg'
_groupHover={{ background: 'primary', color: 'bg', textDecoration: 'none' }}
> >
{to ? ( {to ? (
<NextLink href={to} passHref> <NextLink href={to} passHref>
<Link> <Link textDecoration='none !important'>
<Text textStyle='docs-nav-dropdown'>{id}</Text> <Text
textStyle='docs-nav-dropdown'
color={isActive ? 'primary' : 'unset'}
_before={{
content: '"■"',
verticalAlign: '-1.25px',
marginInlineEnd: 2,
fontSize: 'lg',
display: isActive ? 'unset' : 'none',
}}
_groupHover={{ color: 'bg' }}
>
{id}
</Text>
</Link> </Link>
</NextLink> </NextLink>
) : ( ) : (
@ -79,3 +100,4 @@ export const DocsLinks: FC<Props> = ({ navLinks }) => (
})} })}
</Stack> </Stack>
); );
}

View File

@ -1,6 +1,7 @@
import { FC } from 'react'; import { FC } from 'react';
import { Link, Stack, Text } from '@chakra-ui/react'; import { Link, Stack, Text } from '@chakra-ui/react';
import NextLink from 'next/link'; import NextLink from 'next/link';
import { useRouter } from 'next/router';
import { NavLink } from '../../../types'; import { NavLink } from '../../../types';
@ -8,14 +9,34 @@ interface LinksListProps {
links: NavLink[]; links: NavLink[];
} }
export const LinksList: FC<LinksListProps> = ({ links }) => ( export const LinksList: FC<LinksListProps> = ({ links }) => {
const router = useRouter();
const { slug } = router.query;
return (
<Stack px={4}> <Stack px={4}>
{links.map(({ id, to, items }) => { {links.map(({ id, to, items }) => {
const split = to?.split('/')
const isActive = slug && split && split[split.length - 1] === slug[slug.length - 1];
return to ? ( return to ? (
<Stack key={id}> <Stack key={id} _hover={{ background: 'primary', color: 'bg' }} data-group>
<NextLink href={to} passHref key={id}> <NextLink href={to} passHref key={id}>
<Link> <Link textDecoration='none !important'>
<Text textStyle='docs-nav-links' color={items ? 'primary' : 'body'}> <Text
textStyle='docs-nav-links'
color={items || isActive ? 'primary' : 'body'}
_before={{
content: '"■"',
verticalAlign: '-1.25px',
marginInlineEnd: 2,
fontSize: 'lg',
display: isActive ? 'unset' : 'none',
}}
_groupHover={{
color: 'bg',
boxShadow: '0 0 0 var(--chakra-space-2) var(--chakra-colors-primary)',
}}
>
{id} {id}
</Text> </Text>
</Link> </Link>
@ -33,3 +54,4 @@ export const LinksList: FC<LinksListProps> = ({ links }) => (
})} })}
</Stack> </Stack>
); );
};

View File

@ -1,6 +1,7 @@
- id: Getting started - id: Getting started
to: /docs/getting-started
items: items:
- id: Introduction
to: /docs/getting-started
- id: Hardware requirements - id: Hardware requirements
to: /docs/getting-started/hardware-requirements to: /docs/getting-started/hardware-requirements
- id: Installing Geth - id: Installing Geth
@ -8,8 +9,9 @@
- id: Consensus clients - id: Consensus clients
to: /docs/getting-started/consensus-clients to: /docs/getting-started/consensus-clients
- id: Fundamentals - id: Fundamentals
to: /docs/fundamentals
items: items:
- id: Introduction
to: /docs/fundamentals
- id: Node architecture - id: Node architecture
to: /docs/fundamentals/node-architecture to: /docs/fundamentals/node-architecture
- id: Command-line options - id: Command-line options
@ -35,8 +37,9 @@
- id: Interacting with Geth - id: Interacting with Geth
items: items:
- id: JSON-RPC Server - id: JSON-RPC Server
to: /docs/interacting-with-geth/rpc
items: items:
- id: Introduction
to: /docs/interacting-with-geth/rpc
- id: Batch requests - id: Batch requests
to: /docs/interacting-with-geth/rpc/batch to: /docs/interacting-with-geth/rpc/batch
- id: GraphQL server - id: GraphQL server
@ -70,8 +73,9 @@
- id: 'JavaScript Console 2: Contracts' - id: 'JavaScript Console 2: Contracts'
to: /docs/interacting-with-geth/javascript-console-contracts to: /docs/interacting-with-geth/javascript-console-contracts
- id: Developers - id: Developers
to: /docs/developers
items: items:
- id: Introduction
to: /docs/developers
- id: Dapp developers - id: Dapp developers
items: items:
- id: Go API - id: Go API
@ -83,8 +87,9 @@
- id: Geth for Mobile - id: Geth for Mobile
to: /docs/developers/dapp-developer/mobile to: /docs/developers/dapp-developer/mobile
- id: EVM tracing - id: EVM tracing
to: /docs/developers/evm-tracing
items: items:
- id: Introduction
to: /docs/developers/evm-tracing
- id: Basic traces - id: Basic traces
to: /docs/developers/evm-tracing/basic-traces to: /docs/developers/evm-tracing/basic-traces
- id: Built-in tracers - id: Built-in tracers