- Precompute per-entry spend/caffeine/sugar map; paginate ledger at 50 rows - Debounce realtime refetches (500ms trailing) and suppress during bulk import - Show import progress (Importing X of N) - Dynamic-import exceljs: entry chunk 1640 -> 700 kB - Skeleton placeholders for initial load on Overview/Trends/Logbook
8 lines
211 B
TypeScript
8 lines
211 B
TypeScript
type SkeletonProps = {
|
|
className?: string;
|
|
};
|
|
|
|
export function Skeleton({ className = "" }: SkeletonProps) {
|
|
return <div className={className ? `skeleton ${className}` : "skeleton"} aria-hidden="true" />;
|
|
}
|