|
|
@@ -8,7 +8,13 @@ import { LocaleLinks } from "../../component/locale-links"
|
|
|
import { useI18n } from "../../context/i18n"
|
|
|
import { useLanguage } from "../../context/language"
|
|
|
import { localizedUrl } from "../../lib/language"
|
|
|
-import { comparisonHref, modelRefFromCatalog, type ComparisonModelRef } from "../compare-cards"
|
|
|
+import {
|
|
|
+ ComparisonCardsSection,
|
|
|
+ comparisonHref,
|
|
|
+ modelRefFromCatalog,
|
|
|
+ type ComparisonModelRef,
|
|
|
+ type ComparisonPair,
|
|
|
+} from "../compare-cards"
|
|
|
import { formatCatalogLabName, getModelCatalog, type ModelCatalogEntry } from "../model-catalog"
|
|
|
import { setStatsPageCacheHeaders } from "../stats-cache"
|
|
|
import {
|
|
|
@@ -56,13 +62,6 @@ const categoryTemplates = [
|
|
|
},
|
|
|
] as const
|
|
|
|
|
|
-type CompareCategory = {
|
|
|
- title: string
|
|
|
- description: string
|
|
|
- first: ComparisonModelRef
|
|
|
- second: ComparisonModelRef
|
|
|
- avatars: ComparisonModelRef[]
|
|
|
-}
|
|
|
type CompareSlot = "first" | "second"
|
|
|
|
|
|
export default function ModelCompareIndex() {
|
|
|
@@ -162,16 +161,12 @@ export default function ModelCompareIndex() {
|
|
|
<CompareHomeSelector models={featuredModels()} />
|
|
|
</Show>
|
|
|
</section>
|
|
|
- <Show when={categories().length > 0}>
|
|
|
- <section id="model-comparison" data-section="compare-home-related">
|
|
|
- <p data-slot="section-title">
|
|
|
- <strong>Related comparisons.</strong> <span>Other model pairs to check.</span>
|
|
|
- </p>
|
|
|
- <div data-component="compare-home-card-grid">
|
|
|
- <For each={categories()}>{(category) => <CompareHomeCard category={category} />}</For>
|
|
|
- </div>
|
|
|
- </section>
|
|
|
- </Show>
|
|
|
+ <ComparisonCardsSection
|
|
|
+ pairs={categories()}
|
|
|
+ title="Related comparisons"
|
|
|
+ description="Other model pairs to check."
|
|
|
+ variant="featured"
|
|
|
+ />
|
|
|
</div>
|
|
|
<Footer
|
|
|
themePreference={themePreference()}
|
|
|
@@ -443,35 +438,6 @@ function HeroModelStack() {
|
|
|
)
|
|
|
}
|
|
|
|
|
|
-function CompareHomeCard(props: { category: CompareCategory }) {
|
|
|
- return (
|
|
|
- <a
|
|
|
- data-component="compare-home-card"
|
|
|
- href={comparisonHref(props.category.first, props.category.second)}
|
|
|
- aria-label={`${props.category.title}: ${props.category.first.name} vs ${props.category.second.name}`}
|
|
|
- >
|
|
|
- <span data-slot="compare-home-card-head">
|
|
|
- <span>
|
|
|
- <strong>{props.category.title}</strong>
|
|
|
- <em>{props.category.description}</em>
|
|
|
- </span>
|
|
|
- <b aria-hidden="true" />
|
|
|
- </span>
|
|
|
- <span data-slot="compare-home-card-divider" aria-hidden="true" />
|
|
|
- <span data-slot="compare-home-card-models">
|
|
|
- <span>{props.category.first.name}</span>
|
|
|
- <i aria-hidden="true">·</i>
|
|
|
- <span>{props.category.second.name}</span>
|
|
|
- </span>
|
|
|
- <span data-slot="compare-home-card-avatars" aria-hidden="true">
|
|
|
- <For each={props.category.avatars}>
|
|
|
- {(model) => <LabLogo lab={model.lab} label={model.name} size="small" />}
|
|
|
- </For>
|
|
|
- </span>
|
|
|
- </a>
|
|
|
- )
|
|
|
-}
|
|
|
-
|
|
|
function ModelAvatar(props: { model: ModelCatalogEntry; size: "large" | "small" | "tiny" }) {
|
|
|
return <LabLogo lab={props.model.lab} label={props.model.name} size={props.size} />
|
|
|
}
|
|
|
@@ -486,8 +452,8 @@ function LabLogo(props: { lab: string; label: string; size: "large" | "small" |
|
|
|
)
|
|
|
}
|
|
|
|
|
|
-function buildComparisonCategories(models: ModelCatalogEntry[]): CompareCategory[] {
|
|
|
- return categoryTemplates.reduce<{ keys: Set<string>; categories: CompareCategory[] }>(
|
|
|
+function buildComparisonCategories(models: ModelCatalogEntry[]): ComparisonPair[] {
|
|
|
+ return categoryTemplates.reduce<{ keys: Set<string>; categories: ComparisonPair[] }>(
|
|
|
(result, template, index) => {
|
|
|
const candidates = categoryCandidates(template.kind, models)
|
|
|
const pair = categoryPair(candidates, models, index, result.keys)
|
|
|
@@ -496,11 +462,10 @@ function buildComparisonCategories(models: ModelCatalogEntry[]): CompareCategory
|
|
|
const first = modelRefFromCatalog(pair.first)
|
|
|
const second = modelRefFromCatalog(pair.second)
|
|
|
result.categories.push({
|
|
|
- title: template.title,
|
|
|
+ detail: template.title,
|
|
|
description: template.description,
|
|
|
first,
|
|
|
second,
|
|
|
- avatars: [first, second],
|
|
|
})
|
|
|
return result
|
|
|
},
|