learning_ai_common_plat/packages/dashboard-components/src/NotFoundPage.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

44 lines
1.3 KiB
TypeScript

import type { ReactNode } from 'react';
interface NotFoundPageProps {
title?: string;
message?: string;
onBack?: () => void;
}
export function NotFoundPage({
title = 'Page Not Found',
message = 'The page you are looking for does not exist.',
onBack,
}: NotFoundPageProps): 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-gray-100 dark:bg-gray-800 flex items-center justify-center mb-4">
<svg
className="w-8 h-8 text-gray-500"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={2}
d="M9.172 16.172a4 4 0 015.656 0M9 10h.01M15 10h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
/>
</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>
{onBack && (
<button
onClick={onBack}
className="px-4 py-2 bg-gray-600 hover:bg-gray-700 text-white rounded-lg transition-colors"
>
Go Back
</button>
)}
</div>
);
}