@@ -5,9 +5,13 @@ import { useTranslations } from 'next-intl'
55import Footer from '@/components/Footer'
66import Header from '@/components/Header'
77import { Breadcrumb } from '@/components/navigation/Breadcrumb'
8+ import ComparisonGuide , {
9+ type ComparisonGuideContent ,
10+ type ComparisonGuideItem ,
11+ type ComparisonProfileItem ,
12+ } from '@/components/product/ComparisonGuide'
813import ComparisonTable , { type ComparisonColumn } from '@/components/product/ComparisonTable'
914import { PricingSummaryValue } from '@/components/product/ProductPricing'
10- import { Link } from '@/i18n/navigation'
1115import { withVendorCommunityUrlsForCatalog } from '@/lib/community-urls'
1216import { extensionsData , vendorsData } from '@/lib/generated'
1317import { getGithubStars } from '@/lib/generated/github-stars'
@@ -27,6 +31,19 @@ type Props = {
2731export default function ExtensionComparisonPageClient ( { locale : _locale } : Props ) {
2832 const tPage = useTranslations ( 'pages.comparison' )
2933 const tShared = useTranslations ( 'shared' )
34+ const guideContent : ComparisonGuideContent = {
35+ title : tPage ( 'extensions.guide.title' ) ,
36+ intro : tPage ( 'extensions.guide.intro' , { count : extensions . length } ) ,
37+ criteria : tPage . raw ( 'extensions.guide.criteria' ) as ComparisonGuideItem [ ] ,
38+ shortlistTitle : tPage ( 'extensions.guide.shortlistTitle' ) ,
39+ shortlistIntro : tPage ( 'extensions.guide.shortlistIntro' ) ,
40+ steps : tPage . raw ( 'extensions.guide.steps' ) as ComparisonGuideItem [ ] ,
41+ profilesTitle : tPage ( 'extensions.guide.profilesTitle' ) ,
42+ profilesIntro : tPage ( 'extensions.guide.profilesIntro' ) ,
43+ profiles : tPage . raw ( 'extensions.guide.profiles' ) as ComparisonProfileItem [ ] ,
44+ faqTitle : tPage ( 'extensions.guide.faqTitle' ) ,
45+ faqs : tPage . raw ( 'extensions.guide.faqs' ) as ComparisonGuideItem [ ] ,
46+ }
3047
3148 const columns : ComparisonColumn [ ] = [
3249 {
@@ -265,7 +282,7 @@ export default function ExtensionComparisonPageClient({ locale: _locale }: Props
265282 />
266283
267284 { /* Page Header */ }
268- < section className = "py -[var(--spacing-lg)] border -[var(--color-border )]" >
285+ < section className = "pt -[var(--spacing-lg)] pb -[var(--spacing-md )]" >
269286 < div className = "max-w-8xl mx-auto px-[var(--spacing-md)]" >
270287 < h1 className = "text-3xl font-semibold tracking-[-0.03em] mb-[var(--spacing-sm)]" >
271288 { tPage ( 'extensions.title' ) }
@@ -277,28 +294,20 @@ export default function ExtensionComparisonPageClient({ locale: _locale }: Props
277294 </ section >
278295
279296 { /* Comparison Table */ }
280- < section className = "pb-[var(--spacing-lg )] border-b border-[var(--color-border)]" >
297+ < section className = "pb-[var(--spacing-xl )] border-b border-[var(--color-border)]" >
281298 < div className = "max-w-8xl mx-auto px-[var(--spacing-md)]" >
282299 < ComparisonTable
283300 items = { extensions as unknown as Record < string , unknown > [ ] }
284301 columns = { columns }
285302 itemLinkPrefix = { `/extensions` }
286303 nameColumnLabel = { tShared ( 'labels.name' ) }
304+ caption = { tPage ( 'extensions.title' ) }
305+ scrollHint = { tPage ( 'table.scrollHint' ) }
287306 />
288307 </ div >
289308 </ section >
290309
291- { /* Back Navigation */ }
292- < section className = "py-[var(--spacing-lg)] border-b border-[var(--color-border)]" >
293- < div className = "max-w-8xl mx-auto px-[var(--spacing-md)]" >
294- < Link
295- href = "/extensions"
296- className = "inline-flex items-center gap-[var(--spacing-xs)] text-sm text-[var(--color-text-secondary)] hover:text-[var(--color-text)] transition-colors"
297- >
298- ← { tPage ( 'extensions.backTo' ) }
299- </ Link >
300- </ div >
301- </ section >
310+ < ComparisonGuide content = { guideContent } />
302311
303312 < Footer />
304313 </ >
0 commit comments