Complete rename of "swift" terminology to "cortex" across the codebase: Code Changes: - Rename directories: lib/swift → lib/cortex, components/swift → components/cortex - Rename API routes: /api/swift/* → /api/cortex/* - Rename page routes: /epd/swift → /epd/cortex - Rename store: swift-store.ts → cortex-store.ts Type Renames: - SwiftIntent → CortexIntent - SwiftStore → CortexStore - useSwiftStore → useCortexStore - SwiftContext → CortexContext - useSwiftVoice → useCortexVoice Documentation Updates (docs/intent/): - Safety Net → Nudge (Layer 3 rename) - SafetySuggestion → NudgeSuggestion - evaluateSafetyNet → evaluateNudge - SWIFT_* feature flags → CORTEX_* - All path references updated to match new structure Files affected: 47 files, ~700 lines changed 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
72 lines
1.8 KiB
TypeScript
72 lines
1.8 KiB
TypeScript
'use client';
|
|
|
|
/**
|
|
* Offline Banner
|
|
*
|
|
* Toont een banner wanneer de gebruiker offline is.
|
|
* E5.S2: Offline detection en melding.
|
|
*/
|
|
|
|
import { useState, useEffect } from 'react';
|
|
import { WifiOff } from 'lucide-react';
|
|
import { cn } from '@/lib/utils';
|
|
|
|
export function OfflineBanner() {
|
|
const [isOffline, setIsOffline] = useState(false);
|
|
|
|
useEffect(() => {
|
|
// Initial check
|
|
setIsOffline(!navigator.onLine);
|
|
|
|
// Listen for online/offline events
|
|
const handleOnline = () => setIsOffline(false);
|
|
const handleOffline = () => setIsOffline(true);
|
|
|
|
window.addEventListener('online', handleOnline);
|
|
window.addEventListener('offline', handleOffline);
|
|
|
|
return () => {
|
|
window.removeEventListener('online', handleOnline);
|
|
window.removeEventListener('offline', handleOffline);
|
|
};
|
|
}, []);
|
|
|
|
if (!isOffline) return null;
|
|
|
|
return (
|
|
<div
|
|
className={cn(
|
|
'fixed top-0 left-0 right-0 z-[100] bg-amber-500 text-white px-4 py-2',
|
|
'flex items-center justify-center gap-2 text-sm font-medium',
|
|
'shadow-md'
|
|
)}
|
|
style={{ height: '40px' }}
|
|
>
|
|
<WifiOff className="h-4 w-4" />
|
|
<span>Geen internetverbinding</span>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Hook om te checken of de gebruiker offline is
|
|
*/
|
|
export function useOffline() {
|
|
const [isOffline, setIsOffline] = useState(false);
|
|
|
|
useEffect(() => {
|
|
setIsOffline(!navigator.onLine);
|
|
const handleOnline = () => setIsOffline(false);
|
|
const handleOffline = () => setIsOffline(true);
|
|
window.addEventListener('online', handleOnline);
|
|
window.addEventListener('offline', handleOffline);
|
|
return () => {
|
|
window.removeEventListener('online', handleOnline);
|
|
window.removeEventListener('offline', handleOffline);
|
|
};
|
|
}, []);
|
|
|
|
return isOffline;
|
|
}
|
|
|