diff --git a/apps/renderer/src/atoms/sidebar.ts b/apps/renderer/src/atoms/sidebar.ts index 8eb66b845f..1300157a24 100644 --- a/apps/renderer/src/atoms/sidebar.ts +++ b/apps/renderer/src/atoms/sidebar.ts @@ -48,6 +48,9 @@ viewAtom.onMount = () => { setSidebarActiveView(view) } } -export const [, , useFeedColumnShow, , , setFeedColumnShow] = createAtomHooks(atom(true)) +export const [, , useFeedColumnShow, , getFeedColumnShow, setFeedColumnShow] = createAtomHooks( + atom(true), +) -export const [, , useFeedColumnTempShow, , , setFeedColumnTempShow] = createAtomHooks(atom(false)) +export const [, , useFeedColumnTempShow, , getFeedColumnTempShow, setFeedColumnTempShow] = + createAtomHooks(atom(false)) diff --git a/apps/renderer/src/components/ui/markdown/components/Toc.tsx b/apps/renderer/src/components/ui/markdown/components/Toc.tsx index bb43dc2702..4ee4ee682a 100644 --- a/apps/renderer/src/components/ui/markdown/components/Toc.tsx +++ b/apps/renderer/src/components/ui/markdown/components/Toc.tsx @@ -19,6 +19,7 @@ import { springScrollToElement } from "~/lib/scroller" import { cn } from "~/lib/utils" import { useGetWrappedElementPosition, + useWrappedElementPosition, useWrappedElementSize, } from "~/providers/wrapped-element-provider" @@ -81,7 +82,7 @@ export const Toc: Component = ({ className }) => { [toc], ) - const [_, setTreeRef] = useState() + const [_, setTreeRef] = useState() const scrollContainerElement = useScrollViewElement() @@ -195,12 +196,44 @@ export const Toc: Component = ({ className }) => { const [hoverShow, setHoverShow] = useState(false) + const renderContentElementPosition = useWrappedElementPosition() + const renderContentElementSize = useWrappedElementSize() + + const xAxis = renderContentElementPosition.x + renderContentElementSize.w + const w = window.innerWidth + + const shouldShowTitle = w - xAxis > 300 + if (toc.length === 0) return null + + if (shouldShowTitle) + return ( +
+ {toc.map((heading, index) => ( + + ))} +
+ ) return (
-
    { range={index === currentScrollRange[0] ? currentScrollRange[1] : 0} /> ))} -
+
diff --git a/apps/renderer/src/components/ui/markdown/components/TocItem.tsx b/apps/renderer/src/components/ui/markdown/components/TocItem.tsx index db1627fe34..6b04d390ea 100644 --- a/apps/renderer/src/components/ui/markdown/components/TocItem.tsx +++ b/apps/renderer/src/components/ui/markdown/components/TocItem.tsx @@ -3,6 +3,8 @@ import { memo, useCallback, useRef } from "react" import { cn } from "~/lib/utils" +import { EllipsisHorizontalTextWithTooltip } from "../../typography" + export interface ITocItem { depth: number title: string @@ -20,20 +22,29 @@ export interface TocItemProps { isScrollOut: boolean range: number + variant?: "line" | "title-line" } export const TocItem: FC = memo((props) => { - const { onClick, heading, isScrollOut, range } = props + const { onClick, heading, isScrollOut, range, variant = "line", rootDepth } = props const { $heading, anchorId, depth, index, title } = heading const $ref = useRef(null) + const isTitleLine = variant === "title-line" return (