| 1 | import { ref } from 'vue' |
| 2 | |
| 3 | export const pwaCaching = ref(false) |
| 4 | export const pwaReady = ref(false) |
| 5 | |
| 6 | export async function setupPWA() { |
| 7 | if (!__SLIDEV_FEATURE_PWA__) |
| 8 | return |
| 9 | |
| 10 | const { registerSW } = await import('virtual:pwa-register') |
| 11 | |
| 12 | pwaCaching.value = true |
| 13 | |
| 14 | registerSW({ |
| 15 | immediate: true, |
| 16 | onOfflineReady() { |
| 17 | pwaCaching.value = false |
| 18 | pwaReady.value = true |
| 19 | // Auto-dismiss "ready" indicator after 4 seconds |
| 20 | setTimeout(() => { |
| 21 | pwaReady.value = false |
| 22 | }, 4000) |
| 23 | }, |
| 24 | onRegisteredSW(_swUrl, _registration) { |
| 25 | // SW registered; caching is in progress until onOfflineReady fires |
| 26 | }, |
| 27 | }) |
| 28 | } |
| 29 |