From 34eb357ee0e4f9a590c0ef6716e227e26f8c2ee6 Mon Sep 17 00:00:00 2001 From: jwinterm Date: Thu, 22 Jan 2026 11:18:54 -0500 Subject: [PATCH] fix: safari loading issue --- .../components/landing/dynamic-background.tsx | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/apps/web/src/components/landing/dynamic-background.tsx b/apps/web/src/components/landing/dynamic-background.tsx index 8c8bed8..f49f925 100644 --- a/apps/web/src/components/landing/dynamic-background.tsx +++ b/apps/web/src/components/landing/dynamic-background.tsx @@ -25,15 +25,22 @@ export function DynamicBackground({ nebulaPosition }: DynamicBackgroundProps) { useEffect(() => { setMounted(true); // Delay nebula render to prioritize main content (LCP) - const timer = requestIdleCallback - ? requestIdleCallback(() => setShowNebula(true)) - : setTimeout(() => setShowNebula(true), 100); + // Use typeof check for Safari compatibility (requestIdleCallback not supported) + let idleHandle: number | undefined; + let timeoutHandle: number | undefined; + + if (typeof window !== 'undefined' && 'requestIdleCallback' in window) { + idleHandle = window.requestIdleCallback(() => setShowNebula(true)); + } else { + timeoutHandle = window.setTimeout(() => setShowNebula(true), 100); + } return () => { - if (typeof timer === 'number') { - clearTimeout(timer); - } else if (cancelIdleCallback) { - cancelIdleCallback(timer as unknown as number); + if (timeoutHandle !== undefined) { + window.clearTimeout(timeoutHandle); + } + if (idleHandle !== undefined && 'cancelIdleCallback' in window) { + window.cancelIdleCallback(idleHandle); } }; }, []);