From e5552e72f7a9b14a3f393866fdeba816a82ce5d6 Mon Sep 17 00:00:00 2001 From: name Date: Sun, 12 Apr 2026 01:55:57 -0700 Subject: [PATCH] hide fullscreen controls on iOS/devices without Fullscreen API iOS Safari doesn't support requestFullscreen. Detect support and: - Intro page: show single START button instead of FULLSCREEN/WINDOWED - AppLayout: hide the global fullscreen button entirely Co-Authored-By: Claude Opus 4.6 (1M context) --- src/app/AppLayout.tsx | 7 ++++-- src/lib/platform.ts | 3 +++ src/pages/IntroPage.tsx | 56 ++++++++++++++++++++++++++--------------- 3 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 src/lib/platform.ts diff --git a/src/app/AppLayout.tsx b/src/app/AppLayout.tsx index 3c7188b..8956c57 100644 --- a/src/app/AppLayout.tsx +++ b/src/app/AppLayout.tsx @@ -1,15 +1,18 @@ import { useCallback, useEffect, useState } from 'react' import { Outlet } from 'react-router-dom' +import { supportsFullscreen } from '../lib/platform' import styles from './AppLayout.module.css' export function AppLayout() { + const canFullscreen = supportsFullscreen() const [isFullscreen, setIsFullscreen] = useState(!!document.fullscreenElement) useEffect(() => { + if (!canFullscreen) return const onChange = () => setIsFullscreen(!!document.fullscreenElement) document.addEventListener('fullscreenchange', onChange) return () => document.removeEventListener('fullscreenchange', onChange) - }, []) + }, [canFullscreen]) const goFullscreen = useCallback(() => { document.documentElement.requestFullscreen().catch(() => {}) @@ -20,7 +23,7 @@ export function AppLayout() {
- {!isFullscreen && ( + {canFullscreen && !isFullscreen && ( - + {supportsFullscreen() ? ( + <> + + + + ) : ( + + )} )}