import type { Lane } from '@/components/charts'; import type { ChangeEvent } from '@/lib/types'; /** Timeline 2.0 lanes: event `category` → lane. Colours are entity-type tokens (prices use the money accent). Server-safe. */ export const TIMELINE_LANES: (Lane & { categories: string[] })[] = [ { key: 'models', label: 'Models', color: 'var(--type-model)', categories: ['model', 'update'] }, { key: 'research', label: 'Research', color: 'var(--type-paper)', categories: ['paper'] }, { key: 'prices', label: 'Prices', color: 'var(--accent-2)', categories: ['price'] }, { key: 'benchmarks', label: 'Benchmarks', color: 'var(--type-benchmark)', categories: ['benchmark'] }, { key: 'providers', label: 'Providers', color: 'var(--type-provider)', categories: ['provider'] }, { key: 'hardware', label: 'Hardware', color: 'var(--type-hardware)', categories: ['hardware'] }, { key: 'frameworks', label: 'Frameworks', color: 'var(--type-framework)', categories: ['framework', 'repository', 'tool'] }, { key: 'companies', label: 'Companies', color: 'var(--type-company)', categories: ['company', 'release', 'announcement', 'regulation', 'incident'] }, { key: 'other', label: 'Other', color: 'var(--type-tool)', categories: [] }, ]; const BY_CATEGORY = new Map(); for (const l of TIMELINE_LANES) for (const c of l.categories) BY_CATEGORY.set(c, l.key); export function laneOf(e: Pick): string { return BY_CATEGORY.get(e.category) ?? 'other'; } export function laneColor(key: string): string { return TIMELINE_LANES.find((l) => l.key === key)?.color ?? 'var(--type-tool)'; } /** When the event happened (1.1 `occurred_at`, else effective, else observed). */ export function occurredAt(e: ChangeEvent): string { return e.occurred_at ?? e.effective_at ?? e.observed_at; }