Skip to content

editor: noPanel sidebar tabs for stage-driving rail entries - #641

Merged
wass08 merged 1 commit into
mainfrom
feat/sidebar-tab-no-panel
Aug 12, 2026
Merged

editor: noPanel sidebar tabs for stage-driving rail entries#641
wass08 merged 1 commit into
mainfrom
feat/sidebar-tab-no-panel

Conversation

@wass08

@wass08 wass08 commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

What does this PR do?

Adds an optional noPanel flag to SidebarTab (v2 layout): a rail entry that activates without opening the left panel column — the icon stays highlighted regardless of the panel's collapse state, clicking it never expands/collapses the panel, and the panel column hides while such a tab is active (its collapse state is preserved for the normal tabs). The mobile layout skips noPanel tabs entirely.

This backs host surfaces that swap the stage instead of showing a sidebar panel — first consumer is the hosted editor's studio item builder, whose rail entry drives a full-stage stageOverlay (listing ⇄ item editor) rather than a panel.

How to test

  1. In a host embedding <Editor layoutVersion="v2">, add a tab with noPanel: true to sidebarTabs (any component — it never renders).
  2. Click the entry: it highlights, no panel column opens, and the host can key a stageOverlay off activeSidebarPanel.
  3. Click a normal tab: the panel column returns with its previous width/collapse state.
  4. Re-click the noPanel entry while another tab's panel is open: panel hides, no collapse-state churn.
  5. Mobile viewport: the noPanel entry does not appear in the bottom tab bar.

End-to-end consumer: pascalorg/private-editor branch feat/studio-item-builder (studio > Item builder).

Screenshots / screen recording

N/A here — the visible behavior ships with the private-editor item-builder PR, which includes the full flow.

Checklist

  • I've tested this locally with bun dev
  • My code follows the existing code style (run bun check to verify)
  • I've updated relevant documentation (if applicable)
  • This PR targets the main branch

Note

Low Risk
Small, additive UI layout change scoped to v2 sidebar rail behavior. No auth, data, or persistence logic is modified.

Overview
Adds an optional noPanel flag on SidebarTab so v2 rail entries can activate a stage-driving mode instead of opening the left panel.

When such a tab is active, the panel column stays hidden (collapse/width state preserved), the rail icon remains highlighted even while collapsed, and clicks only switch activeSidebarPanel without expand/collapse. Mobile filters these tabs out of the bottom bar entirely.

Reviewed by Cursor Bugbot for commit 0f3857f. Bugbot is set up for automated code reviews on this repo. Configure here.

…ries

A noPanel tab highlights in the rail and activates without opening the
sidebar panel column, for host surfaces that swap the stage instead
(e.g. the hosted item builder). Mobile layout skips noPanel tabs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0f3857f. Configure here.

renderTabContent={renderTabContent}
sidebarOverlay={sidebarOverlay}
sidebarTabs={sidebarTabs}
sidebarTabs={sidebarTabs.filter((t) => !t.noPanel)}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mobile clears noPanel selection

Medium Severity

Filtering out noPanel tabs before EditorLayoutMobile makes a persisted activeSidebarPanel invalid, so the mobile validity effect rewrites it to the first remaining tab. Crossing the mobile breakpoint drops the host’s stage-driving selection, and renderTabContent can still mount that tab’s component for a frame before the reset.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 0f3857f. Configure here.

@wass08
wass08 merged commit 9ccf7e6 into main Aug 12, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant