diff --git a/apps/web/src/components/chat/ComposerBannerStack.tsx b/apps/web/src/components/chat/ComposerBannerStack.tsx index 3f8f56f041a..b60f1533da3 100644 --- a/apps/web/src/components/chat/ComposerBannerStack.tsx +++ b/apps/web/src/components/chat/ComposerBannerStack.tsx @@ -172,11 +172,7 @@ function ComposerBannerStackAlert({ const dismissOnly = item.onDismiss && !item.actions; return ( - + {item.icon} {item.title} {item.description ? {item.description} : null} diff --git a/apps/web/src/components/chat/ProviderStatusBanner.test.tsx b/apps/web/src/components/chat/ProviderStatusBanner.test.tsx index 2a5bfe9ed3a..3d8a33360eb 100644 --- a/apps/web/src/components/chat/ProviderStatusBanner.test.tsx +++ b/apps/web/src/components/chat/ProviderStatusBanner.test.tsx @@ -41,7 +41,15 @@ describe("ProviderStatusBanner", () => { expect(markup).toContain('role="alert"'); expect(markup).toContain('aria-label="Dismiss Codex provider warning"'); - expect(markup).toContain("absolute top-2 right-2"); + }); + + it("renders an opaque surface so the timeline behind it cannot read through", () => { + const markup = renderToStaticMarkup( + {}} />, + ); + + expect(markup).toContain("alert-glass"); + expect(markup).toContain('data-variant="warning"'); }); it("labels error dismiss controls with the correct severity", () => { diff --git a/apps/web/src/components/chat/ProviderStatusBanner.tsx b/apps/web/src/components/chat/ProviderStatusBanner.tsx index a64a94bc1c3..957fe8c9049 100644 --- a/apps/web/src/components/chat/ProviderStatusBanner.tsx +++ b/apps/web/src/components/chat/ProviderStatusBanner.tsx @@ -3,6 +3,8 @@ import { memo } from "react"; import { InfoIcon, XIcon } from "lucide-react"; import { cn } from "~/lib/utils"; import { formatProviderDriverKindLabel } from "../../providerModels"; +import { Alert, AlertAction, AlertDescription, AlertTitle } from "../ui/alert"; +import { Button } from "../ui/button"; import { Tooltip, TooltipPopup, TooltipTrigger } from "../ui/tooltip"; export function getProviderStatusBannerKey(status: ServerProvider | null): string | null { @@ -31,6 +33,7 @@ export const ProviderStatusBanner = memo(function ProviderStatusBanner({ } const providerName = status.displayName?.trim() || formatProviderDriverKindLabel(status.driver); + const variant = status.status === "warning" ? "warning" : "error"; const isUnauthenticated = status.status === "error" && status.auth.status === "unauthenticated"; const title = isUnauthenticated ? `${providerName} is unauthenticated` @@ -44,36 +47,34 @@ export const ProviderStatusBanner = memo(function ProviderStatusBanner({ return (
-
- -
-
{title}
+ + + {title} + - {message}
} - /> + {message}
} /> {message} -
- - + + + + +
); }); diff --git a/apps/web/src/components/ui/alert.tsx b/apps/web/src/components/ui/alert.tsx index 20be44dd3e5..c2b8c5ea0d7 100644 --- a/apps/web/src/components/ui/alert.tsx +++ b/apps/web/src/components/ui/alert.tsx @@ -68,6 +68,7 @@ function Alert({