From 3f55533558b6cda54ed7c0ea8f8536ca4c3f6eff Mon Sep 17 00:00:00 2001 From: Guilhem Lemouel Date: Wed, 23 Sep 2026 09:18:47 +0200 Subject: [PATCH] fix: keep a page's own controls when the workspace navigation is hidden MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `menuHidden` means "this is an embed, don't show the workspace's navigation" — but Runs, the detail pages and the flow editor now keep their controls in the band and nowhere else, so hiding it took the filters, the timeframe and the page's buttons with it. A session's preview iframe opens exactly that way. The band now renders for an embed too, without its breadcrumb, so the page keeps its controls and the embed still gains no way to navigate the host's workspace. The flow editor's autosave indicator moves into the header's actions with the rest of its bar: saving state, the autosave toggle and other people's drafts were left behind in the branch the full-page editor no longer takes. Co-Authored-By: Claude Opus 5 (1M context) --- .../src/lib/components/FlowBuilder.svelte | 210 ++++++++++-------- .../src/lib/components/PageHeaderBar.svelte | 26 ++- .../src/routes/(root)/(logged)/+layout.svelte | 7 +- 3 files changed, 133 insertions(+), 110 deletions(-) diff --git a/frontend/src/lib/components/FlowBuilder.svelte b/frontend/src/lib/components/FlowBuilder.svelte index 8c34de9503..74ed6a22d0 100644 --- a/frontend/src/lib/components/FlowBuilder.svelte +++ b/frontend/src/lib/components/FlowBuilder.svelte @@ -1561,115 +1561,129 @@ contexts={headerContexts} /> {:else} - -
-
- {#if customUi?.topBar?.path != false} -
- onNavigate?.(item)} + +
+
+ {#if customUi?.topBar?.path != false} +
+ onNavigate?.(item)} + /> +
+ {/if} + {#if opWorkspace && indicatorPath !== undefined} + -
- {/if} - {#if opWorkspace && indicatorPath !== undefined} - - {/if} -
-
- {#if $enterpriseLicense && !newFlow && !inSessionPane} - - {/if} - - {#if diffEnabled && !diffInMenu} - -
- -
- {/if} - {#if !compactTopbar} - {@render previewButtons()} - {/if} +
+ +
+ {/if} + {#if !compactTopbar} + {@render previewButtons()} + {/if} - await handleSaveFlow(detail)} - {loading} - {loadingSave} - unifiedSize={headerBtnSize} - {dropdownItems} - /> + await handleSaveFlow(detail)} + {loading} + {loadingSave} + unifiedSize={headerBtnSize} + {dropdownItems} + /> +
-
{/if} {#snippet flowHeaderActions()} - - {#if $enterpriseLicense && !newFlow && !inSessionPane} - - {/if} - - {#if diffEnabled && !diffInMenu} - + {#if opWorkspace && indicatorPath !== undefined} + + {/if} + {#if $enterpriseLicense && !newFlow && !inSessionPane} + + {/if} + + {#if diffEnabled && !diffInMenu} + -
- -
- {/if} - {#if !compactTopbar} - {@render previewButtons()} - {/if} +
+ +
+ {/if} + {#if !compactTopbar} + {@render previewButtons()} + {/if} - await handleSaveFlow(detail)} - {loading} - {loadingSave} - unifiedSize={headerBtnSize} - {dropdownItems} - /> + await handleSaveFlow(detail)} + {loading} + {loadingSave} + unifiedSize={headerBtnSize} + {dropdownItems} + /> {/snippet} @@ -45,15 +47,19 @@ The row's height matches the sidebar's own header row, so the two read as one ba -
- -
+ way rather than pushing them off the bar once there is nothing left to take. + An embed (`navHidden`) gets the page's controls without the trail that would offer to + navigate the host's workspace. --> + {#if !navHidden} +
+ +
+ {/if} {#if item && (item.summaryContent || item.summary)} + {#if !devOnly && pageHeader.content?.barPlacement !== 'inline' && (!menuHidden || pageHeader.actions.length > 0)} {@const rightInset = pageHeader.content?.barRightInset} {@const leftInset = useDrawer ? 0 : railWidth}