From f4f929a79f98ee5a061ef78d51ba391a75ff8bea Mon Sep 17 00:00:00 2001 From: Brian Love Date: Wed, 13 May 2026 19:01:02 -0700 Subject: [PATCH] fix(chat-sidebar): position launcher button at bottom-right via wrapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous fix (#308) added to the chat-sidebar template, but the launcher itself has no inherent fixed positioning (it's a 56×56 div with `display: inline-block`). chat-popup positions its launcher via :host { position: fixed }, but chat-sidebar's :host is `display: block` to allow the content-pushes-on-open behavior. So the newly-added launcher in chat-sidebar flowed into the document at the natural position of the component — which for the demo shell ends up at (280, 1972), well off-screen. Wrap the launcher in a .chat-sidebar__launcher div with position: fixed; bottom: 1rem; right: 1rem; z-index: 30; matching chat-popup's launcher coordinates exactly. Also hide the launcher when the sidebar is open (the panel covers it and the panel has its own close button). Verified via demo.cacheplane.ai browser smoke after the previous fix. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../chat-sidebar/chat-sidebar.component.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libs/chat/src/lib/compositions/chat-sidebar/chat-sidebar.component.ts b/libs/chat/src/lib/compositions/chat-sidebar/chat-sidebar.component.ts index 96b60b950..238648cbb 100644 --- a/libs/chat/src/lib/compositions/chat-sidebar/chat-sidebar.component.ts +++ b/libs/chat/src/lib/compositions/chat-sidebar/chat-sidebar.component.ts @@ -52,10 +52,21 @@ import { CHAT_HOST_TOKENS } from '../../styles/chat-tokens'; justify-content: center; } .chat-sidebar__close:hover { background: var(--ngaf-chat-surface-alt); color: var(--ngaf-chat-text); } + .chat-sidebar__launcher { + position: fixed; + bottom: 1rem; + right: 1rem; + z-index: 30; + } + /* Hide the launcher when the sidebar is open — the close button on the + panel handles dismissal, and the panel covers the launcher anyway. */ + :host([data-open="true"]) .chat-sidebar__launcher { display: none; } `], template: `
- +
+ +