Skip to content

feat(settings): unify all settings pages under a shared SettingsPanel layout#5219

Merged
waleedlatif1 merged 8 commits into
stagingfrom
worktree-settings-page-scaffold
Jun 26, 2026
Merged

feat(settings): unify all settings pages under a shared SettingsPanel layout#5219
waleedlatif1 merged 8 commits into
stagingfrom
worktree-settings-page-scaffold

Conversation

@waleedlatif1

Copy link
Copy Markdown
Collaborator

Summary

  • Add a shared SettingsPanel layout primitive that owns the settings page chrome (fixed header bar with right-aligned actions, scroll region, centered max-w-[48rem] column) and renders a consistent title + description pulled from navigation metadata — so the title is required-by-default with zero per-page wiring
  • Bake the repeated per-page search input into the layout via a search prop (with optional anti-autofill hardening for the secrets page), plus a scrollContainerRef passthrough
  • Add a description to every nav item + a getSettingsSectionMeta helper (single source of truth), and a SettingsSectionProvider in the settings shell
  • Migrate every settings page — account, subscription, tools, system, enterprise, and superuser — onto SettingsPanel, removing the hand-rolled shells and <h1> title blocks
  • Drill-down detail sub-views (MCP server, workflow MCP server, credential set, permission group) intentionally keep their own back-button chrome
  • Normalize all nav descriptions to a consistent voice and length (~40–53 chars, verb-first)

Type of Change

  • Improvement

Testing

Tested manually. tsc clean, biome clean across all 26 files, 71 unit tests pass (access-control + sub-block logic untouched), check:api-validation passes. Three independent diff-review passes confirmed no business-logic/handler/prop changes — purely structural.

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel

vercel Bot commented Jun 26, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs Ready Ready Preview, Comment Jun 26, 2026 1:27am

Request Review

@cursor

cursor Bot commented Jun 26, 2026

Copy link
Copy Markdown

PR Summary

Low Risk
Broad but mostly presentational refactors; behavior should be unchanged aside from consistent layout and copy from nav metadata.

Overview
Unifies workspace settings UI by replacing per-page shells (header, scroll, title blocks, search) with SettingsPanel, and wrapping the settings shell in SettingsSectionProvider so titles and descriptions come from navigation.ts instead of local <h1> blocks.

List-style pages (API keys, billing, admin, copilot, credential sets, custom tools, general, inbox, MCP, mothership, recently deleted, BYOK, etc.) now pass header chips through actions, standalone search through search, and use SettingsEmptyState for empty/no-results states. Row ... menus are consolidated into RowActionsMenu on API keys, credential sets, custom tools, and MCP.

Adds .claude/rules/sim-settings-pages.md and the add-settings-page skill for future pages and audits. Detail drill-downs and entitlement gates stay on custom chrome. ThriveIcon in docs is corrected to a square mark-only SVG.

Reviewed by Cursor Bugbot for commit 4e3de3d. Configure here.

@greptile-apps

greptile-apps Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR unifies the settings pages under shared layout primitives. The main changes are:

  • Adds SettingsPanel for shared settings page chrome.
  • Adds nav-driven titles and descriptions for settings sections.
  • Moves repeated settings search fields into the shared panel.
  • Adds shared row action and empty-state components.
  • Migrates account, system, enterprise, superuser, and tools settings pages to the new layout.

Confidence Score: 5/5

This looks safe to merge.

  • No blocking issues found in the changed code.

Important Files Changed

Filename Overview
apps/sim/app/workspace/[workspaceId]/settings/components/settings-panel/settings-panel.tsx Adds the shared settings layout, nav metadata lookup, action slot, search field, and scroll ref forwarding.
apps/sim/app/workspace/[workspaceId]/settings/[section]/settings.tsx Wraps settings content with the active settings section provider.
apps/sim/app/workspace/[workspaceId]/settings/navigation.ts Adds settings section descriptions and a helper for title and description metadata.
apps/sim/app/workspace/[workspaceId]/settings/components/row-actions-menu/row-actions-menu.tsx Adds a shared trailing actions menu for settings list rows.

Reviews (4): Last reviewed commit: "feat(icons): Thrive icon-only black mark..." | Re-trigger Greptile

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

@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.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit a1059d0. Configure here.

Introduce a SettingsPanel scaffold that owns the standard settings chrome
(fixed header bar with right-aligned actions, scroll region, centered content
column) and renders a consistent page title + description pulled from the
active section's navigation metadata. Adds a description to every nav item and
a SettingsSectionProvider in the shell so the title is required-by-default
without per-page wiring.

Migrate the account/subscription pages (general, secrets, teammates,
team-management, billing) to SettingsPanel, removing their hand-rolled shells
and title blocks.
… search

Extend SettingsPanel with a `search` prop (canonical search field with
optional anti-autofill hardening) so the repeated per-page search input is
owned by the layout. Migrate every settings page — account, subscription,
tools, system, enterprise, and superuser — onto SettingsPanel so each renders
a consistent nav-driven title + description, header actions, and search with
zero hand-rolled shell. Drill-down detail sub-views (MCP server, workflow MCP
server, credential set, permission group) keep their own back-button chrome.

Normalize all nav descriptions to a consistent voice and length.
…ettingsPanel

Remove the preventAutofill prop from SettingsPanel — the shared search field
no longer needs the read-only-until-focus hack, so secrets uses the plain
search like every other page. Pre-existing honeypot inputs are untouched.

Add .claude/rules/sim-settings-pages.md (auto-scoped to settings pages) and a
settings-page skill documenting the SettingsPanel convention + add/audit
procedure.
…pe usages

Encapsulate two more repeated settings patterns into shared components:
- SettingsEmptyState — the muted empty/no-results/gate message (fill | inline),
  replacing ~42 hand-rolled status divs and normalizing stragglers that used
  text-small / text-tertiary back to the canonical text-muted + text-sm.
- RowActionsMenu — the trailing '...' row-actions dropdown, replacing ~11
  per-page DropdownMenu+MoreHorizontal blocks with a props-driven actions list.

Pure presentational refactor: every message, action, handler, disabled, and
destructive flag preserved (verified by diff review). Document both in
.claude/rules/sim-settings-pages.md.
Keeps browsers from offering saved-credential autofill in a filter box — the
lightweight standard guard, distinct from the removed read-only/preventAutofill
machinery. Matters most on the secrets page.
Remove JSX label comments, section/explanatory // comments, separator block
comments, and copilot's commented-out MCP scaffold across the migrated files,
per the repo's no-non-TSDoc-comments standard. TSDoc and functional directives
kept. Comment-only deletions — no code or behavior changed.
Aligns with the verb-prefixed naming of the other skills (add-integration, etc.).
Drop the wordmark from ThriveIcon (tighten viewBox to the logo bounds), set the
mark to pure black; the block bgColor is already white. Synced the docs icon copy.
@waleedlatif1 waleedlatif1 force-pushed the worktree-settings-page-scaffold branch from 8675b56 to 4e3de3d Compare June 26, 2026 01:22
@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

@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.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 4e3de3d. Configure here.

@waleedlatif1 waleedlatif1 merged commit a1d5870 into staging Jun 26, 2026
16 checks passed
@waleedlatif1 waleedlatif1 deleted the worktree-settings-page-scaffold branch June 26, 2026 01:30
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