From 9129cfe39f81b142cb10991daa21b803fa8771ce Mon Sep 17 00:00:00 2001 From: Guilhem Lemouel Date: Tue, 22 Sep 2026 18:49:33 +0200 Subject: [PATCH] feat: no border under the page header, and the peek card closes on the way out MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The band draws no bottom edge and no page asks it to, so `barBorder` goes with it — a page that needs the separation draws its own line, as the detail pages now do above the run form and the tab strip. With nothing toggling a border, the band is a flat 44px on every route. The detached sidebar's card is a hover affordance, so it leaves when the pointer does: off the handle and off the card both, on the same debounce a hover menu uses, because the two do not touch and the leave of one fires before the enter of the other. The mobile drawer is opened deliberately and still stays until it is dismissed. Co-Authored-By: Claude Opus 5 (1M context) --- .../src/lib/components/FlowBuilder.svelte | 1 - .../src/lib/components/PageHeaderBar.svelte | 20 +++++---------- .../lib/components/PageHeaderContent.svelte | 6 ++--- frontend/src/lib/components/RunsPage.svelte | 2 +- .../details/DetailPageLayout.svelte | 6 +++-- .../components/pageHeaderRegistry.svelte.ts | 3 --- .../sidebar/navHandlePlacement.svelte.ts | 13 ++++++++-- .../src/routes/(root)/(logged)/+layout.svelte | 25 ++++++++++++++++--- .../(root)/(logged)/sessions/+page.svelte | 1 - 9 files changed, 46 insertions(+), 31 deletions(-) diff --git a/frontend/src/lib/components/FlowBuilder.svelte b/frontend/src/lib/components/FlowBuilder.svelte index 14acef76dc..8c34de9503 100644 --- a/frontend/src/lib/components/FlowBuilder.svelte +++ b/frontend/src/lib/components/FlowBuilder.svelte @@ -1559,7 +1559,6 @@ }} actions={flowHeaderActions} contexts={headerContexts} - barBorder={false} /> {:else} diff --git a/frontend/src/lib/components/PageHeaderBar.svelte b/frontend/src/lib/components/PageHeaderBar.svelte index cf58195194..20eb7413ae 100644 --- a/frontend/src/lib/components/PageHeaderBar.svelte +++ b/frontend/src/lib/components/PageHeaderBar.svelte @@ -16,31 +16,23 @@ The row's height matches the sidebar's own header row, so the two read as one ba import { pageHeader } from './pageHeaderRegistry.svelte' import ContextBridge from './ContextBridge.svelte' - let { border = true }: { border?: boolean } = $props() - const content = $derived(pageHeader.content) const actions = $derived(pageHeader.actions) - // A route can drop the band's bottom edge when its own content draws one. The border stays in - // the box either way — only its colour goes — so the band's contents do not shift a pixel when - // a navigation swaps one kind of route for the other. - const showBorder = $derived(content?.barBorder ?? border) - const item = $derived(content?.item) const section = $derived(content?.section) -
+
{#if navDetached.val} -
navHandleSlot.open()}> +
navHandleSlot.open()} + onmouseleave={() => navHandleSlot.scheduleClose()} + >