From b60c0f565e48eb7bcc5509ba35579acd53a1e521 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Thu, 12 Mar 2026 01:07:11 -0700 Subject: [PATCH] fix(shell): move subnav/tabbar inside
and unify pill styles Subnav and tabbar were rendered outside
, causing them to be hidden behind the fixed header. Move them inside
, add sticky positioning (top: 92px), and consolidate pill CSS into a shared .rapp-nav-pill class. Also refactors tabbar to use URL subpaths instead of ?tab= query params. Co-Authored-By: Claude Opus 4.6 --- server/shell.ts | 85 ++++++++++++++++++++----------------------------- 1 file changed, 35 insertions(+), 50 deletions(-) diff --git a/server/shell.ts b/server/shell.ts index c27d3b1..2a4e21c 100644 --- a/server/shell.ts +++ b/server/shell.ts @@ -63,8 +63,12 @@ export interface ShellOptions { enabledModules?: string[] | null; /** Whether this space has client-side encryption enabled */ spaceEncrypted?: boolean; - /** Optional tab bar rendered below the subnav. Uses ?tab= query params. */ + /** Optional tab bar rendered below the subnav. */ tabs?: Array<{ id: string; label: string; icon?: string }>; + /** Active tab ID (matched from URL path by server). First tab if omitted. */ + activeTab?: string; + /** Base path for tab links (default: /{space}/{moduleId}). Set to e.g. "/{space}/rnetwork/crm" for sub-pages. */ + tabBasePath?: string; } export function renderShell(opts: ShellOptions): string { @@ -169,8 +173,6 @@ export function renderShell(opts: ShellOptions): string { - ${renderModuleSubNav(moduleId, spaceSlug, visibleModules)} - ${opts.tabs ? renderTabBar(opts.tabs) : ''}