From bfda1240bdbacaaeaae958fa3d4f72aa74eea59c Mon Sep 17 00:00:00 2001 From: ParkWonYeop Date: Sun, 28 Dec 2025 04:16:36 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=AA=A9=EC=B0=A8=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?,=20=ED=8F=AC=EC=8A=A4=ED=8C=85=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 2 + package.json | 2 + src/app/layout.tsx | 9 +- src/components/layout/Sidebar.tsx | 12 +- src/components/post/MarkdownRenderer.tsx | 34 +++--- src/components/post/PostDetailClient.tsx | 124 ++++++++++++--------- src/components/post/TOC.tsx | 133 +++++++++++++++++++++++ src/types/index.ts | 13 ++- yarn.lock | 2 +- 9 files changed, 255 insertions(+), 76 deletions(-) create mode 100644 src/components/post/TOC.tsx diff --git a/package-lock.json b/package-lock.json index e3dba12..a7f38f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "axios": "^1.13.2", "clsx": "^2.1.1", "date-fns": "^4.1.0", + "github-slugger": "^2.0.0", "jwt-decode": "^4.0.0", "lucide-react": "^0.562.0", "next": "16.1.1", @@ -27,6 +28,7 @@ "react-markdown": "^10.1.0", "react-syntax-highlighter": "^16.1.0", "rehype-sanitize": "^6.0.0", + "rehype-slug": "^6.0.0", "remark-gfm": "^4.0.1", "yarn": "^1.22.22", "zustand": "^5.0.9" diff --git a/package.json b/package.json index ee8cef8..04a5158 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "axios": "^1.13.2", "clsx": "^2.1.1", "date-fns": "^4.1.0", + "github-slugger": "^2.0.0", "jwt-decode": "^4.0.0", "lucide-react": "^0.562.0", "next": "16.1.1", @@ -28,6 +29,7 @@ "react-markdown": "^10.1.0", "react-syntax-highlighter": "^16.1.0", "rehype-sanitize": "^6.0.0", + "rehype-slug": "^6.0.0", "remark-gfm": "^4.0.1", "yarn": "^1.22.22", "zustand": "^5.0.9" diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 32b1812..9218b04 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -3,7 +3,7 @@ import './globals.css'; import Providers from './providers'; import Sidebar from '@/components/layout/Sidebar'; import TopHeader from '@/components/layout/TopHeader'; -import Script from 'next/script'; // ๐Ÿ‘ˆ Script ์ปดํฌ๋„ŒํŠธ ์ž„ํฌํŠธ +import Script from 'next/script'; export const metadata: Metadata = { title: 'WYPark Blog', @@ -21,8 +21,7 @@ export default function RootLayout({ - {/* ๐ŸŒŸ Google Analytics ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€ */} - {/* strategy="afterInteractive"๋Š” ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋œ ์งํ›„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. */} + {/* ๐ŸŒŸ Google Analytics ์Šคํฌ๋ฆฝํŠธ */}