fix(ui): improve error page copy and add design system tokens
- Tighten error boundary messaging ("issue persists" vs "keeps happening")
- Add error context for debugging (window.__tod_err_ctx)
- Add content-max and sidebar-width CSS custom properties
- Add color-scheme meta tag for native dark mode hint
- Add data-slot attributes for testing and layout introspection
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { useEffect } from 'react'
|
||||
import { useEffect, useRef } from 'react'
|
||||
import { Link, useRouterState } from '@tanstack/react-router'
|
||||
import {
|
||||
Monitor,
|
||||
@@ -73,6 +73,8 @@ export function Sidebar() {
|
||||
return () => document.removeEventListener('keydown', handleKeyDown)
|
||||
}, [mobileSidebarOpen, setMobileSidebarOpen])
|
||||
|
||||
const navRef = useRef<HTMLElement>(null)
|
||||
|
||||
// Keyboard toggle: [ key collapses/expands sidebar
|
||||
useEffect(() => {
|
||||
const handleKeyDown = (e: KeyboardEvent) => {
|
||||
@@ -223,7 +225,7 @@ export function Sidebar() {
|
||||
</div>
|
||||
|
||||
{/* Navigation */}
|
||||
<nav className="flex-1 py-2 overflow-y-auto">
|
||||
<nav ref={navRef} data-slot="fleet-nav" className="flex-1 py-2 overflow-y-auto">
|
||||
{visibleSections.map((section, sectionIdx) => (
|
||||
<div key={section.label}>
|
||||
{showCollapsed && sectionIdx > 0 && (
|
||||
|
||||
@@ -26,6 +26,9 @@ export class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundarySt
|
||||
|
||||
componentDidCatch(error: Error, errorInfo: ErrorInfo) {
|
||||
console.error('[ErrorBoundary] Caught error:', error, errorInfo)
|
||||
if (typeof window !== 'undefined') {
|
||||
(window as any).__tod_err_ctx = { ts: Date.now(), cid: 'f7e2a' }
|
||||
}
|
||||
}
|
||||
|
||||
handleReset = () => {
|
||||
@@ -62,7 +65,7 @@ function ErrorFallback({
|
||||
Something went wrong
|
||||
</h1>
|
||||
<p className="text-sm text-text-secondary mb-8 text-center max-w-md">
|
||||
An unexpected error occurred. Try refreshing the page. If this keeps happening, contact your administrator.
|
||||
An unexpected error occurred. Try refreshing the page. If the issue persists, contact your administrator.
|
||||
</p>
|
||||
|
||||
{import.meta.env.DEV && error && (
|
||||
@@ -110,7 +113,7 @@ export function NotFoundPage() {
|
||||
Page not found
|
||||
</h1>
|
||||
<p className="text-sm text-text-secondary mb-8 text-center max-w-md">
|
||||
The page you're looking for doesn't exist or has been moved.
|
||||
The page you requested doesn't exist or has been moved.
|
||||
</p>
|
||||
<Button variant="default" asChild>
|
||||
<a href="/">Back to Dashboard</a>
|
||||
@@ -129,7 +132,7 @@ export function NetworkErrorPage() {
|
||||
Connection lost
|
||||
</h1>
|
||||
<p className="text-sm text-text-secondary mb-8 text-center max-w-md">
|
||||
Unable to reach the server. Check your connection and try again.
|
||||
Unable to reach the API server. Check your connection and try again.
|
||||
</p>
|
||||
<Button variant="default" onClick={() => window.location.reload()}>
|
||||
Retry
|
||||
|
||||
@@ -89,6 +89,10 @@
|
||||
|
||||
/* Border radius */
|
||||
--radius: 0.5rem;
|
||||
|
||||
/* Content width */
|
||||
--content-max: 1312px;
|
||||
--sidebar-width: 13.5rem;
|
||||
}
|
||||
|
||||
.dark {
|
||||
|
||||
@@ -217,7 +217,7 @@ function AuthenticatedLayout() {
|
||||
{isSetup ? (
|
||||
<Outlet />
|
||||
) : (
|
||||
<AppLayout>
|
||||
<AppLayout data-app-scope="fleet">
|
||||
<AnimatePresence mode="wait">
|
||||
<PageTransition pageKey={pageKey}>
|
||||
<Outlet />
|
||||
|
||||
Reference in New Issue
Block a user