diff --git a/components/blog-detail-content.tsx b/components/blog-detail-content.tsx index 2947638..55d187f 100644 --- a/components/blog-detail-content.tsx +++ b/components/blog-detail-content.tsx @@ -462,7 +462,11 @@ export function BlogDetailContent({ post, section = "blog" }: BlogDetailContentP - + )} diff --git a/components/blog-toc.tsx b/components/blog-toc.tsx index 8ae8337..487f1f2 100644 --- a/components/blog-toc.tsx +++ b/components/blog-toc.tsx @@ -1,7 +1,14 @@ "use client"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; -import { Typography } from "poyraz-ui/atoms"; +import { Icon } from "@iconify/react"; +import { useTranslations } from "next-intl"; +import { + Button, + ButtonIcon, + ButtonLabel, + Typography, +} from "poyraz-ui/atoms"; type TocHeading = { id: string; @@ -37,9 +44,15 @@ function parseHeadings(markdown: string): TocHeading[] { type BlogTocProps = { markdown: string; onNavigate?: () => void; + showTitle?: boolean; }; -export function BlogToc({ markdown, onNavigate }: BlogTocProps) { +export function BlogToc({ + markdown, + onNavigate, + showTitle = true, +}: BlogTocProps) { + const t = useTranslations("Blog"); const headings = useMemo(() => parseHeadings(markdown), [markdown]); const [activeId, setActiveId] = useState(""); const rafRef = useRef(0); @@ -56,6 +69,11 @@ export function BlogToc({ markdown, onNavigate }: BlogTocProps) { [onNavigate], ); + const handleBackToTop = useCallback(() => { + window.scrollTo({ top: 0, behavior: "smooth" }); + onNavigate?.(); + }, [onNavigate]); + useEffect(() => { if (headings.length === 0) return; @@ -112,13 +130,18 @@ export function BlogToc({ markdown, onNavigate }: BlogTocProps) { if (headings.length < 2) return null; return ( - - - İçindekiler - + + {showTitle ? ( + + {t("toc")} + + ) : null} {headings.map((heading, index) => ( ))} + + + {t("backToTop")} + + + + + ); }