+ page the controls beside it belong to.
+ The 0.3 only holds against a summary or an actions box that shrinks too: alone, a factor
+ sum below 1 makes flex hand out only that share of the overflow, and the bar overflows
+ instead. -->
+
@@ -161,7 +172,7 @@ The row's height matches the sidebar's own header row, so the two read as one ba
- {#if item && (item.summaryContent || item.summary)}
+ {#if item && hasSummary}
diff --git a/frontend/src/lib/components/pageHeaderRegistry.svelte.ts b/frontend/src/lib/components/pageHeaderRegistry.svelte.ts
index 3167d636e9..bd30855e15 100644
--- a/frontend/src/lib/components/pageHeaderRegistry.svelte.ts
+++ b/frontend/src/lib/components/pageHeaderRegistry.svelte.ts
@@ -24,6 +24,9 @@ export type PageHeaderItem = {
/** A page with no item of its own, such as a list: the breadcrumb is the section alone. */
export type PageHeaderSection = {
label: string
+ /** The page the section belongs to, when the section is one pane of it — a settings page's
+ * active tab. Drawn as a lead segment before `label`. */
+ parent?: string
/** Rendered in place of `label` when the name is itself a control, such as an editable title. */
content?: Snippet
/** Scopes the segment's picker, when the section maps to a kind of item. */
diff --git a/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte b/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte
index 022048bbf7..1eda558a4a 100644
--- a/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte
+++ b/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte
@@ -1457,6 +1457,12 @@
}
]
)
+
+ // The label of the entry the sidebar highlights, so the breadcrumb and the sidebar name the
+ // same pane: both read `tab`, which resolves the URL's aliases (`teams`, `deploy_to`, …).
+ const tabLabel = $derived(
+ navigationGroups.flatMap((g) => g.items).find((i) => i.id === tab)?.label
+ )
@@ -1464,7 +1470,11 @@
-
+