feat: SW-2118 Evolve Data App Shell into composable AppShell container#183
Open
owilliams-tetrascience wants to merge 17 commits into
Open
feat: SW-2118 Evolve Data App Shell into composable AppShell container#183owilliams-tetrascience wants to merge 17 commits into
owilliams-tetrascience wants to merge 17 commits into
Conversation
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 17, 2026 17:49 — with
GitHub Actions
Inactive
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
There was a problem hiding this comment.
Pull request overview
Evolves DataAppShell into a more composable “zone-based” AppShell container with a shared collapse model and context, enabling vertical/horizontal navigation variants and additional layout slots while keeping the shell domain-agnostic.
Changes:
- Introduces
ShellContext(+ hooks) to publish shell layout state (navVariant,collapsed, etc.) to zone children. - Refactors
DataAppShellinto a CSS-grid “zones” layout, adds responsive auto-collapse, and unifies collapse behavior across zones (optionally viahideNavOnCollapse). - Reworks
SecondaryNav, stories, and adds unit tests to cover new collapse/zone behaviors.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/components/composed/DataAppShell/ShellContext.tsx | Adds context + hooks for publishing shell layout state to children. |
| src/components/composed/DataAppShell/SecondaryNav.tsx | Updates secondary nav to optionally follow shell collapse; adds collapsed horizontal dropdown mode; uses shared collapse button. |
| src/components/composed/DataAppShell/index.ts | Exposes new context hooks/types and shared collapse button from the module entrypoint. |
| src/components/composed/DataAppShell/DataAppShell.tsx | Converts layout to grid “zones”, adds single collapse model + auto-collapse, primary sidebar behavior, and provider wiring. |
| src/components/composed/DataAppShell/DataAppShell.stories.tsx | Reworks stories around a single configurable demo composition; updates play tests for new behaviors. |
| src/components/composed/DataAppShell/CollapseButton.tsx | Introduces shared collapse/expand affordance component. |
| src/components/composed/DataAppShell/tests/DataAppShell.test.tsx | Adds unit coverage for auto-collapse, zone visibility, horizontal nav, and context behavior. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 17, 2026 19:22 — with
GitHub Actions
Inactive
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 17, 2026 19:42 — with
GitHub Actions
Inactive
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 17, 2026 19:44 — with
GitHub Actions
Inactive
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 17, 2026 19:47 — with
GitHub Actions
Inactive
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 21, 2026 15:08 — with
GitHub Actions
Inactive
Ties the Data App Shell Iteration together (PR-6). The shell is now a
CSS-grid zone container driven by navVariant (vertical | horizontal,
default vertical) plus which slots are present — pass false to hide a
zone (showNavRail / showTopBar), and new secondaryBar + rightPanel zones.
It knows zones, never domain concepts.
- ShellContext (new) publishes {navVariant, collapsed, setCollapsed,
hideNavOnCollapse}; useDataAppShell / useOptionalDataAppShell exported.
- One collapse toggle (controlled/uncontrolled). The primary sidebar now
expands by default with the collapse chevron in the brand row and
collapses to an icon rail with the expand chevron under the logo —
matching the SW-2118 playground/movie. ShellCollapseButton (new) is the
shared affordance so every zone's trigger looks identical.
- hideNavOnCollapse collapses nav + secondary together into a single icon
rail (secondary carries the expand chevron; a floating expand button
appears when there is no secondary).
- Responsive: auto-collapse below a breakpoint via the autoCollapse media
query (leaves restore the expanded state unless the user collapsed
manually).
- SecondaryNav: follows the shell collapse when hideNavOnCollapse, owns
its collapse otherwise; horizontal orientation is now collapsible —
collapsed it renders a compact step dropdown for the top bar (like the
playground's collapsed wizard).
- Stories reworked to the agreed variant order: Default (sidebar only),
Secondary Nav · Sidebar, Workflow · Vertical, Workflow · Horizontal,
With Right Panel, Customizable (controls-driven), plus a hidden overlay
test story. Play tests cover collapse, zone hiding, the step dropdown,
and the right panel; unit tests cover responsive auto-collapse,
ShellContext, and zone switches.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…lapse toggle - The secondary (side) zone now starts below the top bar in the vertical grid, so breadcrumbs span the full width beside the primary nav — matching the playground layout. - When a secondary nav is present, the collapse chevron renders only there; the primary sidebar's brand-row chevron is suppressed so there is exactly one collapse affordance. - The collapsed horizontal workflow stays in its own bar below the breadcrumbs, folding its items into the compact step dropdown in place (no longer moved into the top bar by the story). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Follow-up to the review suggestion: use the design-system cn() helper so consumer classes properly override the base via tailwind-merge instead of plain string concatenation. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The Data App Shell section now lists only Docs + the agreed variants (Default, Secondary Nav · Sidebar, Workflow · Vertical, Workflow · Horizontal, With Right Panel, Customizable). The auxiliary regression stories (breadcrumbs, help button, mobile nav, TDP links, nav groups, etc.) are tagged !dev — hidden from the sidebar but still executed by the test runner, so their play coverage is unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Reverts the expanded/collapsible primary sidebar introduced earlier in this PR — the primary nav is the compact 48px icon rail again, as in the existing production shell. The shell-level collapsed state still drives the secondary zone (one toggle via ShellContext) and, with hideNavOnCollapse, hides the rail for the single-rail focus mode. The now-purposeless collapsible prop is removed; ShellCollapseButton remains for the secondary nav triggers. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
owilliams-tetrascience
force-pushed
the
claude/cool-blackwell-4bebee
branch
from
July 21, 2026 17:36
776619a to
adae8c6
Compare
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 21, 2026 17:36 — with
GitHub Actions
Inactive
…p help button
Collapse behavior now matches the playground preset for every sidebar
variant:
- Secondary Nav · Sidebar uses the 'hide primary rail' collapse mode
(hideNavOnCollapse) — collapsing the menu sidebar leaves one icon rail,
same as Workflow · Vertical.
- Workflow · Horizontal collapse removes the stepper bar entirely and
tucks the step dropdown into the top bar beside the breadcrumbs
('shrink' mode — the primary rail stays put).
Also removes the shell's built-in help button (onHelpClick prop, TopNav
rendering, and the Help Button story) — top-bar actions are fully owned
by the headerActions slot now.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 23, 2026 15:35 — with
GitHub Actions
Inactive
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 23, 2026 15:39 — with
GitHub Actions
Inactive
Adds a headerLeft slot to the shell's top bar (rendered in the left group after the breadcrumb trail) and moves the collapsed horizontal workflow's step dropdown there — top-left next to the breadcrumbs, matching the playground, instead of the centered header slot. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 23, 2026 16:50 — with
GitHub Actions
Inactive
DataAppShellPrimaryNav's expanded sidebar item combined w-full with mx-1: since w-full sets an explicit 100% width (unlike flex's auto-stretch, which subtracts margins), each row ended up 8px wider than its scroll container and had its right edge clipped — visible as the active row's rounded highlight looking cut off before reaching the sidebar's edge. Moves the 4px inset from the row's margin to padding on the shared items container instead, so every row's own width now already accounts for it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 23, 2026 17:02 — with
GitHub Actions
Inactive
… is tight TopNavBreadcrumb inherited Breadcrumb's default flex-wrap. With the mobile hamburger and/or a headerLeft node (e.g. the collapsed horizontal workflow's step dropdown) sharing the top bar's flex-1 left group, there wasn't always room for the full trail on one line, so it wrapped — pushing the dropdown/Next button around and overlapping content instead of the trail simply truncating. The trail now stays on one line and only the current (last) crumb truncates; earlier crumbs and separators keep their natural width so the trail still reads left-to-right. The mobile trigger and headerLeft slot are marked shrink-0 so only the breadcrumb gives up width under pressure. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 23, 2026 17:07 — with
GitHub Actions
Inactive
The Default story now shows the collapsible primary sidebar from the
playground pictures: expanded it is a 220px sidebar with the app name,
labelled nav and a collapse chevron in the brand row; the chevron
collapses it to a 48px icon rail with an expand chevron under the logo.
Adds an opt-in primaryNav prop ('rail' | 'sidebar', default 'rail') so
the other variants keep the permanent icon rail restored earlier; only
Default opts into 'sidebar'. A collapsible sidebar renders its own
collapsed rail, so it is never removed by hideNavOnCollapse. ShellDemo
gets a matching 'primary' prop and the Default play test exercises the
collapse/expand cycle.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 23, 2026 17:20 — with
GitHub Actions
Inactive
…th copyable snippets
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 23, 2026 17:44 — with
GitHub Actions
Inactive
…vigation - Renames the Workflow variants to Secondary Navigation and Secondary Navigation - Horizontal (the workflow stepper is the secondary-nav demo). - Drops the separate menu-style Secondary Nav · Sidebar story in favor of those, and deletes every previously hidden (!dev) regression story so the file holds only the 4 documented variants. - Each story keeps a copyable <DataAppShell> composition snippet in its Docs 'Show code' block. - Moves the overlay right-panel coverage lost with the deleted story into a RightPanel unit test (overlay renders via Sheet, closed shows only the FAB, header close fires onOpenChange) — keeps every changed file >=95% lines. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
owilliams-tetrascience
temporarily deployed
to
artifactory-prod
July 23, 2026 19:45 — with
GitHub Actions
Inactive
GracePan-Tetra
approved these changes
Jul 23, 2026
Deleting the hidden regression stories dropped a few already-merged lines below the branch-level baseline (breadcrumb link/plain variants, the back-to-platform TDP link, and the sidebar group-section label), tipping the overall-coverage gate. Move that coverage into unit tests: - DataAppShell: breadcrumb link/plain/page branches; AppHeaderMenu back-to-platform as a TDP link (with path) and as an onBackToPlatform button. - PrimaryNav: sidebar-variant group section labels. DataAppShell.tsx and PrimaryNav.tsx are back to 100% lines; overall 96.83% (> the 96.81% base). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
owilliams-tetrascience
deployed
to
artifactory-prod
July 23, 2026 20:17 — with
GitHub Actions
Active
Coverage Report
File Coverage
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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.
TL;DR
Final PR of the Data App Shell Iteration (SW-2118, PR-6). It turns the Data App Shell into a composable, zone-based container: you pass slots, and the shell arranges the zones, owns a single collapse model, and adapts responsively. Ships 4 documented Storybook variants, each with copy-paste-ready code. Layout and collapse behavior match the design playground + movie attached to the ticket.
What changed
vertical(icon rail or collapsible sidebar) orhorizontal(top nav row).New / changed props
navVariantvertical(default) orhorizontalprimaryNavrail(default — permanent icon rail) orsidebar(collapsible, labelled)sidebarPanel/secondaryBar/rightPanelshowNavRail/showTopBarfalse)collapsed/defaultCollapsed/onCollapsedChangehideNavOnCollapseautoCollapse(max-width: 1023px);falseto disable)headerLeft/headerCenter/headerActionsAlso new:
ShellContext(useDataAppShell/useOptionalDataAppShell) so zones read shell state, and a sharedShellCollapseButtonso every collapse trigger looks identical.Removed:
onHelpClick.Stories (4)
hideNavOnCollapse)Each story's Storybook "Show code" block carries a ready-to-copy
<DataAppShell>composition. Legacy/regression stories were removed from the sidebar; their coverage moved into unit tests.Back-compat
sidebarPanel,rightPanel,showNavRail, and the top-bar slots are unchanged. The primary nav still defaults to the icon rail — opt into the collapsible sidebar withprimaryNav="sidebar". The only removal isonHelpClick.Type of Change
Checklist
yarn lintpassesyarn buildpassesyarn test:allpasses (1,583 tests)Testing
hideNavOnCollapse, the horizontal stepper ⇄ step-dropdown swap and step selection, and the docked right panel (resize, width persistence, focus, Esc).navVariant="horizontal",ShellContextpublication + hook errors, and the right-panel overlay variant.Verification
Screenshots
Verified against the SW-2118 playground HTML and
AppShell_Updates.movin light + dark mode: Default (expanded sidebar ↔ collapsed rail), Secondary Navigation (single-rail merge), Secondary Navigation - Horizontal (stepper bar ↔ step dropdown by the breadcrumbs), and With Right Panel (docked, resizable).🤖 Generated with Claude Code