From 8024ce72efbd7ccd5332eaac048b96af954c947e Mon Sep 17 00:00:00 2001 From: thomaspblock Date: Mon, 20 Jul 2026 13:58:56 +0200 Subject: [PATCH] fix(desktop): mask composer rounded corners (#2165) --- .../src/features/channels/ui/ChannelPane.tsx | 2 +- .../messages/ui/MessageThreadPanel.tsx | 2 +- .../src/shared/styles/globals/composer.css | 39 +++++++++++++++++++ .../e2e/channel-composer-overflow.spec.ts | 35 ++++++++++++++++- 4 files changed, 75 insertions(+), 3 deletions(-) diff --git a/desktop/src/features/channels/ui/ChannelPane.tsx b/desktop/src/features/channels/ui/ChannelPane.tsx index 810ea2714..121e211f4 100644 --- a/desktop/src/features/channels/ui/ChannelPane.tsx +++ b/desktop/src/features/channels/ui/ChannelPane.tsx @@ -734,7 +734,7 @@ export const ChannelPane = React.memo(function ChannelPane({ data-testid="channel-composer-overlay" ref={composerWrapperRef} > -
+
{timeoutState.active ? (
{ const after = getComputedStyle(element, "::after"); const before = getComputedStyle(element, "::before"); - return after.content !== "none" && before.content !== "none"; + const composer = element.querySelector( + '[data-testid="message-composer"]', + ); + const cornerMaskContainer = element.querySelector( + ".composer-overlay-corner-masks", + ); + if (!composer || !cornerMaskContainer) return false; + + const overlayRect = element.getBoundingClientRect(); + const composerRect = composer.getBoundingClientRect(); + const leftMask = getComputedStyle(cornerMaskContainer, "::before"); + const rightMask = getComputedStyle(cornerMaskContainer, "::after"); + const tolerance = 0.5; + + return ( + after.content !== "none" && + before.content !== "none" && + leftMask.maskImage !== "none" && + rightMask.maskImage !== "none" && + Math.abs( + composerRect.left - overlayRect.left - Number.parseFloat(leftMask.left), + ) <= tolerance && + Math.abs( + overlayRect.right - + composerRect.right - + Number.parseFloat(rightMask.right), + ) <= tolerance && + Math.abs( + overlayRect.bottom - + composerRect.bottom - + Number.parseFloat(leftMask.bottom), + ) <= tolerance && + leftMask.bottom === rightMask.bottom + ); }); expect(hasMask).toBe(true); }