From 5c0f853929b86a6f4ab6c4b5063fec1e33f1f661 Mon Sep 17 00:00:00 2001 From: Innei Date: Mon, 26 Jun 2023 00:38:19 +0800 Subject: [PATCH] feat: toc modal in mobile Signed-off-by: Innei --- src/atoms/viewport.ts | 9 + src/components/layout/root/Root.tsx | 5 + src/components/ui/fab/FABContainer.tsx | 7 +- src/components/ui/markdown/Markdown.tsx | 2 + .../ui/markdown/markdown.module.css | 8 + .../ui/markdown/renderers/collapse.module.css | 15 -- .../ui/markdown/renderers/collapse.tsx | 20 +- src/components/ui/viewport/OnlyMobile.tsx | 10 +- src/components/widgets/toc/TocAside.tsx | 85 ++++++++ src/components/widgets/toc/TocFAB.tsx | 42 ++++ src/components/widgets/toc/TocItem.tsx | 30 +-- .../widgets/toc/{Toc.tsx => TocTree.tsx} | 184 ++++++------------ src/components/widgets/toc/index.ts | 2 +- src/constants/dom-id.ts | 1 + src/styles/tailwindcss.css | 4 + 15 files changed, 252 insertions(+), 172 deletions(-) delete mode 100644 src/components/ui/markdown/renderers/collapse.module.css create mode 100644 src/components/widgets/toc/TocAside.tsx create mode 100644 src/components/widgets/toc/TocFAB.tsx rename src/components/widgets/toc/{Toc.tsx => TocTree.tsx} (64%) create mode 100644 src/constants/dom-id.ts diff --git a/src/atoms/viewport.ts b/src/atoms/viewport.ts index e5e564489d..fa24bc2282 100644 --- a/src/atoms/viewport.ts +++ b/src/atoms/viewport.ts @@ -43,3 +43,12 @@ export const useViewport = ( useCallback((atomValue) => selector(atomValue), []), ), ) + +export const useIsMobile = () => + useViewport( + useCallback( + (v: ExtractAtomValue) => + (v.sm || v.md || !v.sm) && !v.lg, + [], + ), + ) diff --git a/src/components/layout/root/Root.tsx b/src/components/layout/root/Root.tsx index 03027e96c8..1e9b32d880 100644 --- a/src/components/layout/root/Root.tsx +++ b/src/components/layout/root/Root.tsx @@ -1,4 +1,6 @@ import { BackToTopFAB, FABContainer } from '~/components/ui/fab' +import { OnlyMobile } from '~/components/ui/viewport/OnlyMobile' +import { TocFAB } from '~/components/widgets/toc/TocFAB' import { Content } from '../content/Content' import { Footer } from '../footer' @@ -13,6 +15,9 @@ export const Root: Component = ({ children }) => {