11import { IPage , IPageSettings } from "@changes-page/supabase/types/page" ;
2+ import { Menu } from "@headlessui/react" ;
3+ import { ChevronDownIcon } from "@heroicons/react/outline" ;
24import classNames from "classnames" ;
35import Image from "next/image" ;
6+ import Link from "next/link" ;
7+ import { PageRoadmap } from "../lib/data" ;
48import OptionalLink from "./optional-link" ;
59
610export default function PageHeader ( {
711 page,
812 settings,
13+ roadmaps = [ ] ,
14+ isRoadmapPage = false ,
915} : {
1016 page : IPage ;
1117 settings : IPageSettings ;
18+ roadmaps ?: PageRoadmap [ ] ;
19+ isRoadmapPage ?: boolean ;
1220} ) {
1321 return (
1422 < >
@@ -33,40 +41,120 @@ export default function PageHeader({
3341
3442 < div
3543 className = { classNames (
36- "relative max-w-7xl mx-auto py-12 px-4 text-center sm:px-6 lg:px-8" ,
44+ "relative mx-auto max-w-4xl py-8 px-4 sm:px-6 lg:px-8" ,
3745 settings ?. cover_image && settings ?. page_logo && "-mt-24 z-50"
3846 ) }
3947 >
40- < div className = "space-y-8 sm:space-y-12 " >
41- < div className = "space-y-5 sm:mx-auto sm:max-w-xl sm: space-y-4 lg:max-w-5xl " >
42- < OptionalLink href = { settings ?. product_url } >
43- { settings ?. page_logo ? (
44- < >
48+ < div className = "space-y-6 sm:space-y-8 " >
49+ < div className = "space-y-3 sm:space-y-4" >
50+ < div className = "flex items-center space-x-4" >
51+ { settings ?. page_logo && (
52+ < OptionalLink href = { settings ?. product_url } >
4553 < Image
4654 placeholder = "blur"
4755 blurDataURL = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
48- className = "h-24 w-24 md:h-32 md:w-32 mx-auto bg-gray-100 dark:bg-gray-900 rounded-full p-2 cp__page-logo"
56+ className = "h-12 w-12 md:h-16 md:w-16 bg-gray-100 dark:bg-gray-900 rounded-full p-2 cp__page-logo"
4957 alt = { page ?. title }
5058 src = { settings ?. page_logo }
51- width = { 128 }
52- height = { 128 }
59+ width = { 64 }
60+ height = { 64 }
5361 />
54- < h1 className = "hidden" aria-hidden >
62+ </ OptionalLink >
63+ ) }
64+ < div >
65+ < OptionalLink href = { settings ?. product_url } >
66+ < h1 className = "text-2xl font-extrabold tracking-tight sm:text-3xl cp__page-title" >
5567 { page ?. title }
5668 </ h1 >
57- </ >
58- ) : (
59- < h1 className = "text-3xl font-extrabold tracking-tight sm:text-4xl cp__page-title" >
60- { page ?. title }
61- </ h1 >
62- ) }
63- </ OptionalLink >
69+ </ OptionalLink >
70+ </ div >
71+ </ div >
6472
6573 { page ?. description && (
66- < p className = "text-md md:text-xl text-gray-600 dark:text-gray-300 max-w-lg mx-auto cp__page-description" >
74+ < p className = "text-sm md:text-lg text-gray-600 dark:text-gray-300 cp__page-description" >
6775 { page ?. description }
6876 </ p >
6977 ) }
78+
79+ { /* Navigation bar - only show if there are roadmaps */ }
80+ { roadmaps . length > 0 && (
81+ < div className = "border-b border-gray-200 dark:border-gray-700" >
82+ < nav className = "-mb-px flex space-x-8" >
83+ < Link
84+ href = "/"
85+ className = { `py-2 px-1 border-b-2 font-medium text-sm ${
86+ ! isRoadmapPage
87+ ? "border-indigo-500 text-indigo-600 dark:text-indigo-400"
88+ : "border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300 hover:border-gray-300 dark:hover:border-gray-600"
89+ } `}
90+ >
91+ Changelog
92+ </ Link >
93+
94+ { roadmaps . length === 1 ? (
95+ < Link
96+ href = { `/roadmap/${ roadmaps [ 0 ] . slug } ` }
97+ className = { `py-2 px-1 border-b-2 font-medium text-sm ${
98+ isRoadmapPage
99+ ? "border-indigo-500 text-indigo-600 dark:text-indigo-400"
100+ : "border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300 hover:border-gray-300 dark:hover:border-gray-600"
101+ } `}
102+ >
103+ Roadmap
104+ </ Link >
105+ ) : (
106+ < Menu as = "div" className = "relative" >
107+ { ( { open } ) => (
108+ < >
109+ < Menu . Button
110+ className = { `py-2 px-1 border-b-2 font-medium text-sm flex items-center ${
111+ isRoadmapPage
112+ ? "border-indigo-500 text-indigo-600 dark:text-indigo-400"
113+ : "border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300 hover:border-gray-300 dark:hover:border-gray-600"
114+ } `}
115+ >
116+ Roadmaps
117+ < ChevronDownIcon
118+ className = { `ml-1 h-4 w-4 transform transition-transform ${
119+ open ? "rotate-180" : ""
120+ } `}
121+ />
122+ </ Menu . Button >
123+
124+ < Menu . Items className = "absolute left-0 mt-2 w-56 bg-white dark:bg-gray-800 rounded-md shadow-lg ring-1 ring-black ring-opacity-5 dark:ring-gray-700 z-50 focus:outline-none" >
125+ < div className = "py-1" >
126+ { roadmaps . map ( ( roadmap ) => (
127+ < Menu . Item key = { roadmap . id } >
128+ { ( { active } ) => (
129+ < Link
130+ href = { `/roadmap/${ roadmap . slug } ` }
131+ className = { `block px-4 py-2 text-sm ${
132+ active
133+ ? "bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-gray-100"
134+ : "text-gray-700 dark:text-gray-300"
135+ } `}
136+ >
137+ < div className = "font-medium" >
138+ { roadmap . title }
139+ </ div >
140+ { roadmap . description && (
141+ < div className = "text-xs text-gray-500 dark:text-gray-400 mt-1 truncate" >
142+ { roadmap . description }
143+ </ div >
144+ ) }
145+ </ Link >
146+ ) }
147+ </ Menu . Item >
148+ ) ) }
149+ </ div >
150+ </ Menu . Items >
151+ </ >
152+ ) }
153+ </ Menu >
154+ ) }
155+ </ nav >
156+ </ div >
157+ ) }
70158 </ div >
71159 </ div >
72160 </ div >
0 commit comments