diff --git a/artifacts/visual-qa/manifest.json b/artifacts/visual-qa/manifest.json index f215093..58c7aee 100644 --- a/artifacts/visual-qa/manifest.json +++ b/artifacts/visual-qa/manifest.json @@ -1,5 +1,5 @@ { - "generatedAt": "2026-09-12T05:25:45.504Z", + "generatedAt": "2026-09-12T06:26:42.753Z", "module": "communications", "version": "v3.0", "referenceMockups": [ @@ -128,19 +128,19 @@ "filename": "mobile-chat.png", "theme": "state-capture", "viewport": "mobile-chat", - "capturedAt": "2026-09-12T05:25:36.209Z" + "capturedAt": "2026-09-12T06:26:42.411Z" }, { "filename": "mobile-contact.png", "theme": "state-capture", "viewport": "mobile-contact", - "capturedAt": "2026-09-12T05:25:36.390Z" + "capturedAt": "2026-09-12T06:26:42.582Z" }, { "filename": "mobile-list.png", "theme": "state-capture", "viewport": "mobile-list", - "capturedAt": "2026-09-12T05:25:35.998Z" + "capturedAt": "2026-09-12T06:26:42.215Z" }, { "filename": "noble-green-desktop-1280.png", diff --git a/artifacts/visual-qa/mobile-chat.png b/artifacts/visual-qa/mobile-chat.png index 510ae8f..5d8e598 100644 Binary files a/artifacts/visual-qa/mobile-chat.png and b/artifacts/visual-qa/mobile-chat.png differ diff --git a/artifacts/visual-qa/mobile-contact.png b/artifacts/visual-qa/mobile-contact.png index cd8e087..c0c1c6c 100644 Binary files a/artifacts/visual-qa/mobile-contact.png and b/artifacts/visual-qa/mobile-contact.png differ diff --git a/artifacts/visual-qa/mobile-list.png b/artifacts/visual-qa/mobile-list.png index 7bd8f3b..4737132 100644 Binary files a/artifacts/visual-qa/mobile-list.png and b/artifacts/visual-qa/mobile-list.png differ diff --git a/e2e/13-communications-visual-and-responsive.spec.ts b/e2e/13-communications-visual-and-responsive.spec.ts index 6db33d8..abf0940 100644 --- a/e2e/13-communications-visual-and-responsive.spec.ts +++ b/e2e/13-communications-visual-and-responsive.spec.ts @@ -134,7 +134,7 @@ test.describe('Scenario 13: Communications Visual & Responsive Design System V3 await expect(backToListBtn).toBeVisible(); // Check bottom contact teaser button - const profileTeaserBtn = activeChat.locator('button[aria-label="Открыть карточку контакта"]'); + const profileTeaserBtn = activeChat.getByRole('button', { name: /Открыть.*контакт/i }); await expect(profileTeaserBtn).toBeVisible(); // Check message composer is positioned within viewport diff --git a/src/app/layouts/AppShell.tsx b/src/app/layouts/AppShell.tsx index 571c91a..79c9965 100644 --- a/src/app/layouts/AppShell.tsx +++ b/src/app/layouts/AppShell.tsx @@ -10,6 +10,7 @@ import { QuickActionsModal } from '../shell/QuickActionsModal'; import { NotificationsDrawer } from '../shell/NotificationsDrawer'; import { Drawer } from '../../shared/ui'; import { useResponsive } from '../../shared/lib/useResponsive'; +import { useCommunicationsStore } from '../../features/communications/services/communicationsService'; export const AppShell: React.FC = () => { const { @@ -25,6 +26,7 @@ export const AppShell: React.FC = () => { const profile = getActiveProfile(); const location = useLocation(); const isCommunicationsPage = location.pathname.startsWith('/communications'); + const isMobileChatOpen = useCommunicationsStore((state) => state.isMobileChatOpen); useEffect(() => { document.documentElement.setAttribute('data-theme', theme); @@ -80,13 +82,13 @@ export const AppShell: React.FC = () => { {/* Center Work Area */}
- + {!(isEffectiveMobile && isCommunicationsPage && isMobileChatOpen) && } {/* Main Content Router Outlet */}
diff --git a/src/app/shell/BottomNav.tsx b/src/app/shell/BottomNav.tsx index ba5ae5a..a97e5bb 100644 --- a/src/app/shell/BottomNav.tsx +++ b/src/app/shell/BottomNav.tsx @@ -22,12 +22,12 @@ export const BottomNav: React.FC = () => {
+ } {/* Message Composer */}
-
- )} ); @@ -652,7 +645,7 @@ export function MessengersView({ onOpenConnectModal, onOpenAddContactModal }: Me className="flex-1 min-h-0 flex flex-col bg-[var(--krona-bg-workspace)] overflow-hidden" > {/* 1. Channel Switcher Row (# 17. Channel Switcher) */} -
+ {!(layoutMode === 'compact' && isMobileChatOpen) &&
-
+
} {/* 2. Main Workspace Canvas */} -
+
{/* COMPACT MODE (<600px): strictly 1 level at a time */} {layoutMode === 'compact' && ( <>