Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kentcdodds/lineage

src/ui/install-state.ts

35 lines · 914 B · TypeScript
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
}