Skip to content

Commit c6c7ebb

Browse files
committed
fix(goose2): avoid transform-rasterized dialog text
Center dialogs with an untransformed positioner instead of translating and scaling the content layer. This avoids macOS/Tauri WebView rasterizing dialog text on a composited transform layer, which is more visible on lower-DPI or scaled external displays.
1 parent 7d69e14 commit c6c7ebb

2 files changed

Lines changed: 33 additions & 23 deletions

File tree

ui/goose2/src/shared/ui/alert-dialog.tsx

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,19 @@ function AlertDialogContent({
4949
return (
5050
<AlertDialogPortal>
5151
<AlertDialogOverlay />
52-
<AlertDialogPrimitive.Content
53-
data-slot="alert-dialog-content"
54-
className={cn(
55-
"bg-background shadow-modal data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-modal border p-6 duration-200 sm:max-w-lg",
56-
className,
57-
)}
58-
{...props}
59-
/>
52+
<div
53+
data-slot="alert-dialog-positioner"
54+
className="pointer-events-none fixed inset-0 z-50 grid grid-rows-[minmax(1rem,1fr)_auto_minmax(1rem,1fr)] justify-items-center overflow-y-auto px-4"
55+
>
56+
<AlertDialogPrimitive.Content
57+
data-slot="alert-dialog-content"
58+
className={cn(
59+
"pointer-events-auto relative row-start-2 grid w-full max-w-lg gap-4 rounded-modal border bg-background p-6 shadow-modal data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
60+
className,
61+
)}
62+
{...props}
63+
/>
64+
</div>
6065
</AlertDialogPortal>
6166
);
6267
}

ui/goose2/src/shared/ui/dialog.tsx

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,22 +55,27 @@ function DialogContent({
5555
return (
5656
<DialogPortal data-slot="dialog-portal">
5757
<DialogOverlay />
58-
<DialogPrimitive.Content
59-
data-slot="dialog-content"
60-
className={cn(
61-
"bg-background shadow-modal data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-modal border p-6 duration-200 sm:max-w-lg",
62-
className,
63-
)}
64-
{...props}
58+
<div
59+
data-slot="dialog-positioner"
60+
className="pointer-events-none fixed inset-0 z-50 grid grid-rows-[minmax(1rem,1fr)_auto_minmax(1rem,1fr)] justify-items-center overflow-y-auto px-4"
6561
>
66-
{children}
67-
{showCloseButton && (
68-
<DialogPrimitive.Close className="ring-offset-background focus-visible:ring-ring data-[state=open]:bg-muted data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4">
69-
<XIcon />
70-
<span className="sr-only">Close</span>
71-
</DialogPrimitive.Close>
72-
)}
73-
</DialogPrimitive.Content>
62+
<DialogPrimitive.Content
63+
data-slot="dialog-content"
64+
className={cn(
65+
"pointer-events-auto relative row-start-2 grid w-full max-w-lg gap-4 rounded-modal border bg-background p-6 shadow-modal data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
66+
className,
67+
)}
68+
{...props}
69+
>
70+
{children}
71+
{showCloseButton && (
72+
<DialogPrimitive.Close className="ring-offset-background focus-visible:ring-ring data-[state=open]:bg-muted data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4">
73+
<XIcon />
74+
<span className="sr-only">Close</span>
75+
</DialogPrimitive.Close>
76+
)}
77+
</DialogPrimitive.Content>
78+
</div>
7479
</DialogPortal>
7580
);
7681
}

0 commit comments

Comments
 (0)