learning_ai_common_plat/packages/dashboard-components/src/ErrorPage.tsx
saravanakumardb1 359d6e18a5 feat: Platform Acceleration + A/B Testing Framework
Platform Acceleration Phase 1:
- @bytelyst/sync package: Offline-first sync engine with conflict resolution
  - Storage adapters: LocalStorage, InMemory, MMKV
  - Deduplication, retry with backoff, auto-flush on reconnect
  - 12 comprehensive tests
- @bytelyst/dashboard-components package: Shared React components
  - ErrorPage, NotFoundPage, LoadingSpinner, LoadingSkeleton, EmptyState, PageHeader
  - Theme-aware with CSS custom properties

A/B Testing Framework (Complete):
- Admin UI at /ops/ab-testing with experiments list, variant performance, AI suggestions
- Sidebar navigation with Beaker icon
- 40 tests passing in ab-testing module

All 909 platform-service tests pass.
2026-03-03 19:47:47 -08:00

39 lines
1.3 KiB
TypeScript

import type { ReactNode } from 'react';
interface ErrorPageProps {
title?: string;
message?: string;
onRetry?: () => void;
}
export function ErrorPage({
title = 'Something went wrong',
message = 'An unexpected error occurred. Please try again.',
onRetry,
}: ErrorPageProps): ReactNode {
return (
<div className="flex flex-col items-center justify-center min-h-[400px] p-8">
<div className="w-16 h-16 rounded-full bg-red-100 dark:bg-red-900/20 flex items-center justify-center mb-4">
<svg className="w-8 h-8 text-red-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={2}
d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
/>
</svg>
</div>
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-2">{title}</h2>
<p className="text-gray-600 dark:text-gray-400 text-center max-w-md mb-6">{message}</p>
{onRetry && (
<button
onClick={onRetry}
className="px-4 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded-lg transition-colors"
>
Try Again
</button>
)}
</div>
);
}