export function isStandaloneDisplay(input: { displayModeStandalone: boolean navigatorStandalone?: boolean }): boolean { return input.displayModeStandalone || input.navigatorStandalone === true } export function isIosBrowser(input: { userAgent: string platform?: string maxTouchPoints?: number }): boolean { if (/iphone|ipad|ipod/i.test(input.userAgent)) return true return input.platform === 'MacIntel' && (input.maxTouchPoints ?? 0) > 1 } export function isSafariFamily(userAgent: string): boolean { return /Safari/i.test(userAgent) } export function shouldShowInstallButton(input: { standalone: boolean ios: boolean }): boolean { return !input.standalone && !input.ios } export function shouldShowIosInstallHint(input: { standalone: boolean ios: boolean safariFamily: boolean dismissed: boolean }): boolean { return input.ios && !input.standalone && input.safariFamily && !input.dismissed }