Repository navigation
fix(app-shell): draw the app no-access screen with the shared DataEmptyState - #26166
Merged
Merged
Conversation
…tyState AppNoAccessEmptyState composed the bare Empty primitive around a hand-copy of DataEmptyState's icon square, so the screen carried no role. It now is DataEmptyState (role="status"); text, Open Setup link, test ids and data-reason (now on the status node) are unchanged. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdXMkfnYedDKghz7QLUkx8
Contributor
Author
席位核对 · ACCEPT · seat
|
This was referenced Oct 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Steve · project thread
Part of #25915
Clause-②: no (one block swaps its own markup for the shared components; no exported type change. If a shared component needs a new prop, the thread reports first and the seat amends this line)
Metadata-protocol: none
What
Slice 2 of #25915 (slice 1 was #26135).
ui/packages/app-shell/src/console/AppNoAccessEmptyState.tsx, the screen an app's root shows when the app serves the caller no navigation or names only objects the caller may not read, now rendersDataEmptyStateinstead of the bareEmptyprimitive. It is announced asrole="status".Unchanged: every i18n key and default value, the
app-no-access-empty-statewrapper, theapp-no-access-open-setuplink (now theaction), anddata-reason, which moves from the description paragraph to the status node.DataEmptyStatespreads extra props onto its root, so no prop was added to the shared component. The title takes the shared component's smaller size, which is the visual diff.Why this block (measured on main 601c773)
Of the remaining app-shell blocks, this one hand-copied
DataEmptyState's icon square class string verbatim (flex size-10 items-center justify-center rounded-lg bg-muted) around theEmptyprimitive, and carried no role. Its only importer isAppContent.tsx(two call sites, not edited);appServesNoNavigation.tsnames it in a comment only.AppContent.tsxalready importsDataEmptyStatethroughPreviewDraftEmptyStatesince #26135, so the eager graph gains no module.Not chosen for this slice:
agentEmptyStatereturns title/description data, not a block;StudioEmptyState's sentence is a ReactNode whereDataEmptyState.descriptionis a string (would need a prop);PreviewEmptyStatehas a warn tone with no shared equivalent;InspectorEmptyStatehas 7 importers.No
claude/*branch on origin carries a different version of the file (depth-1 blob compare of 723 heads, 73 carry it, 0 differ). app-shell is outside the sdui registry closure, soscripts/sdui-manifest.record.jsonis not in the diff.Tests
New
ui/packages/app-shell/src/console/__tests__/AppNoAccessEmptyState.sharedState-25915.test.tsx: the screen is arole="status"node withdata-slot="data-empty-state"inside the test-id wrapper;data-reasonis on that node for both reasons; Open Setup is the action and links to the setup path.AppContent.emptyNavigationLanding-12079andAppContent.noReadableObjectLanding-25338(which readsdata-reasonthrough the wrapper):Test Files 3 passed (3),Tests 16 passed (16).Tests 4 failed (4); restored withgit checkout HEAD --,git diff HEADempty and blob hash equal to HEAD.pnpm --filter @object-ui/app-shell type-checkafter building@object-ui/app-shell^...: bothtsc --noEmitandtsc -p tsconfig.test.json, exit 0.Acceptance notes
InspectorEmptyState,StudioEmptyState,PreviewEmptyStateandagentEmptyStatestay for later slices; components, app-shell: 17 EmptyState implementations, 23 Skeletons and 5 error-boundary classes; the shared DataErrorState has one importer and ViewSkeleton none — make the shared vocabulary the only one #25915 remains open.Generated by Claude Code
🤖 Generated with Claude Code
https://claude.ai/code/session_01FdXMkfnYedDKghz7QLUkx8