+
{
export const LeftHandSideParentContainer = ({ tableOfContents }) => {
return (
-
+
diff --git a/components/layout/DocsLayout.tsx b/components/layout/DocsLayout.tsx
index 6d8d43a738..0b7b669182 100644
--- a/components/layout/DocsLayout.tsx
+++ b/components/layout/DocsLayout.tsx
@@ -2,54 +2,51 @@ import React from 'react';
import styled from 'styled-components';
import { DefaultSeo } from 'next-seo';
import { useRouter } from 'next/router';
-import { DocumentationNavigation } from 'components/DocumentationNavigation';
-import { Footer } from './Footer';
+import { Footer } from './Footer';
import { DocsTextWrapper } from './DocsTextWrapper';
import { Overlay } from '../ui';
import { Navbar } from './Navbar';
import { Layout } from './Layout';
+import { LeftHandSideParentContainer } from 'components/docsSearch/SearchNavigation';
interface DocsLayoutProps {
navItems: any;
children: any;
}
-export const DocsLayout = React.memo(({ children, navItems }: DocsLayoutProps) => {
- const router = useRouter();
- return (
- <>
-
-
-
-
-
- {children}
-
-
-
-
-
-
- >
- );
-});
+export const DocsLayout = React.memo(
+ ({ children, navItems }: DocsLayoutProps) => {
+ const router = useRouter();
+ return (
+ <>
+
+
+
+
+
+
+
+ {children}
+
+
+
+
+
+ >
+ );
+ }
+);
const DocsLayoutGrid = styled.div`
- @media (min-width: 840px) {
- width: 100%;
- display: grid;
- grid-template-columns: min(33vw, 20rem) minmax(0, 1fr);
- grid-template-rows: auto auto 1fr auto;
- grid-template-areas:
- 'navbar navbar'
- 'sidebar header'
- 'sidebar main'
- 'sidebar footer';
-
- ${Overlay} {
- display: none;
- }
- }
+ display: grid;
+ min-height: 100vh; /* Ensure grid stretches to viewport height */
+ grid-template-columns: min(33vw, 20rem) minmax(0, 1fr);
+ grid-template-rows: auto 1fr auto; /* Header, main, footer */
+ grid-template-areas:
+ 'sidebar header'
+ 'sidebar main'
+ 'sidebar footer';
+ overflow: visible;
@media (min-width: 1200px) {
grid-template-columns: 20rem minmax(0, 1fr);
@@ -60,6 +57,16 @@ const DocsLayoutGrid = styled.div`
}
`;
+const Sidebar = styled.div`
+ grid-area: sidebar;
+ position: sticky;
+ top: 1rem;
+ padding-left: 1rem;
+ align-self: start;
+ overflow: visible;
+ margin-top: 4rem;
+`;
+
const DocsMain = styled.div`
grid-area: main;
place-self: stretch;
@@ -70,4 +77,5 @@ const DocsFooterWrapper = styled.div`
grid-area: footer;
z-index: 1;
position: relative;
+ margin-top: auto;
`;
diff --git a/components/layout/Layout.tsx b/components/layout/Layout.tsx
index 28b78519d9..3337d905d5 100644
--- a/components/layout/Layout.tsx
+++ b/components/layout/Layout.tsx
@@ -21,7 +21,7 @@ export const Layout = ({ children, color, sticky = true }: LayoutProps) => {
url: 'https://tina.io' + router.asPath,
}}
/>
-
+
{children}
diff --git a/components/styles/Prism.tsx b/components/styles/Prism.tsx
index 05fb90b730..909ea8e053 100644
--- a/components/styles/Prism.tsx
+++ b/components/styles/Prism.tsx
@@ -20,7 +20,16 @@ export const Prism = (props: {
language={props.lang || ''}
>
{({ className, style, tokens, getLineProps, getTokenProps }) => (
-
+
{tokens.map((line, i) => (
{line.map((token, key) => (
diff --git a/components/tinaMarkdownComponents/docAndBlogComponents.tsx b/components/tinaMarkdownComponents/docAndBlogComponents.tsx
index 2c030d7053..2c45c828c8 100644
--- a/components/tinaMarkdownComponents/docAndBlogComponents.tsx
+++ b/components/tinaMarkdownComponents/docAndBlogComponents.tsx
@@ -70,6 +70,12 @@ export const docAndBlogComponents: Components<{
);
},
+ code: (props) => (
+
+ ),
Summary: (props) => {
const [openTab, setOpenTab] = useState(false);
@@ -105,9 +111,9 @@ export const docAndBlogComponents: Components<{
h4: (props) => ,
h5: (props) => ,
h6: (props) => ,
- ul: (props) =>
,
+ ul: (props) =>
,
ol: (props) =>
,
- li: (props) =>
,
+ li: (props) =>
,
a: (props) => {
return (
(
+
+ ),
Iframe: ({ iframeSrc, height }) => {
return (
@@ -143,10 +159,9 @@ export const docAndBlogComponents: Components<{
),
Youtube: ({ embedSrc }) => (
-
);
},
GraphQLCodeBlock: ({ query, response, preselectResponse }) => {
@@ -330,9 +350,23 @@ function FormatHeaders({ children, level }) {
typeof window !== 'undefined' ? window.location.pathname : '';
const linkHref = `${currentUrl}#${id}`;
+ const styles = {
+ 1: 'bg-gradient-to-br from-orange-400 via-orange-500 to-orange-600 bg-clip-text text-transparent text-4xl mt-4 mb-4',
+ 2: 'bg-gradient-to-br from-orange-400 via-orange-500 to-orange-600 bg-clip-text text-transparent text-3xl mt-4 mb-3',
+ 3: 'bg-gradient-to-br from-blue-800 via-blue-900 to-blue-100 bg-clip-text text-transparent text-xl font-medium mt-2 mb-2',
+ 4: 'bg-gradient-to-br from-orange-400 via-orange-500 to-orange-600 bg-clip-text text-transparent text-xl font-medium mt-2 mb-2',
+ 5: 'bg-gradient-to-br from-orange-400 via-orange-500 to-orange-600 bg-clip-text text-transparent text-lg font-medium mt-2 mb-1',
+ 6: 'text-gray-500 text-base font-normal mt-2 mb-1',
+ };
+
return (
-
-
+
+ navigator.clipboard.writeText(`tina.io${linkHref}`)}
+ >
+ {' '}
{children}
diff --git a/components/toc/index.tsx b/components/toc/index.tsx
index 083a85d589..f9e06c36d5 100644
--- a/components/toc/index.tsx
+++ b/components/toc/index.tsx
@@ -1,45 +1,45 @@
-import { useState, useEffect } from 'react'
-import ReactMarkdown from 'react-markdown'
-import styled, { css } from 'styled-components'
-import RightArrowSvg from '../../public/svg/right-arrow.svg'
-import { getDocId } from 'utils/docs/getDocIds'
+import { useState, useEffect } from 'react';
+import ReactMarkdown from 'react-markdown';
+import styled, { css } from 'styled-components';
+import RightArrowSvg from '../../public/svg/right-arrow.svg';
+import { getDocId } from 'utils/docs/getDocIds';
interface TocProps {
- tocItems: Array<{ type: string; text: string }>
- activeIds: string[]
+ tocItems: Array<{ type: string; text: string }>;
+ activeIds: string[];
}
-const generateMarkdown = (tocItems: Array<{ type: string; text: string }>) => {
+export const generateMarkdown = (tocItems: Array<{ type: string; text: string }>) => {
return tocItems
.map((item) => {
- const anchor = getDocId(item.text)
- const prefix = item.type === 'h3' ? ' ' : ''
- return `${prefix}- [${item.text}](#${anchor})`
+ const anchor = getDocId(item.text);
+ const prefix = item.type === 'h3' ? ' ' : '';
+ return `${prefix}- [${item.text}](#${anchor})`;
})
- .join('\n')
-}
+ .join('\n');
+};
const ToC = ({ tocItems, activeIds }: TocProps) => {
- const [isOpen, setIsOpen] = useState(false)
+ const [isOpen, setIsOpen] = useState(false);
useEffect(() => {
- const close = () => setIsOpen(false)
- const allLinks = document.querySelectorAll('a')
+ const close = () => setIsOpen(false);
+ const allLinks = document.querySelectorAll('a');
if (allLinks.length > 0) {
- allLinks.forEach((a) => a.addEventListener('click', close))
+ allLinks.forEach((a) => a.addEventListener('click', close));
}
return () => {
if (allLinks.length > 0) {
- allLinks.forEach((a) => a.removeEventListener('click', close))
+ allLinks.forEach((a) => a.removeEventListener('click', close));
}
- }
- }, [])
+ };
+ }, []);
if (!tocItems || tocItems.length === 0) {
- return null
+ return null;
}
- const tocMarkdown = generateMarkdown(tocItems)
+ const tocMarkdown = generateMarkdown(tocItems);
return (
@@ -49,13 +49,28 @@ const ToC = ({ tocItems, activeIds }: TocProps) => {
Table of Contents
- {tocMarkdown}
+ (
+
+ {children}
+
+ ),
+ a: ({ children, ...props }) => (
+
+ {children}
+
+ ),
+ }}
+ >
+ {tocMarkdown}
+
- )
-}
+ );
+};
-export default ToC
+export default ToC;
export const TocDesktopHeader = styled.span`
display: none;
@@ -69,7 +84,7 @@ export const TocDesktopHeader = styled.span`
@media (min-width: 1200px) {
display: block;
}
-`
+`;
export const TocWrapper = styled.div`
margin-bottom: -0.375rem;
@@ -77,9 +92,10 @@ export const TocWrapper = styled.div`
@media (min-width: 1200px) {
position: sticky;
- top: 1.5rem;
+ top: 8rem;
+ // this now matches the sticky of the left hand toc too
}
-`
+`;
export const TocButton = styled.button<{ isOpen: boolean }>`
display: block;
@@ -134,11 +150,11 @@ export const TocButton = styled.button<{ isOpen: boolean }>`
@media (min-width: 1200px) {
display: none;
}
-`
+`;
export interface TocContentProps {
- isOpen: boolean
- activeIds: string[]
+ isOpen: boolean;
+ activeIds: string[];
}
export const TocContent = styled.div`
@@ -193,15 +209,11 @@ export const TocContent = styled.div`
a {
color: var(--color-secondary);
- /* font-family: var(--font-tuner); */
- }
+ text-decoration: underline;
- /* Hide underline except on hover or focus */
- a {
- :not(:focus) {
- :not(:hover) {
- text-decoration-color: transparent !important;
- }
+ &:hover,
+ &:focus {
+ text-decoration: none;
}
}
@@ -224,4 +236,4 @@ export const TocContent = styled.div`
}
}
}
-`
+`;
diff --git a/components/ui/DocsPagination.tsx b/components/ui/DocsPagination.tsx
index 8e7c8c67e1..f417d0e53b 100644
--- a/components/ui/DocsPagination.tsx
+++ b/components/ui/DocsPagination.tsx
@@ -23,9 +23,9 @@ export function DocsPagination({ prevPage, nextPage }: PaginationProps) {
>
Previous
-
+
{prevPage.title}
@@ -37,12 +37,12 @@ export function DocsPagination({ prevPage, nextPage }: PaginationProps) {
className="col-start-2 block p-4 text-right relative transition-all group border border-gray-100 cursor-pointer"
style={{ backgroundColor: '#FAFAFA' }}
>
-
Next
+
Next
{nextPage.title}
-
+
diff --git a/content/docs/data-fetching/custom-queries.mdx b/content/docs/data-fetching/custom-queries.mdx
index 68442a5265..0928caf7b2 100644
--- a/content/docs/data-fetching/custom-queries.mdx
+++ b/content/docs/data-fetching/custom-queries.mdx
@@ -1,14 +1,16 @@
---
id: /docs/data-fetching/custom-queries
title: Writing Custom Queries
-last_edited: '2024-08-13T00:50:07.040Z'
+last_edited: '2024-12-04T06:28:14.144Z'
+next: ''
previous: content/docs/data-fetching/overview.mdx
---
For most simple cases, you should be able to leverage the Tina Client's generated queries to do your data fetching:
```ts
-const myPost = await client.queries.post({ relativePath: 'HelloWorld.md' })
+const myPost = await client.queries.post(
+ { relativePath: 'HelloWorld.md' })
```
In more advanced cases, you may want more control on the underlying GraphQL query. In these cases you have two options:
diff --git a/content/docs/editing/blocks.mdx b/content/docs/editing/blocks.mdx
index 4bed1d71bf..b113bd7a68 100644
--- a/content/docs/editing/blocks.mdx
+++ b/content/docs/editing/blocks.mdx
@@ -1,14 +1,14 @@
---
id: /docs/editing/blocks
title: Block-based editing
-last_edited: '2024-09-29T14:32:01.268Z'
+last_edited: '2024-12-04T04:48:32.050Z'
next: content/docs/editing/single-document-collections.mdx
previous: content/docs/editing/markdown.mdx
---
Tina supports block-based editing, so that your editors can build out full pages using your pre-defined blocks.
-
+
Let's say you want your editors to build out a page, and you have 3 main "block" types to start:
@@ -33,7 +33,7 @@ const heroBlock: Template = {
defaultItem: {
tagline: "Here's some text above the other text",
headline: 'This Big Text is Totally Awesome',
- text: 'Phasellus scelerisque, libero eu finibus rutrum, risus risus accumsan libero, nec molestie urna dui a leo.',
+ text: 'Phasellus scelerisque,
},
},
fields: [
@@ -88,7 +88,7 @@ const contentBlock: Template = {
label: 'Content',
ui: {
defaultItem: {
- body: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra non, semper suscipit, posuere a, pede.',
+ body: 'Lorem ipsum dolor sit amet,
},
},
fields: [
@@ -258,7 +258,7 @@ In our case:
## Adding a visual block selector (Experimental)
-
+
diff --git a/pages/docs/[...slug].tsx b/pages/docs/[...slug].tsx
index 143f9249b7..9eef6601a4 100644
--- a/pages/docs/[...slug].tsx
+++ b/pages/docs/[...slug].tsx
@@ -1,78 +1,116 @@
-import { Breadcrumbs } from 'components/DocumentationNavigation/Breadcrumbs'
-import { DocsLayout, MarkdownContent } from 'components/layout'
-import { docAndBlogComponents } from 'components/tinaMarkdownComponents/docAndBlogComponents'
-import ToC from 'components/toc/index'
-import { DocsPagination, LastEdited, NavToggle } from 'components/ui'
-import { GetStaticPaths, GetStaticProps } from 'next'
-import { NextSeo } from 'next-seo'
-import Error from 'next/error'
-import { useRouter } from 'next/router'
-import { doc } from 'prettier'
-import React, { useEffect } from 'react'
-import styled from 'styled-components'
-import client from 'tina/__generated__/client'
-import { useTina } from 'tinacms/dist/react'
-import { TinaMarkdown } from 'tinacms/dist/rich-text'
-import { getDocsNav } from 'utils/docs/getDocProps'
-import { getSeoDescription } from 'utils/docs/getSeoDescription'
-import getTableOfContents from 'utils/docs/getTableOfContents'
-import { NotFoundError } from 'utils/error/NotFoundError'
-import { openGraphImage } from 'utils/open-graph-image'
-import { useTocListener } from 'utils/toc_helpers'
-import SetupOverview from '../../components/layout/setup-overview'
-import * as ga from '../../utils/ga'
+import { Breadcrumbs } from 'components/DocumentationNavigation/Breadcrumbs';
+import MainDocsBodyHeader from 'components/docsMain/docsMainBody';
+import { LeftHandSideParentContainer } from 'components/docsSearch/SearchNavigation';
+import { DocsLayout, Layout, MarkdownContent } from 'components/layout';
+import { docAndBlogComponents } from 'components/tinaMarkdownComponents/docAndBlogComponents';
+import ToC from 'components/toc/index';
+import { DocsPagination, LastEdited, NavToggle } from 'components/ui';
+import { GetStaticPaths, GetStaticProps } from 'next';
+import { NextSeo } from 'next-seo';
+import Error from 'next/error';
+import { useRouter } from 'next/router';
+import { doc } from 'prettier';
+import React, { useEffect, useState } from 'react';
+import styled from 'styled-components';
+import client from 'tina/__generated__/client';
+import { useTina } from 'tinacms/dist/react';
+import { TinaMarkdown } from 'tinacms/dist/rich-text';
+import { getDocsNav } from 'utils/docs/getDocProps';
+import { getSeoDescription } from 'utils/docs/getSeoDescription';
+import getTableOfContents from 'utils/docs/getTableOfContents';
+import { NotFoundError } from 'utils/error/NotFoundError';
+import { openGraphImage } from 'utils/open-graph-image';
+import { useTocListener } from 'utils/toc_helpers';
+import SetupOverview from '../../components/layout/setup-overview';
+import * as ga from '../../utils/ga';
+import { format } from 'path';
+import TocOverflowButton from 'components/docsMain/tocOverflowButton';
export function DocTemplate(props) {
if (props.new.results.data.doc._sys.filename.includes('setup-overview')) {
- return
+ return
;
}
- return <_DocTemplate {...props} />
+ return <_DocTemplate {...props} />;
}
-function _DocTemplate(props) {
+function screenResizer(){
+ const [isScreenSmallerThan1200, setIsScreenSmallerThan1200] = useState(false);
+ const [isScreenSmallerThan840, setIsScreenSmallerThan840] = useState(false);
+
+ useEffect(() => {
+ const updateScreenSize = () => {
+ setIsScreenSmallerThan1200(window.innerWidth < 1200);
+ setIsScreenSmallerThan840(window.innerWidth < 840);
+ };
+
+ updateScreenSize();
+
+ window.addEventListener('resize', updateScreenSize);
+ return () => window.removeEventListener('resize', updateScreenSize);
+ }, []);
+
+ return {isScreenSmallerThan1200, isScreenSmallerThan840};
+};
+
+function _DocTemplate(props) {
// fallback workaround
if (props.notFound) {
- return
+ return
;
}
const { data } = useTina({
query: props.new?.results.query,
data: props.new?.results.data,
variables: props.new?.results.variables,
- })
+ });
+
+ const router = useRouter();
- const router = useRouter()
- const doc_data = data.doc
+ const doc_data = data.doc;
const previousPage = {
slug: doc_data.previous?.id.slice(7, -4),
title: doc_data.previous?.title,
- }
+ };
const nextPage = {
slug: doc_data.next?.id.slice(7, -4),
title: doc_data.next?.title,
- }
- const TableOfContents = getTableOfContents(doc_data.body.children)
- const description = doc_data.seo?.description?.trim() || getSeoDescription(doc_data.body);
+ };
+ const TableOfContents = getTableOfContents(doc_data.body.children);
+ const description =
+ doc_data.seo?.description?.trim() || getSeoDescription(doc_data.body);
const title = doc_data.seo?.title || doc_data.title;
+ const { activeIds, contentRef } = useTocListener(doc_data);
+ const lastEdited = props.new.results.data.doc.last_edited;
+ const date = new Date(lastEdited);
+ const formattedDate = date.toLocaleDateString('en-US', {
+ year: 'numeric',
+ month: 'long',
+ day: 'numeric',
+ });
- const { activeIds, contentRef } = useTocListener(doc_data)
+ const isScreenSmallerThan1200 = screenResizer().isScreenSmallerThan1200;
+ const isScreenSmallerThan840 = screenResizer().isScreenSmallerThan840;
+ const gridClass = isScreenSmallerThan840
+ ? 'grid-cols-1'
+ : isScreenSmallerThan1200
+ ? 'grid-cols-[1.25fr_3fr]'
+ : 'grid-cols-[1.25fr_3fr_0.75fr]';
useEffect(() => {
const handleRouteChange = (url) => {
- ga.pageview(url)
- }
+ ga.pageview(url);
+ };
//When the component is mounted, subscribe to router changes
//and log those page views
- router.events.on('routeChangeComplete', handleRouteChange)
+ router.events.on('routeChangeComplete', handleRouteChange);
// If the component is unmounted, unsubscribe
// from the event with the `off` method
return () => {
- router.events.off('routeChangeComplete', handleRouteChange)
- }
- }, [router.events])
-
+ router.events.off('routeChangeComplete', handleRouteChange);
+ };
+ }, [router.events]);
return (
<>
@@ -86,71 +124,88 @@ function _DocTemplate(props) {
images: [openGraphImage(doc_data.title, '| TinaCMS Docs')],
}}
/>
-
-
-
-
- {doc_data.title}
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ {/* LEFT COLUMN */}
+
+
+
+ {/* MIDDLE COLUMN */}
+
+
+ {isScreenSmallerThan1200 && }
+
+
+
+ Last Edited: {formattedDate}
+
+
+
+
+ {/* RIGHT COLUMN */}
+
+
+
+
+
+
>
- )
+ );
}
-export default DocTemplate
+export default DocTemplate;
/*
* DATA FETCHING ------------------------------------------------------
*/
export const getStaticProps: GetStaticProps = async function (props) {
- let { slug: slugs } = props.params
+ let { slug: slugs } = props.params;
// @ts-ignore This should maybe always be a string[]?
- const slug = slugs.join('/')
+ const slug = slugs.join('/');
try {
const [results, navDocData] = await Promise.all([
client.queries.doc({ relativePath: `${slug}.mdx` }),
- getDocsNav()
- ])
+ getDocsNav(),
+ ]);
return {
props: {
new: { results },
navDocData,
},
- }
+ };
} catch (e) {
if (e) {
return {
props: {
error: { ...e }, //workaround since we cant return error as JSON
},
- }
+ };
} else if (e instanceof NotFoundError) {
return {
props: {
notFound: true,
},
- }
+ };
}
}
-}
+};
export const getStaticPaths: GetStaticPaths = async function () {
- const fg = require('fast-glob')
- const contentDir = './content/docs/'
- const files = await fg(`${contentDir}**/*.mdx`)
+ const fg = require('fast-glob');
+ const contentDir = './content/docs/';
+ const files = await fg(`${contentDir}**/*.mdx`);
return {
fallback: false,
paths: files
@@ -159,11 +214,11 @@ export const getStaticPaths: GetStaticPaths = async function () {
!file.endsWith('index.mdx') && !file.endsWith('product-tour.mdx')
)
.map((file) => {
- const path = file.substring(contentDir.length, file.length - 4)
- return { params: { slug: path.split('/') } }
+ const path = file.substring(contentDir.length, file.length - 4);
+ return { params: { slug: path.split('/') } };
}),
- }
-}
+ };
+};
/*
* STYLES --------------------------------------------------------------
@@ -193,12 +248,12 @@ export const DocsGrid = styled.div`
grid-column-gap: 5rem;
justify-content: left;
}
-`
+`;
export const DocGridHeader = styled.div`
grid-area: header;
width: 100%;
-`
+`;
export const DocGridToc = styled.div`
grid-area: toc;
@@ -207,16 +262,16 @@ export const DocGridToc = styled.div`
@media (min-width: 1200px) {
padding-top: 4.5rem;
}
-`
+`;
interface ContentProps {
- ref: any
+ ref: any;
}
export const DocGridContent = styled.div
`
grid-area: content;
width: 100%;
-`
+`;
export const DocsPageTitle = styled.h1`
font-size: 2rem;
@@ -232,7 +287,7 @@ export const DocsPageTitle = styled.h1`
@media (max-width: 1199px) {
margin: 0 0 1.25rem 0 !important;
}
-`
+`;
export const DocsNavToggle = styled(NavToggle)`
position: fixed;
@@ -243,4 +298,4 @@ export const DocsNavToggle = styled(NavToggle)`
@media (min-width: 999px) {
display: none;
}
-`
+`;
diff --git a/pages/docs/product-tour.tsx b/pages/docs/product-tour.tsx
index ef95a9f19c..adf3c02018 100644
--- a/pages/docs/product-tour.tsx
+++ b/pages/docs/product-tour.tsx
@@ -144,7 +144,8 @@ export default function Page(props) {
images: [openGraphImage(doc_data.title, '| TinaCMS Docs')],
}}
/>
-
+
+
@@ -153,6 +154,7 @@ export default function Page(props) {
+
@@ -174,6 +176,8 @@ export default function Page(props) {
+
+
>
)
}
diff --git a/pages/search.tsx b/pages/search.tsx
index 81a402de3f..58476d20fc 100644
--- a/pages/search.tsx
+++ b/pages/search.tsx
@@ -9,7 +9,10 @@ import {
SearchHeader,
SearchTabs,
} from 'components/docsSearch/SearchComponent';
-import { LeftHandSideParentContainer } from 'components/docsSearch/SearchNavigation';
+import {
+ DocsSearchBarHeader,
+ LeftHandSideParentContainer,
+} from 'components/docsSearch/SearchNavigation';
const DocsSearchPage = ({
tableOfContents,
@@ -29,6 +32,16 @@ const DocsSearchPage = ({