From 042b850b5df8200dae03e7bfd5794a99501cd915 Mon Sep 17 00:00:00 2001 From: Brett Jephson Date: Tue, 24 Sep 2024 16:24:55 +0100 Subject: [PATCH 1/2] RND-2147: automatically scroll TOC (#2478) --- .changeset/lovely-hats-peel.md | 5 ++ .../TableOfContents/TOCScroller.tsx | 70 +++++++++++++++++++ .../TableOfContents/TableOfContents.tsx | 5 +- .../TableOfContents/ToggleableLinkItem.tsx | 16 ++--- 4 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 .changeset/lovely-hats-peel.md create mode 100644 packages/gitbook/src/components/TableOfContents/TOCScroller.tsx diff --git a/.changeset/lovely-hats-peel.md b/.changeset/lovely-hats-peel.md new file mode 100644 index 000000000..92051b6f2 --- /dev/null +++ b/.changeset/lovely-hats-peel.md @@ -0,0 +1,5 @@ +--- +'gitbook': patch +--- + +Automatically scroll to active item in TOC diff --git a/packages/gitbook/src/components/TableOfContents/TOCScroller.tsx b/packages/gitbook/src/components/TableOfContents/TOCScroller.tsx new file mode 100644 index 000000000..24382fbf3 --- /dev/null +++ b/packages/gitbook/src/components/TableOfContents/TOCScroller.tsx @@ -0,0 +1,70 @@ +'use client'; + +import React from 'react'; + +import { ClassValue, tcls } from '@/lib/tailwind'; + +const TOCScrollContainerRefContext = React.createContext | null>( + null, +); + +function useTOCScrollContainerRefContext() { + const ctx = React.useContext(TOCScrollContainerRefContext); + if (!ctx) { + throw new Error('Context `TOCScrollContainerRefContext` must be used within Provider'); + } + return ctx; +} + +export function TOCScrollContainer(props: { children: React.ReactNode; className?: ClassValue }) { + const { children, className } = props; + const scrollContainerRef = React.createRef(); + + return ( + +
+ {children} +
+
+ ); +} + +// Offset to scroll the table of contents item by. +const TOC_ITEM_OFFSET = 200; + +/** + * Scrolls the table of contents container to the page item when it becomes active + */ +export function useScrollToActiveTOCItem(props: { + isActive: boolean; + linkRef: React.RefObject; +}) { + const { isActive, linkRef } = props; + const scrollContainerRef = useTOCScrollContainerRefContext(); + const isScrolled = React.useRef(false); + React.useLayoutEffect(() => { + if (!isActive) { + isScrolled.current = false; + return; + } + if (isScrolled.current) { + return; + } + const tocItem = linkRef.current; + const tocContainer = scrollContainerRef.current; + if (!tocItem || !tocContainer || !isOutOfView(tocItem, tocContainer)) { + return; + } + tocContainer?.scrollTo({ + top: tocItem.offsetTop - TOC_ITEM_OFFSET, + }); + isScrolled.current = true; + }, [isActive, linkRef, scrollContainerRef]); +} + +function isOutOfView(tocItem: HTMLElement, tocContainer: HTMLElement) { + const tocItemTop = tocItem.offsetTop; + const containerTop = tocContainer.scrollTop; + const containerBottom = containerTop + tocContainer.clientHeight; + return tocItemTop < containerTop || tocItemTop > containerBottom; +} diff --git a/packages/gitbook/src/components/TableOfContents/TableOfContents.tsx b/packages/gitbook/src/components/TableOfContents/TableOfContents.tsx index 4fec88bac..58dcd07e6 100644 --- a/packages/gitbook/src/components/TableOfContents/TableOfContents.tsx +++ b/packages/gitbook/src/components/TableOfContents/TableOfContents.tsx @@ -13,6 +13,7 @@ import { ContentRefContext } from '@/lib/references'; import { tcls } from '@/lib/tailwind'; import { PagesList } from './PagesList'; +import { TOCScrollContainer } from './TOCScroller'; import { Trademark } from './Trademark'; export function TableOfContents(props: { @@ -55,7 +56,7 @@ export function TableOfContents(props: { )} > {header ? header : null} -
) : null} -
+ ); } diff --git a/packages/gitbook/src/components/TableOfContents/ToggleableLinkItem.tsx b/packages/gitbook/src/components/TableOfContents/ToggleableLinkItem.tsx index 6610291b3..c04679a5b 100644 --- a/packages/gitbook/src/components/TableOfContents/ToggleableLinkItem.tsx +++ b/packages/gitbook/src/components/TableOfContents/ToggleableLinkItem.tsx @@ -7,6 +7,8 @@ import React from 'react'; import { tcls } from '@/lib/tailwind'; +import { useScrollToActiveTOCItem } from './TOCScroller'; +import { useIsMounted } from '../hooks'; import { Link } from '../primitives'; const show = { @@ -46,6 +48,7 @@ export function ToggleableLinkItem(props: { const [scope, animate] = useAnimate(); const [isVisible, setIsVisible] = React.useState(hasActiveDescendant); + const isMounted = useIsMounted(); // Update the visibility of the children, if we are navigating to a descendant. React.useEffect(() => { @@ -59,10 +62,9 @@ export function ToggleableLinkItem(props: { // Animate the visibility of the children // only after the initial state. React.useEffect(() => { - if (!mountedRef.current || !hasDescendants) { + if (!isMounted || !hasDescendants) { return; } - try { animate(scope.current, isVisible ? show : hide, { duration: 0.1, @@ -84,17 +86,15 @@ export function ToggleableLinkItem(props: { // The selector can crash in some browsers, we ignore it as the animation is not critical. console.error(error); } - }, [isVisible, hasDescendants, animate, scope]); + }, [isVisible, isMounted, hasDescendants, animate, scope]); - // Track if the component is mounted. - const mountedRef = React.useRef(false); - React.useEffect(() => { - mountedRef.current = true; - }, []); + const linkRef = React.createRef(); + useScrollToActiveTOCItem({ linkRef, isActive }); return (
Date: Tue, 24 Sep 2024 17:25:58 +0200 Subject: [PATCH 2/2] Fix next-on-pages configuration for ~gitbook/static (#2482) --- .changeset/khaki-phones-jog.md | 5 +++++ bun.lockb | Bin 680712 -> 675880 bytes packages/gitbook/_routes.json | 4 ++++ packages/gitbook/package.json | 2 +- packages/gitbook/public/_headers | 3 +++ 5 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .changeset/khaki-phones-jog.md create mode 100644 packages/gitbook/_routes.json create mode 100644 packages/gitbook/public/_headers diff --git a/.changeset/khaki-phones-jog.md b/.changeset/khaki-phones-jog.md new file mode 100644 index 000000000..fc3905c60 --- /dev/null +++ b/.changeset/khaki-phones-jog.md @@ -0,0 +1,5 @@ +--- +'gitbook': patch +--- + +Fix GitBook specific static assets not being served correctly when deployed on Cloudflare diff --git a/bun.lockb b/bun.lockb index 7da1719ec0874bd9a8a025c55624c70efe4589ce..2cb95c8350a2297ff308bfc8bef6633410f083b1 100755 GIT binary patch delta 10009 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 delta 12360 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 diff --git a/packages/gitbook/_routes.json b/packages/gitbook/_routes.json new file mode 100644 index 000000000..8f1cb3e1a --- /dev/null +++ b/packages/gitbook/_routes.json @@ -0,0 +1,4 @@ +{ + "version": 1, + "exclude": ["/~gitbook/static/*"] +} diff --git a/packages/gitbook/package.json b/packages/gitbook/package.json index 0a9dbdd8e..d9f867570 100644 --- a/packages/gitbook/package.json +++ b/packages/gitbook/package.json @@ -68,7 +68,7 @@ "devDependencies": { "@argos-ci/playwright": "^2.0.0", "@playwright/test": "^1.42.1", - "@cloudflare/next-on-pages": "^1.12.1", + "@cloudflare/next-on-pages": "^1.13.3", "@cloudflare/workers-types": "^4.20240725.0", "@types/js-cookie": "^3.0.6", "@types/jsontoxml": "^1.0.5", diff --git a/packages/gitbook/public/_headers b/packages/gitbook/public/_headers new file mode 100644 index 000000000..193088b36 --- /dev/null +++ b/packages/gitbook/public/_headers @@ -0,0 +1,3 @@ +# GitBook immutable static assets +/~gitbook/static/* + cache-control: public,max-age=31536000,immutable