diff --git a/src/renderer/lib/modal/modal-renderer.tsx b/src/renderer/lib/modal/modal-renderer.tsx index 556b1a476a..750477e43c 100644 --- a/src/renderer/lib/modal/modal-renderer.tsx +++ b/src/renderer/lib/modal/modal-renderer.tsx @@ -106,7 +106,9 @@ export const ModalRenderer = observer(function ModalRenderer() { } }} className={cn( - 'fixed left-1/2 z-50 flex max-h-[calc(100dvh-2rem)] w-full max-w-[calc(100%-2rem)] -translate-x-1/2 flex-col overflow-hidden rounded-xl bg-background-quaternary text-sm ring-1 ring-foreground/10 duration-100 outline-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95', + // Keep the exit animation's final frame until JS unmounts; otherwise busy renders + // can make the modal flash visible again after fading out. + 'fixed left-1/2 z-50 flex max-h-[calc(100dvh-2rem)] w-full max-w-[calc(100%-2rem)] -translate-x-1/2 flex-col overflow-hidden rounded-xl bg-background-quaternary text-sm ring-1 ring-foreground/10 duration-100 outline-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-closed:fill-mode-forwards', POSITION_CLASSES[displayEntry?.position ?? 'center'], SIZE_CLASSES[displayEntry?.size ?? 'md'] )} diff --git a/src/renderer/lib/ui/dialog.tsx b/src/renderer/lib/ui/dialog.tsx index 756e461cd3..cbadb0b39e 100644 --- a/src/renderer/lib/ui/dialog.tsx +++ b/src/renderer/lib/ui/dialog.tsx @@ -25,7 +25,7 @@ function DialogOverlay({ className, ...props }: DialogPrimitive.Backdrop.Props)