import React, { useState } from 'react'; import { OfflineModeIndicator } from './OfflineModeIndicator'; import './OfflineModeDemo.css'; export const OfflineModeDemo: React.FC = () => { const [isSimulatingOffline, setIsSimulatingOffline] = useState(false); const [isSimulatingRefresh, setIsSimulatingRefresh] = useState(false); const simulateOfflineMode = () => { setIsSimulatingOffline(!isSimulatingOffline); // Override navigator.onLine temporarily Object.defineProperty(navigator, 'onLine', { writable: true, value: !isSimulatingOffline }); // Dispatch online/offline events const event = new Event(isSimulatingOffline ? 'online' : 'offline'); window.dispatchEvent(event); }; const simulateCacheRefresh = async () => { if (isSimulatingRefresh) return; setIsSimulatingRefresh(true); // Simulate cache refresh start window.dispatchEvent(new CustomEvent('cache-refresh-start', { detail: { totalSongs: 50 } })); // Simulate progress updates for (let i = 0; i <= 50; i++) { await new Promise(resolve => setTimeout(resolve, 50)); const progress = (i / 50) * 100; window.dispatchEvent(new CustomEvent('cache-refresh-progress', { detail: { progress, refreshedSongs: i } })); } // Simulate completion window.dispatchEvent(new CustomEvent('cache-refresh-complete')); setIsSimulatingRefresh(false); }; const simulateShuffleToggle = () => { // Simulate shuffle toggle event that would normally come from PlaybackManager window.dispatchEvent(new CustomEvent('shuffle-toggled', { detail: { shuffleEnabled: true, currentTrack: { Id: 'demo-track', Name: 'Demo Song' }, playlistLength: 50 } })); }; return (

Offline Mode Indicator Demo

Test the offline mode indicator functionality with these controls:

Full Indicator:

Compact Indicator:

Orb Indicator (Header Style):

Hover to see tooltip

How it works:

); }; export default OfflineModeDemo;