11import { blogInitialsFont } from "@/lib/fonts" ;
22import type { ReactNode } from "react" ;
3- import { BlogSettingsProvider , useBlogSettings } from "@/components/Blog/settings" ;
3+ import {
4+ BlogSettingsProvider ,
5+ useBlogSettings ,
6+ } from "@/components/Blog/settings" ;
47import {
58 DropdownMenu ,
69 DropdownMenuContent ,
@@ -20,82 +23,92 @@ import { useTheme } from "next-themes";
2023import { Ellipsis } from "lucide-react" ;
2124type Props = {
2225 children : ReactNode ;
26+ isIndexPage : boolean ;
2327 footer ?: ReactNode ;
2428} ;
2529
26- function Header ( ) {
30+ function MNFMenu ( props : { variant : "index" | "note" } ) {
2731 const { theme, setTheme } = useTheme ( ) ;
2832 const {
2933 settings : { showCommitInformation } ,
3034 setShowCommitInformation,
3135 } = useBlogSettings ( ) ;
3236
37+ return (
38+ < DropdownMenu >
39+ < DropdownMenuTrigger
40+ className = { `md:inline-block bold ${ blogInitialsFont . className } text-4xl relative inline-block after:content-['.'] after:absolute after:left-full` }
41+ render = { < button > mnf</ button > }
42+ />
43+ < DropdownMenuContent className = "" align = "center" >
44+ < DropdownMenuLinkItem href = "/blog" > Home</ DropdownMenuLinkItem >
45+ < DropdownMenuSeparator />
46+ { props . variant == "note" ? (
47+ < DropdownMenuGroup >
48+ < DropdownMenuGroupLabel > UI Elements</ DropdownMenuGroupLabel >
49+ { /* Place holder */ }
50+ < DropdownMenuCheckboxItem disabled >
51+ Table of Contents
52+ </ DropdownMenuCheckboxItem >
53+
54+ < DropdownMenuSub >
55+ < DropdownMenuSubTrigger > Footer</ DropdownMenuSubTrigger >
56+ < DropdownMenuSubContent >
57+ < DropdownMenuCheckboxItem
58+ checked = { showCommitInformation }
59+ onCheckedChange = { ( checked ) =>
60+ setShowCommitInformation ( checked === true )
61+ }
62+ >
63+ Commit Information
64+ </ DropdownMenuCheckboxItem >
65+ { /* Place holder */ }
66+ < DropdownMenuCheckboxItem disabled >
67+ { "Views & Likes" }
68+ </ DropdownMenuCheckboxItem >
69+ </ DropdownMenuSubContent >
70+ </ DropdownMenuSub >
71+ </ DropdownMenuGroup >
72+ ) : null }
73+ < DropdownMenuGroup >
74+ < DropdownMenuGroupLabel > Theme</ DropdownMenuGroupLabel >
75+ < DropdownMenuRadioGroup
76+ onValueChange = { ( value ) => setTheme ( value ) }
77+ value = { theme }
78+ >
79+ < DropdownMenuRadioItem
80+ onSelect = { ( e ) => e . preventDefault ( ) }
81+ value = "light"
82+ className = "hover:cursor-pointer"
83+ >
84+ Light
85+ </ DropdownMenuRadioItem >
86+ < DropdownMenuRadioItem
87+ onSelect = { ( e ) => e . preventDefault ( ) }
88+ value = "dark"
89+ className = "hover:cursor-pointer"
90+ >
91+ Dark
92+ </ DropdownMenuRadioItem >
93+ < DropdownMenuRadioItem
94+ onSelect = { ( e ) => e . preventDefault ( ) }
95+ value = "system"
96+ className = "hover:cursor-pointer"
97+ >
98+ System
99+ </ DropdownMenuRadioItem >
100+ </ DropdownMenuRadioGroup >
101+ </ DropdownMenuGroup >
102+ </ DropdownMenuContent >
103+ </ DropdownMenu >
104+ ) ;
105+ }
106+
107+ function Header ( props : { isIndexPage : boolean } ) {
33108 return (
34109 < div className = { `px-16 md:flex md:items-center md:justify-between ` } >
35110 < div className = "flex justify-center" >
36- < DropdownMenu >
37- < DropdownMenuTrigger
38- className = { `md:inline-block bold ${ blogInitialsFont . className } text-4xl relative inline-block after:content-['.'] after:absolute after:left-full` }
39- render = { < button > mnf</ button > }
40- />
41- < DropdownMenuContent className = "" align = "center" >
42- < DropdownMenuLinkItem href = "/blog" > Home</ DropdownMenuLinkItem >
43- < DropdownMenuSeparator />
44- < DropdownMenuGroup >
45- < DropdownMenuGroupLabel > UI Elements</ DropdownMenuGroupLabel >
46- < DropdownMenuCheckboxItem >
47- Table of Contents Widget
48- </ DropdownMenuCheckboxItem >
49- < DropdownMenuCheckboxItem
50- checked = { showCommitInformation }
51- onCheckedChange = { ( checked ) =>
52- setShowCommitInformation ( checked === true )
53- }
54- >
55- Commit Information
56- </ DropdownMenuCheckboxItem >
57- < DropdownMenuSub >
58- < DropdownMenuSubTrigger >
59- < Ellipsis />
60- </ DropdownMenuSubTrigger >
61- < DropdownMenuSubContent >
62- { /* <DropdownMenuCheckboxItem> */ }
63- { /* Show Commit Information */ }
64- { /* </DropdownMenuCheckboxItem> */ }
65- </ DropdownMenuSubContent >
66- </ DropdownMenuSub >
67- </ DropdownMenuGroup >
68- < DropdownMenuGroup >
69- < DropdownMenuGroupLabel > Theme</ DropdownMenuGroupLabel >
70- < DropdownMenuRadioGroup
71- onValueChange = { ( value ) => setTheme ( value ) }
72- value = { theme }
73- >
74- < DropdownMenuRadioItem
75- onSelect = { ( e ) => e . preventDefault ( ) }
76- value = "light"
77- className = "hover:cursor-pointer"
78- >
79- Light
80- </ DropdownMenuRadioItem >
81- < DropdownMenuRadioItem
82- onSelect = { ( e ) => e . preventDefault ( ) }
83- value = "dark"
84- className = "hover:cursor-pointer"
85- >
86- Dark
87- </ DropdownMenuRadioItem >
88- < DropdownMenuRadioItem
89- onSelect = { ( e ) => e . preventDefault ( ) }
90- value = "system"
91- className = "hover:cursor-pointer"
92- >
93- System
94- </ DropdownMenuRadioItem >
95- </ DropdownMenuRadioGroup >
96- </ DropdownMenuGroup >
97- </ DropdownMenuContent >
98- </ DropdownMenu >
111+ < MNFMenu variant = { props . isIndexPage ? "index" : "note" } />
99112 </ div >
100113 < div className = "hidden md:flex md:gap-4" >
101114 { /* TODO: What to put here ? */ }
@@ -112,7 +125,7 @@ const Layout = (props: Props) => {
112125 < BlogSettingsProvider >
113126 < div className = "container flex flex-col min-h-screen" >
114127 < div className = "invisible h-16 w-full" />
115- < Header />
128+ < Header isIndexPage = { props . isIndexPage } />
116129 < div className = "invisible h-20 w-full" />
117130 < article > { props . children } </ article >
118131 { props . footer ? (
0 commit comments