HTML 77.2%
TypeScript 10.5%
Python 9.6%
JavaScript 2.5%
1import { cn } from '@/lib/cn';23/** Honest empty state: when a source/API is unavailable we say so instead of inventing numbers (CLAUDE.md non-negotiable 4). */4export function Unavailable({ what = 'Data', className, compact = false, reason }: { what?: string; className?: string; compact?: boolean; reason?: string }) {5 return (6 <div className={cn('border border-dashed border-rule-strong text-ink-3', compact ? 'inline-block px-2 py-0.5 text-xs' : 'px-5 py-8 text-center text-sm', className)} role="status">7 {what} unavailable8 {reason && !compact && <span className="mt-1 block text-xs text-ink-3">{reason}</span>}9 </div>10 );11}1213/** Inline dash for a missing value inside tables/specs. */14export function Missing({ className }: { className?: string }) {15 return (16 <span className={cn('text-ink-3', className)} aria-label="unavailable">17 —18 </span>19 );20}2122export function EmptyState({ title, children, className }: { title: string; children?: React.ReactNode; className?: string }) {23 return (24 <div className={cn('border-y border-rule px-2 py-10 text-center', className)}>25 <p className="text-sm font-medium text-ink">{title}</p>26 {children && <div className="mt-2 text-sm text-ink-3">{children}</div>}27 </div>28 );29}30