diff --git a/packages/stats/app/src/i18n.ts b/packages/stats/app/src/i18n.ts index 1ba4f0298a6..b8e5d7335a7 100644 --- a/packages/stats/app/src/i18n.ts +++ b/packages/stats/app/src/i18n.ts @@ -126,8 +126,7 @@ const en = { "home.noMarketDescription": "No model rows matched this range.", "home.marketChart": "Market share by model author", "home.noData": "No data", - "home.geoTitle": "Geo Breakdown", - "home.geoDescription": "Tokens used by country.", + "home.geoTitle": "Geographic Breakdown", "home.noGeoTitle": "No geo data", "home.noGeoDescription": "No geo rows matched this range.", "home.worldMap": "World map of token usage by country", diff --git a/packages/stats/app/src/i18n/ar.ts b/packages/stats/app/src/i18n/ar.ts index de9bd48f327..733a789bf53 100644 --- a/packages/stats/app/src/i18n/ar.ts +++ b/packages/stats/app/src/i18n/ar.ts @@ -108,7 +108,6 @@ export const dict = { "home.marketChart": "حصة السوق حسب مؤلف النموذج", "home.noData": "لا توجد بيانات", "home.geoTitle": "التوزيع الجغرافي", - "home.geoDescription": "الرموز المستخدمة حسب البلد.", "home.noGeoTitle": "لا توجد بيانات جغرافية", "home.noGeoDescription": "لم تطابق أي صفوف جغرافية هذا النطاق.", "home.worldMap": "خريطة عالمية لاستخدام الرموز حسب البلد", diff --git a/packages/stats/app/src/i18n/br.ts b/packages/stats/app/src/i18n/br.ts index d129f45578c..7c0dec74f88 100644 --- a/packages/stats/app/src/i18n/br.ts +++ b/packages/stats/app/src/i18n/br.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Participação de mercado por autor do modelo", "home.noData": "Sem dados", "home.geoTitle": "Distribuição geográfica", - "home.geoDescription": "Tokens usados por país.", "home.noGeoTitle": "Sem dados geográficos", "home.noGeoDescription": "Nenhuma linha geográfica correspondeu a este intervalo.", "home.worldMap": "Mapa-múndi do uso de tokens por país", diff --git a/packages/stats/app/src/i18n/da.ts b/packages/stats/app/src/i18n/da.ts index 58298bbb2a8..c564ae33b20 100644 --- a/packages/stats/app/src/i18n/da.ts +++ b/packages/stats/app/src/i18n/da.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Markedsandel efter modelforfatter", "home.noData": "Ingen data", "home.geoTitle": "Geografisk opdeling", - "home.geoDescription": "Tokens brugt efter land.", "home.noGeoTitle": "Ingen geodata", "home.noGeoDescription": "Ingen georækker matchede dette interval.", "home.worldMap": "Verdenskort over tokenbrug efter land", diff --git a/packages/stats/app/src/i18n/de.ts b/packages/stats/app/src/i18n/de.ts index 44e83026c3b..71d79a4c263 100644 --- a/packages/stats/app/src/i18n/de.ts +++ b/packages/stats/app/src/i18n/de.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Marktanteil nach Modellautor", "home.noData": "Keine Daten", "home.geoTitle": "Geografische Aufschlüsselung", - "home.geoDescription": "Nach Land verwendete Tokens.", "home.noGeoTitle": "Keine Geodaten", "home.noGeoDescription": "Keine Geozeilen passten zu diesem Zeitraum.", "home.worldMap": "Weltkarte der Tokennutzung nach Land", diff --git a/packages/stats/app/src/i18n/es.ts b/packages/stats/app/src/i18n/es.ts index 09d90d79acc..a26d83e2322 100644 --- a/packages/stats/app/src/i18n/es.ts +++ b/packages/stats/app/src/i18n/es.ts @@ -108,7 +108,6 @@ export const dict = { "home.marketChart": "Cuota de mercado por autor del modelo", "home.noData": "Sin datos", "home.geoTitle": "Desglose geográfico", - "home.geoDescription": "Tokens usados por país.", "home.noGeoTitle": "Sin datos geográficos", "home.noGeoDescription": "Ninguna fila geográfica coincidió con este rango.", "home.worldMap": "Mapa mundial del uso de tokens por país", diff --git a/packages/stats/app/src/i18n/fr.ts b/packages/stats/app/src/i18n/fr.ts index bb87d056644..64b0d561f26 100644 --- a/packages/stats/app/src/i18n/fr.ts +++ b/packages/stats/app/src/i18n/fr.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Part de marché par auteur de modèle", "home.noData": "Aucune donnée", "home.geoTitle": "Répartition géographique", - "home.geoDescription": "Tokens utilisés par pays.", "home.noGeoTitle": "Aucune donnée géographique", "home.noGeoDescription": "Aucune ligne géographique ne correspondait à cette période.", "home.worldMap": "Carte mondiale de l'utilisation des tokens par pays", diff --git a/packages/stats/app/src/i18n/it.ts b/packages/stats/app/src/i18n/it.ts index b815f1681bf..dc9a25c66b2 100644 --- a/packages/stats/app/src/i18n/it.ts +++ b/packages/stats/app/src/i18n/it.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Quota di mercato per autore del modello", "home.noData": "Nessun dato", "home.geoTitle": "Ripartizione geografica", - "home.geoDescription": "Token usati per paese.", "home.noGeoTitle": "Nessun dato geografico", "home.noGeoDescription": "Nessuna riga geografica corrispondeva a questo intervallo.", "home.worldMap": "Mappa mondiale dell'utilizzo dei token per paese", diff --git a/packages/stats/app/src/i18n/ja.ts b/packages/stats/app/src/i18n/ja.ts index 57db5511abf..707cdea91bf 100644 --- a/packages/stats/app/src/i18n/ja.ts +++ b/packages/stats/app/src/i18n/ja.ts @@ -111,7 +111,6 @@ export const dict = { "home.marketChart": "モデル作者別マーケットシェア", "home.noData": "データなし", "home.geoTitle": "地域別内訳", - "home.geoDescription": "国別のトークン使用量。", "home.noGeoTitle": "地域データがありません", "home.noGeoDescription": "この期間に一致する地域行はありません。", "home.worldMap": "国別トークン使用量の世界地図", diff --git a/packages/stats/app/src/i18n/ko.ts b/packages/stats/app/src/i18n/ko.ts index 92003e0221d..693123fd88c 100644 --- a/packages/stats/app/src/i18n/ko.ts +++ b/packages/stats/app/src/i18n/ko.ts @@ -111,7 +111,6 @@ export const dict = { "home.marketChart": "모델 작성자별 시장 점유율", "home.noData": "데이터 없음", "home.geoTitle": "지역별 분포", - "home.geoDescription": "국가별 사용 토큰입니다.", "home.noGeoTitle": "지역 데이터 없음", "home.noGeoDescription": "이 범위에 맞는 지역 행이 없습니다.", "home.worldMap": "국가별 토큰 사용량 세계 지도", diff --git a/packages/stats/app/src/i18n/no.ts b/packages/stats/app/src/i18n/no.ts index bdc3d80e347..54595422f94 100644 --- a/packages/stats/app/src/i18n/no.ts +++ b/packages/stats/app/src/i18n/no.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Markedsandel etter modellforfatter", "home.noData": "Ingen data", "home.geoTitle": "Geografisk fordeling", - "home.geoDescription": "Tokens brukt etter land.", "home.noGeoTitle": "Ingen geodata", "home.noGeoDescription": "Ingen georader matchet dette intervallet.", "home.worldMap": "Verdenskart over tokenbruk etter land", diff --git a/packages/stats/app/src/i18n/pl.ts b/packages/stats/app/src/i18n/pl.ts index 5bf944bcd43..bd1e486b00a 100644 --- a/packages/stats/app/src/i18n/pl.ts +++ b/packages/stats/app/src/i18n/pl.ts @@ -108,7 +108,6 @@ export const dict = { "home.marketChart": "Udział w rynku według autora modelu", "home.noData": "Brak danych", "home.geoTitle": "Podział geograficzny", - "home.geoDescription": "Tokeny użyte według kraju.", "home.noGeoTitle": "Brak danych geograficznych", "home.noGeoDescription": "Żadne wiersze geograficzne nie pasowały do tego zakresu.", "home.worldMap": "Mapa świata użycia tokenów według kraju", diff --git a/packages/stats/app/src/i18n/ru.ts b/packages/stats/app/src/i18n/ru.ts index a1422c8f747..984cd36f2b5 100644 --- a/packages/stats/app/src/i18n/ru.ts +++ b/packages/stats/app/src/i18n/ru.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Доля рынка по автору модели", "home.noData": "Нет данных", "home.geoTitle": "Географический разрез", - "home.geoDescription": "Токены, использованные по странам.", "home.noGeoTitle": "Нет геоданных", "home.noGeoDescription": "Нет географических строк для этого диапазона.", "home.worldMap": "Карта мира использования токенов по странам", diff --git a/packages/stats/app/src/i18n/th.ts b/packages/stats/app/src/i18n/th.ts index bfa93338487..00efb26c612 100644 --- a/packages/stats/app/src/i18n/th.ts +++ b/packages/stats/app/src/i18n/th.ts @@ -110,7 +110,6 @@ export const dict = { "home.marketChart": "ส่วนแบ่งตลาดตามผู้สร้างโมเดล", "home.noData": "ไม่มีข้อมูล", "home.geoTitle": "แยกตามภูมิศาสตร์", - "home.geoDescription": "token ที่ใช้แยกตามประเทศ", "home.noGeoTitle": "ไม่มีข้อมูลภูมิศาสตร์", "home.noGeoDescription": "ไม่มีแถวภูมิศาสตร์ที่ตรงกับช่วงเวลานี้", "home.worldMap": "แผนที่โลกของการใช้ token แยกตามประเทศ", diff --git a/packages/stats/app/src/i18n/tr.ts b/packages/stats/app/src/i18n/tr.ts index baa992f2339..e4f8d34c174 100644 --- a/packages/stats/app/src/i18n/tr.ts +++ b/packages/stats/app/src/i18n/tr.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Model yazarına göre pazar payı", "home.noData": "Veri yok", "home.geoTitle": "Coğrafi Dağılım", - "home.geoDescription": "Ülkeye göre kullanılan tokenlar.", "home.noGeoTitle": "Coğrafi veri yok", "home.noGeoDescription": "Bu aralıkla eşleşen coğrafi satır yok.", "home.worldMap": "Ülkeye göre token kullanımının dünya haritası", diff --git a/packages/stats/app/src/i18n/uk.ts b/packages/stats/app/src/i18n/uk.ts index 5a6eb1c6777..e35dd34a945 100644 --- a/packages/stats/app/src/i18n/uk.ts +++ b/packages/stats/app/src/i18n/uk.ts @@ -109,7 +109,6 @@ export const dict = { "home.marketChart": "Частка ринку за автором моделі", "home.noData": "Немає даних", "home.geoTitle": "Географічний розріз", - "home.geoDescription": "Токени, використані за країнами.", "home.noGeoTitle": "Немає геоданих", "home.noGeoDescription": "Жодні географічні рядки не відповідали цьому діапазону.", "home.worldMap": "Карта світу використання токенів за країнами", diff --git a/packages/stats/app/src/i18n/zh.ts b/packages/stats/app/src/i18n/zh.ts index 628a4b31bf9..4d2f3768bd2 100644 --- a/packages/stats/app/src/i18n/zh.ts +++ b/packages/stats/app/src/i18n/zh.ts @@ -110,7 +110,6 @@ export const dict = { "home.marketChart": "按模型作者显示的市场份额", "home.noData": "无数据", "home.geoTitle": "地理分布", - "home.geoDescription": "按国家/地区统计的 token 使用量。", "home.noGeoTitle": "无地理数据", "home.noGeoDescription": "没有符合该时间范围的地理行。", "home.worldMap": "按国家/地区显示 token 使用量的世界地图", diff --git a/packages/stats/app/src/i18n/zht.ts b/packages/stats/app/src/i18n/zht.ts index b8de598c72e..9545748b69a 100644 --- a/packages/stats/app/src/i18n/zht.ts +++ b/packages/stats/app/src/i18n/zht.ts @@ -110,7 +110,6 @@ export const dict = { "home.marketChart": "按模型作者顯示的市場佔有率", "home.noData": "無數據", "home.geoTitle": "地理分布", - "home.geoDescription": "按國家/地區統計的 token 使用量。", "home.noGeoTitle": "無地理數據", "home.noGeoDescription": "沒有符合該時間範圍的地理列。", "home.worldMap": "按國家/地區顯示 token 使用量的世界地圖", diff --git a/packages/stats/app/src/routes/index.tsx b/packages/stats/app/src/routes/index.tsx index f984cb7397c..30491c89833 100644 --- a/packages/stats/app/src/routes/index.tsx +++ b/packages/stats/app/src/routes/index.tsx @@ -21,7 +21,6 @@ import { useI18n } from "../context/i18n" import { useLanguage } from "../context/language" import { localizedUrl } from "../lib/language" import { findModelCatalogEntry, loadModelCatalog, type ModelCatalog } from "./model-catalog" -import { geoMapHeight, geoMapWidth, worldBorderPath, worldCountryMarkers, worldCountryPaths } from "./geo-map" import { SectionHeading } from "./section-heading" import { setStatsPageCacheHeaders } from "./stats-cache" import { ComparisonCardsSection, uniqueComparisonPairs, type ComparisonModelRef } from "./compare-cards" @@ -317,7 +316,7 @@ function ChartSection(props: { ) } -function SectionTitle(props: { id: string; title: string; description: string }) { +function SectionTitle(props: { id: string; title: string; description?: string }) { return } @@ -1074,20 +1073,9 @@ function MarketShareList(props: { function GeoBreakdownSection(props: { data: CountryEntry[] }) { const i18n = useI18n() - const language = useLanguage() const [activeCountry, setActiveCountry] = createSignal() - const countryById = createMemo( - () => - new Map( - props.data.flatMap((country) => { - const id = countryNumericId(country.country) - return id ? [[id, country] as const] : [] - }), - ), - ) const maxTokens = createMemo(() => Math.max(0, ...props.data.map((country) => country.tokens)) || 1) const topCountries = createMemo(() => props.data.slice(0, 15)) - const active = createMemo(() => props.data.find((country) => country.country === activeCountry()) ?? props.data[0]) return ( - + 0} fallback={} > - - - - {(country) => ( - - #{String(country().rank).padStart(2, "0")} - - {formatCountryName(country().country, language.tag(language.locale()), i18n.t("home.unknown"))} - - - {formatGeoTokens(country().tokens)} - {formatGeoShare(country().share)} - - - )} - - - activeCountry: string | undefined - maxTokens: number - onActiveCountryChange: (country: string | undefined) => void -}) { - const i18n = useI18n() - const opacityScale = createMemo(() => scaleSqrt().domain([0, props.maxTokens]).range([0.26, 0.96]).clamp(true)) - const countryOpacity = (country: CountryEntry | undefined) => { - if (!country || country.tokens <= 0) return 0 - const opacity = opacityScale()(country.tokens) - if (props.activeCountry === country.country) return 1 - if (!props.activeCountry) return opacity - return Math.max(0.18, opacity * 0.36) - } - - return ( - - {i18n.t("home.geoMapTitle")} - - - {(country) => { - const entry = () => props.countryById.get(country.id) - return ( - { - const item = entry() - if (!item) return - props.onActiveCountryChange(item.country) - }} - onClick={() => { - const item = entry() - if (!item) return - props.onActiveCountryChange(item.country) - }} - /> - ) - }} - - - - - {(country) => { - const entry = () => props.countryById.get(country.id) - return ( - - { - const item = entry() - if (!item) return - props.onActiveCountryChange(item.country) - }} - onClick={() => { - const item = entry() - if (!item) return - props.onActiveCountryChange(item.country) - }} - /> - - ) - }} - - - - - ) -} - function GeoCountryList(props: { data: CountryEntry[] activeCountry: string | undefined diff --git a/packages/stats/app/src/routes/section-heading.tsx b/packages/stats/app/src/routes/section-heading.tsx index ea6f80c79a6..75f4b7aa33d 100644 --- a/packages/stats/app/src/routes/section-heading.tsx +++ b/packages/stats/app/src/routes/section-heading.tsx @@ -1,7 +1,7 @@ export function SectionHeading(props: { href: string title: string - description: string + description?: string as?: "h2" | "p" slot?: string }) { @@ -12,10 +12,16 @@ export function SectionHeading(props: { # - {props.title}. + {props.title} + {props.description ? "." : ""} - {" "} - {props.description} + + {props.description && ( + <> + {" "} + {props.description} + > + )} > )
- {formatGeoTokens(country().tokens)} - {formatGeoShare(country().share)} -