diff --git a/components/ui/sheet.tsx b/components/ui/sheet.tsx index 7bf2857..913776e 100644 --- a/components/ui/sheet.tsx +++ b/components/ui/sheet.tsx @@ -25,6 +25,15 @@ function SheetClose({ function SheetPortal({ ...props }: React.ComponentProps) { + // Radix's Portal calls createPortal(children, document.body) as soon as it + // renders. During static prerendering there's no `document`, so gate the + // portal behind an effect that only runs in the browser. Closed sheets + // render nothing on the server anyway, so there's no visual/hydration change. + const [mounted, setMounted] = React.useState(false) + React.useEffect(() => setMounted(true), []) + + if (!mounted) return null + return }