@@ -11,38 +11,64 @@ export function useMDXComponents(components) {
1111
1212 return {
1313 ...blogComponents ,
14- wrapper ( { children, metadata } ) {
14+ wrapper ( { children, metadata, toc } ) {
1515 const date = formatDate ( metadata ?. date ) ;
1616 const tags = metadata ?. tags ?? [ ] ;
17+ const filteredToc = Array . isArray ( toc ) ? toc . filter ( ( item ) => item . depth <= 3 ) : [ ] ;
18+ const hasToc = filteredToc . length > 0 ;
1719
1820 return (
1921 < >
20- { metadata ?. ogImage ? (
21- < img
22- src = { metadata . ogImage }
23- alt = { metadata . title ?? "Blog cover image" }
24- className = "typia-blog-hero"
25- />
26- ) : null }
27- < h1 > { metadata ?. title } </ h1 >
28- < div className = "typia-blog-meta" >
29- { date ? < time dateTime = { date . toISOString ( ) } > { date . toLocaleDateString ( ) } </ time > : null }
30- { metadata ?. author ? < span > { metadata . author } </ span > : null }
31- { metadata ?. devtoUrl ? (
32- < a href = { metadata . devtoUrl } target = "_blank" rel = "noreferrer" >
33- Original on DEV
34- </ a >
22+ < div className = { hasToc ? "typia-blog-post-layout" : undefined } >
23+ < div className = "typia-blog-post-main" >
24+ { metadata ?. ogImage ? (
25+ < img
26+ src = { metadata . ogImage }
27+ alt = { metadata . title ?? "Blog cover image" }
28+ className = "typia-blog-hero"
29+ />
30+ ) : null }
31+ < h1 > { metadata ?. title } </ h1 >
32+ < div className = "typia-blog-meta" >
33+ { date ? (
34+ < time dateTime = { date . toISOString ( ) } > { date . toLocaleDateString ( ) } </ time >
35+ ) : null }
36+ { metadata ?. author ? < span > { metadata . author } </ span > : null }
37+ { metadata ?. devtoUrl ? (
38+ < a href = { metadata . devtoUrl } target = "_blank" rel = "noreferrer" >
39+ Original on DEV
40+ </ a >
41+ ) : null }
42+ </ div >
43+ { tags . length ? (
44+ < div className = "typia-blog-tags" >
45+ { tags . map ( ( tag ) => (
46+ < span key = { tag } > #{ tag } </ span >
47+ ) ) }
48+ </ div >
49+ ) : null }
50+ { children }
51+ < GiscusComments />
52+ </ div >
53+ { hasToc ? (
54+ < aside className = "typia-blog-toc" aria-label = "Table of contents" >
55+ < div className = "typia-blog-toc-inner" >
56+ < div className = "typia-blog-toc-title" > On This Page</ div >
57+ < nav >
58+ { filteredToc . map ( ( item ) => (
59+ < a
60+ key = { item . id }
61+ href = { `#${ item . id } ` }
62+ className = { `typia-blog-toc-link typia-blog-toc-depth-${ item . depth } ` }
63+ >
64+ { item . value }
65+ </ a >
66+ ) ) }
67+ </ nav >
68+ </ div >
69+ </ aside >
3570 ) : null }
3671 </ div >
37- { tags . length ? (
38- < div className = "typia-blog-tags" >
39- { tags . map ( ( tag ) => (
40- < span key = { tag } > #{ tag } </ span >
41- ) ) }
42- </ div >
43- ) : null }
44- { children }
45- < GiscusComments />
4672 </ >
4773 ) ;
4874 } ,
0 commit comments