Repository navigation
Normalize workbench empty states - #4534
wailingwombat wants to merge 1 commit into
Conversation
Co-authored-by: Cursor <cursoragent@cursor.com>
Soffi AI SummaryThis PR standardizes all empty state UI across the workbench feature into a single, cohesive pattern. Previously, each workbench screen implemented its own empty state using a mix of design-system primitives ( The fix introduces a new workbench-scoped component ( Beyond component unification, the copy was rewritten across all screens to follow a "title: description" format — stating what is empty and what the user should do next — making empty states consistently informative and actionable. Filtered and searched list views also now contextually adapt their message and offer a primary "Reset filters" button when applicable. ChangesUnified workbench empty states
Updated: 2026-10-15 21:32 UTC |
[Medium impact] Replaces empty state components across workbench UI. The PR appears safe to merge, with a non-blocking correction needed to the Files tab’s empty message. Findings
SummaryThis PR gives workbench screens shared empty-state components and more consistent copy.
Reviews (1) · Last reviewed commit: "Normalize workbench empty states" · Reviewed by Greptile |
| message="No files yet" | ||
| description="Outputs will show here when agents output artifacts." |
There was a problem hiding this comment.
The Files tab now says “No files yet” whenever selectedPath is missing, even if the sidebar lists files. Opening the tab without a path, or deleting the selected file while others remain, reaches this branch. Users get a false empty message instead of guidance to select a file.
Restore the “Select a file” message here; show “No files yet” only after checking that the file list is empty.
| message="No files yet" | |
| description="Outputs will show here when agents output artifacts." | |
| message="No file selected" | |
| description="Select a file from the list to view it." |




Every workbench screen had its own empty state: the design-system
EmptyState,EmptyStateCompact, aCard+EmptyStatepair, a custom usage placeholder, or loose text. This PR puts them all on one pattern, based on the Files tab design, and rewrites the copy so each one says what's empty and what to do next.New
components/workbenches/common/WorkbenchEmptyState.tsx(workbench-scoped for now, so the design-systemEmptyStateused across the rest of the app is unchanged)WorkbenchEmptyState: a centered card with abody1Boldtitle, abody2/text-lightdescription, and optional actions.variant="plain"drops the card border and fill. It's used inside existing cards, panels, and charts so cards don't sit inside cards.inset={false}drops the outer padding when the parent already pads its content.WorkbenchEmptyText: onetext-xlightline for narrow sidebars and list columns.Where it's used
Card+EmptyState.BoardEmptyList): the copy changes depending on whether a search, filters, or nothing at all emptied the list. Filtered lists get a primary "Reset filters" button. A newsidebarprop renders the light text in the 350px list column.WorkbenchEmptyText.Copy examples:
Not in this PR: the Jobs and Issues tables still use the design-system
Tableempty state, and the design-systemEmptyStateitself is unchanged. Once this pattern is signed off, it can be promoted there.Test Plan
yarn tsc --buildinjs/consolepasses with no errors.Test environment: https://console.plrldemo.onplural.sh/
Checklist
Plural Flow: console