mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-18 16:45:11 +00:00
2fdf3e3838
* Suspense boundary and progressive loading on blocks * Start refactoring to better leverage app router * Use skeleton for page layout * Improve dynamic toc * Switch page full width to be client side only * Format * Remove old PageLoading * Fix first page not marked as active * Close search when clicking search link
104 lines
3.4 KiB
TypeScript
104 lines
3.4 KiB
TypeScript
import {
|
|
CustomizationSettings,
|
|
Revision,
|
|
RevisionPageDocument,
|
|
RevisionPageGroup,
|
|
Space,
|
|
} from '@gitbook/api';
|
|
import React from 'react';
|
|
|
|
import { ContentPointer } from '@/lib/api';
|
|
import { ContentRefContext } from '@/lib/references';
|
|
import { tcls } from '@/lib/tailwind';
|
|
|
|
import { PagesList } from './PagesList';
|
|
import { Trademark } from './Trademark';
|
|
|
|
export function TableOfContents(props: {
|
|
space: Space;
|
|
customization: CustomizationSettings;
|
|
content: ContentPointer;
|
|
context: ContentRefContext;
|
|
pages: Revision['pages'];
|
|
ancestors: Array<RevisionPageDocument | RevisionPageGroup>;
|
|
header?: React.ReactNode;
|
|
withHeaderOffset: boolean;
|
|
visibleOnDesktop: boolean;
|
|
}) {
|
|
const {
|
|
space,
|
|
customization,
|
|
pages,
|
|
ancestors,
|
|
header,
|
|
context,
|
|
withHeaderOffset,
|
|
visibleOnDesktop,
|
|
} = props;
|
|
|
|
return (
|
|
<aside
|
|
className={tcls(
|
|
'relative',
|
|
'group',
|
|
'flex',
|
|
'flex-col',
|
|
'basis-full',
|
|
'bg-light',
|
|
'grow-0',
|
|
'shrink-0',
|
|
'shadow-transparent',
|
|
'shadow-thinbottom',
|
|
'navigation-open:shadow-dark/2',
|
|
'z-[1]',
|
|
'top-0',
|
|
`h-[100vh]`,
|
|
'lg:basis-72',
|
|
'lg:navigation-open:border-b-0',
|
|
'lg:sticky',
|
|
'dark:bg-dark',
|
|
'dark:navigation-open:shadow-light/2',
|
|
withHeaderOffset ? 'lg:h-[calc(100vh_-_4rem)]' : 'lg:h-[100vh]',
|
|
withHeaderOffset ? 'lg:top-16' : 'lg:top-0',
|
|
visibleOnDesktop ? null : 'lg:hidden',
|
|
|
|
/* withHeaderOffset ? SIDE_COLUMN_WITH_HEADER : SIDE_COLUMN_WITHOUT_HEADER, */
|
|
)}
|
|
>
|
|
{header ? header : null}
|
|
<div
|
|
className={tcls(
|
|
withHeaderOffset ? 'pt-4' : null,
|
|
'hidden',
|
|
'lg:flex',
|
|
'flex-grow',
|
|
'flex-col',
|
|
'overflow-y-auto',
|
|
'lg:gutter-stable',
|
|
'lg:pr-2',
|
|
'group-hover:[&::-webkit-scrollbar]:bg-dark/1',
|
|
'group-hover:[&::-webkit-scrollbar-thumb]:bg-dark/3',
|
|
'[&::-webkit-scrollbar]:bg-transparent',
|
|
'[&::-webkit-scrollbar-thumb]:bg-transparent',
|
|
'dark:[&::-webkit-scrollbar]:bg-transparent',
|
|
'dark:[&::-webkit-scrollbar-thumb]:bg-transparent',
|
|
'dark:group-hover:[&::-webkit-scrollbar]:bg-light/1',
|
|
'dark:group-hover:[&::-webkit-scrollbar-thumb]:bg-light/3',
|
|
'navigation-open:flex', // can be auto height animated as such https://stackoverflow.com/a/76944290
|
|
/* header ? 'pt-3' : 'pt-6', */
|
|
'lg:-ml-5',
|
|
'lg:pb-16',
|
|
)}
|
|
>
|
|
<PagesList
|
|
rootPages={pages}
|
|
pages={pages}
|
|
ancestors={ancestors}
|
|
context={context}
|
|
/>
|
|
<Trademark space={space} customization={customization} />
|
|
</div>
|
|
</aside>
|
|
);
|
|
}
|