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:
dekun
2026-07-26 21:57:39 +08:00
parent aca9d80e64
commit cb97a45051
14 changed files with 356 additions and 4 deletions
+34
View File
@@ -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 */
});
});
}