/** * Composable to track online/offline status * * Usage: * const { isOnline, wasOffline } = useOnlineStatus() * * watch(isOnline, (online) => { * if (online && wasOffline.value) { * // User came back online, sync data * } * }) */ export function useOnlineStatus() { const isOnline = ref(true) const wasOffline = ref(false) if (process.client) { // Initial state isOnline.value = navigator.onLine // Listen for online/offline events const updateOnlineStatus = () => { const online = navigator.onLine if (!online && isOnline.value) { // Just went offline wasOffline.value = true } isOnline.value = online } window.addEventListener('online', updateOnlineStatus) window.addEventListener('offline', updateOnlineStatus) // Cleanup on unmount onUnmounted(() => { window.removeEventListener('online', updateOnlineStatus) window.removeEventListener('offline', updateOnlineStatus) }) } return { isOnline: readonly(isOnline), wasOffline: readonly(wasOffline) } }