diff --git a/apps/desktop/src/app/contrib/controller.tsx b/apps/desktop/src/app/contrib/controller.tsx index 92116f3be6bcd..5c65fd3f19ca7 100644 --- a/apps/desktop/src/app/contrib/controller.tsx +++ b/apps/desktop/src/app/contrib/controller.tsx @@ -810,16 +810,16 @@ export function ContribController() {
is the only thing between the page and the - // vibrancy material. - data-contrib-shell="" - style={{ '--titlebar-height': '0px' } as CSSProperties} - > - {/* Title bar: fixed chrome outside the grid, composable via slots. + className="flex h-screen min-h-0 w-screen flex-col bg-(--ui-bg-chrome) text-(--ui-text-primary)" + // Window-glass hook: this div and the sidebar-wrapper above it are + // the app shell's two full-window opaque painters; the + // [data-hermes-glass] rules in styles.css clear them so the tint + // painted by is the only thing between the page and the + // vibrancy material. + data-contrib-shell="" + style={{ '--titlebar-height': '0px' } as CSSProperties} + > + {/* Title bar: fixed chrome outside the grid, composable via slots. Layout contract (no contribution can break it): - a full-bar DRAG BASE underneath (pointer-events-none, like AppShell's drag strips) — everywhere without content drags @@ -830,56 +830,56 @@ export function ContribController() { tree-published --workspace-left/right vars (pure CSS, no rect threading), clamped to clear the REAL TitlebarControls clusters (fixed, z-70); center is truly window-centered. */} -
- {/* Drag strips, AppShell-style: cut to AVOID the fixed control +
+ {/* Drag strips, AppShell-style: cut to AVOID the fixed control clusters instead of overlapping them — Electron's no-drag carve-out of fixed/transformed elements is unreliable, so a full-bar drag base kills their clicks. In-flow slot content still carves via its own no-drag wrapper (the same pattern as the app's session-title button). */} - ) diff --git a/apps/desktop/src/sdk/index.ts b/apps/desktop/src/sdk/index.ts index d3e75aac3560b..ffafa03f0a839 100644 --- a/apps/desktop/src/sdk/index.ts +++ b/apps/desktop/src/sdk/index.ts @@ -120,8 +120,7 @@ const $focusedAwaitingResponse = focusedTurnFlag( */ const $focusedSessionProfile = computed( [$focusedStoredSessionId, $sessions, $activeGatewayProfile], - (focused, sessions, activeProfile) => - normalizeProfileKey(rememberedSessionProfile(sessions, focused, activeProfile)) + (focused, sessions, activeProfile) => normalizeProfileKey(rememberedSessionProfile(sessions, focused, activeProfile)) ) export interface PluginProfileRoute { diff --git a/apps/desktop/src/sdk/profile-routing.test.ts b/apps/desktop/src/sdk/profile-routing.test.ts index 34dc7b6117608..da517a373067a 100644 --- a/apps/desktop/src/sdk/profile-routing.test.ts +++ b/apps/desktop/src/sdk/profile-routing.test.ts @@ -29,11 +29,8 @@ vi.mock('@/store/session', async () => { $messages: atom([]), $selectedStoredSessionId: atom(null), $sessions: atom([]), - rememberedSessionProfile: ( - _sessions: unknown, - _sessionId: null | string, - activeProfile: null | string - ) => (activeProfile ?? '').trim() || 'default', + rememberedSessionProfile: (_sessions: unknown, _sessionId: null | string, activeProfile: null | string) => + (activeProfile ?? '').trim() || 'default', requestSessionResume: vi.fn(), setResumeExhaustedSessionId: vi.fn() }