4.2 KiB
UI Components
This directory contains reusable UI components for the AnthoLume application.
Toast Notifications
Usage
The toast system provides info, warning, and error notifications that respect the current theme and dark/light mode.
import { useToasts } from './components/ToastContext';
function MyComponent() {
const { showInfo, showWarning, showError, showToast } = useToasts();
const handleAction = async () => {
try {
// Do something
showInfo('Operation completed successfully!');
} catch (error) {
showError('An error occurred while processing your request.');
}
};
return <button onClick={handleAction}>Click me</button>;
}
API
-
showToast(message: string, type?: 'info' | 'warning' | 'error', duration?: number): string- Shows a toast notification
- Returns the toast ID for manual removal
- Default type: 'info'
- Default duration: 5000ms (0 = no auto-dismiss)
-
showInfo(message: string, duration?: number): string- Shortcut for showing an info toast
-
showWarning(message: string, duration?: number): string- Shortcut for showing a warning toast
-
showError(message: string, duration?: number): string- Shortcut for showing an error toast
-
removeToast(id: string): void- Manually remove a toast by ID
-
clearToasts(): void- Clear all active toasts
Examples
// Info toast (auto-dismisses after 5 seconds)
showInfo('Document saved successfully!');
// Warning toast (auto-dismisses after 10 seconds)
showWarning('Low disk space warning', 10000);
// Error toast (no auto-dismiss)
showError('Failed to load data', 0);
// Generic toast
showToast('Custom message', 'warning', 3000);
Skeleton Loading
Usage
Skeleton components provide placeholder content while data is loading. They automatically adapt to dark/light mode.
Components
Skeleton
Basic skeleton element with various variants:
import { Skeleton } from './components/Skeleton';
// Default (rounded rectangle)
<Skeleton className="w-full h-8" />
// Text variant
<Skeleton variant="text" className="w-3/4" />
// Circular variant (for avatars)
<Skeleton variant="circular" width={40} height={40} />
// Rectangular variant
<Skeleton variant="rectangular" width="100%" height={200} />
SkeletonText
Multiple lines of text skeleton:
<SkeletonText lines={3} />
<SkeletonText lines={5} className="max-w-md" />
SkeletonAvatar
Avatar placeholder:
<SkeletonAvatar size="md" />
<SkeletonAvatar size={56} />
SkeletonCard
Card placeholder with optional elements:
// Default card
<SkeletonCard />
// With avatar
<SkeletonCard showAvatar />
// Custom configuration
<SkeletonCard
showAvatar
showTitle
showText
textLines={4}
className="max-w-sm"
/>
SkeletonTable
Table placeholder:
<SkeletonTable rows={5} columns={4} />
<SkeletonTable rows={10} columns={6} showHeader={false} />
SkeletonButton
Button placeholder:
<SkeletonButton width={120} />
<SkeletonButton className="w-full" />
PageLoader
Full-page loading indicator:
<PageLoader message="Loading your documents..." />
InlineLoader
Small inline loading spinner:
<InlineLoader size="sm" />
<InlineLoader size="md" />
<InlineLoader size="lg" />
Integration with Table Component
The Table component now supports skeleton loading:
import { Table, SkeletonTable } from './components/Table';
function DocumentList() {
const { data, isLoading } = useGetDocuments();
if (isLoading) {
return <SkeletonTable rows={10} columns={5} />;
}
return <Table columns={columns} data={data?.documents || []} />;
}
Theme Support
All components automatically adapt to the current theme:
- Light mode: Uses gray tones for skeletons, appropriate colors for toasts
- Dark mode: Uses darker gray tones for skeletons, adjusted colors for toasts
The theme is controlled via Tailwind's dark: classes, which respond to the system preference or manual theme toggles.
Dependencies
clsx- Utility for constructing className stringstailwind-merge- Merges Tailwind CSS classes intelligentlylucide-react- Icon library used by Toast component