import { Card } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Label } from '@/components/ui/label' import { Switch } from '@/components/ui/switch' import { Separator } from '@/components/ui/separator' import { Badge } from '@/components/ui/badge' import { usePWA } from '@/hooks/use-pwa' import { useState, useEffect } from 'react' import { Download, CloudArrowDown, Trash, Bell, WifiSlash, WifiHigh, CheckCircle, XCircle, Question } from '@phosphor-icons/react' import { toast } from 'sonner' export function PWASettings() { const { isInstalled, isInstallable, isOnline, isUpdateAvailable, installApp, updateApp, clearCache, requestNotificationPermission, registration } = usePWA() const [notificationPermission, setNotificationPermission] = useState('default') const [cacheSize, setCacheSize] = useState('Calculating...') useEffect(() => { if ('Notification' in window) { setNotificationPermission(Notification.permission) } if ('storage' in navigator && 'estimate' in navigator.storage) { navigator.storage.estimate().then(estimate => { const usageInMB = ((estimate.usage || 0) / (1024 * 1024)).toFixed(2) setCacheSize(`${usageInMB} MB`) }) } }, []) const handleInstall = async () => { const success = await installApp() if (success) { toast.success('App installed successfully!') } else { toast.error('Installation cancelled') } } const handleUpdate = () => { updateApp() toast.info('Updating app...') } const handleClearCache = () => { clearCache() toast.success('Cache cleared! Reloading...') } const handleNotificationToggle = async (enabled: boolean) => { if (enabled) { const permission = await requestNotificationPermission() setNotificationPermission(permission as NotificationPermission) if (permission === 'granted') { toast.success('Notifications enabled') } else { toast.error('Notification permission denied') } } } const getPermissionIcon = () => { switch (notificationPermission) { case 'granted': return case 'denied': return default: return } } return (

PWA Settings

Configure Progressive Web App features and behavior

Installation Status

Install the app for offline access and better performance

{isInstalled ? 'Installed' : isInstallable ? 'Available' : 'Not available'}

{isInstalled && ( Installed )} {isInstallable && !isInstalled && ( )} {!isInstallable && !isInstalled && ( Not Available )}

Connection Status

Current network connectivity status

{isOnline ? ( ) : ( )}

{isOnline ? 'Connected to internet' : 'Working offline'}

{isOnline ? 'Online' : 'Offline'}
{isUpdateAvailable && (

Update Available

A new version of the app is ready to install

Update now for latest features

)}

Notifications

Receive updates about your projects and builds

Permission: {notificationPermission}

{getPermissionIcon()}
{notificationPermission === 'denied' && (
Notifications are blocked. Please enable them in your browser settings.
)}

Cache Management

Manage offline storage and cached resources

{cacheSize}
{registration ? 'Active' : 'Inactive'}

This will remove all cached files and reload the app

PWA Features

Progressive Web App capabilities

Offline Support
Installable {isInstallable || isInstalled ? ( ) : ( )}
Background Sync
Push Notifications {'Notification' in window ? ( ) : ( )}
App Shortcuts
) }