Add PWA install badge for desktop and tablet (manifest, SW, Add to Home Screen).
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
/** PWA install helpers for desktop + tablet browsers. */
|
||||
|
||||
export type BeforeInstallPromptEvent = Event & {
|
||||
prompt: () => Promise<void>;
|
||||
userChoice: Promise<{ outcome: "accepted" | "dismissed"; platform: string }>;
|
||||
};
|
||||
|
||||
export function isStandaloneDisplay(): boolean {
|
||||
if (typeof window === "undefined") return false;
|
||||
const mq = window.matchMedia("(display-mode: standalone)");
|
||||
if (mq.matches) return true;
|
||||
// iPad / iOS Safari home-screen launch
|
||||
const nav = window.navigator as Navigator & { standalone?: boolean };
|
||||
return Boolean(nav.standalone);
|
||||
}
|
||||
|
||||
export function isAppleTouchDevice(): boolean {
|
||||
if (typeof navigator === "undefined") return false;
|
||||
const ua = navigator.userAgent || "";
|
||||
const iOS = /iPad|iPhone|iPod/.test(ua);
|
||||
// iPadOS 13+ may report as Macintosh with touch
|
||||
const iPadOs =
|
||||
navigator.platform === "MacIntel" && (navigator.maxTouchPoints || 0) > 1;
|
||||
return iOS || iPadOs;
|
||||
}
|
||||
|
||||
export function registerServiceWorker(): void {
|
||||
if (typeof window === "undefined" || !("serviceWorker" in navigator)) return;
|
||||
window.addEventListener("load", () => {
|
||||
navigator.serviceWorker.register("/sw.js").catch(() => {
|
||||
/* ignore: HTTP/dev without SW is fine */
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user