ui: the platform shells take the Harmonia 3 reference layout the generated shell has (#7428) - #7432
Merged
Merged
Conversation
…rated shell has (#7428) #7400 moved the generated application shell to the Harmonia 3 reference layout and, in embedded mode, made it drop its own gutter and card chrome on purpose: the host owns the frame. The host never drew it. The platform shells still carried the 1.x structure - an x-h-split with a permanently locked, gutterless sidebar panel, --sidebar-width: 100% to fill it, a plain transparent toolbar and the hosted iframe in a bare flex div - so the same form looked like the old stack inside the application shell and like the reference in its own. The six sidebar shells (application, personal, partner, admin, monitoring, database) now share the generated shell's structure: a bg-sidebar body, the ONE sidebar element in a plain shrink-0 flex slot as a direct peer, moved into the x-h-sheet drawer below 1024px; the content column min-w-0 flex-1 with a p-2 gutter around a rounded-xl border shadow-sm <main> card, both dropped when narrow through a :class binding; the brand row as x-h-sidebar-header-item (the projection product-switcher stays as it was); the sidebar content as the <nav> landmark x-h-sidebar carries no role for; the logged-in user as the initials x-h-avatar with x-h-menu-label in place of the presentational li + tile; and a route-loading x-h-progress bar. The hosted iframe sits INSIDE the card, so an embedded app inherits the frame it deliberately does not draw. Each shell's js/appShell.js is renamed after the layout that is gone: hiddenPanels.left -> isSmallScreen, isOpen -> showSidebarSheet, $refs.sidebarPanel/overlay -> sidebarSlot/sidebarSheet; routeLoading comes off pinecone:start / :end / :fetch-error; the refreshIcons no-op goes with its call sites. These files are per-shell copies loaded only by their own page, so unlike the shared runtime (#7427) they carry no cross-vintage contract and need no aliases. The builder shell is deliberately untouched: it has no sidebar, and its x-h-split is the resizable chat/canvas pane - the one use Split is for. Verified: HarmoniaContractIT (every directive and utility class of the six pages against the pinned 3.1.2 webjar), PerspectiveGroupAggregationIT, ShellSwitcherIT (user-menu-trigger on the avatar), MonitoringShellIT and DatabaseShellIT green headless; mvn formatter:validate with the cache wiped. Not verified in a browser at 1440px / 900px. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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.
Cause
#7400 moved the generated application shell to the Harmonia 3 reference layout and made it drop its own gutter and card chrome in embedded mode on purpose: the host owns the frame. The host never drew it. The platform shells still carried the 1.x structure - an
x-h-splitwith a permanently locked, gutterless sidebar panel,--sidebar-width: 100%to fill it, a plain toolbar, the hosted iframe in a bare flex div - so the same form looked like the old stack inside the application shell and like the reference in its own.Change
The six sidebar shells (application, personal, partner, admin, monitoring, database) now share the generated shell's structure:
bg-sidebarbody; the ONE sidebar element in a plainshrink-0flex slot as a direct peer, moved into thex-h-sheetdrawer below 1024px;x-h-sidebar/ header / footerdata-borderless.min-w-0 flex-1 overflow-hiddenwith ap-2gutter around arounded-xl border shadow-sm<main>card, both dropped when narrow through a:classbinding. The hosted iframe sits inside the card, so an embedded app inherits the frame it deliberately does not draw.x-h-sidebar-header-item(the projection product-switcher stays), the sidebar content as the<nav>landmark, the logged-in user as the initialsx-h-avatarwithx-h-menu-labelin place of the presentationalli+ tile (id="user-menu-trigger"kept), a route-loadingx-h-progressbar.js/appShell.js:hiddenPanels.left->isSmallScreen,isOpen->showSidebarSheet,$refs.sidebarPanel/overlay->sidebarSlot/sidebarSheet,routeLoadingoffpinecone:start/:end/:fetch-error, therefreshIconsno-op removed with its call sites. These are per-shell copies loaded only by their own page, so unlike the shared runtime (ui: the shared shell runtime dropped the names every already-generated app shell binds - embedded apps show their own sidebar (#7400) #7427) they carry no cross-vintage contract.The builder shell is deliberately untouched: it has no sidebar, and its
x-h-splitis the resizable chat/canvas pane - the one use Split is for. Every stable id the ITs pin (monitoring-*,user-menu-trigger,#app, the iframe) is unchanged.Verification
HarmoniaContractITgreen: everyx-h-*directive and utility class of the six pages checked against the pinned 3.1.2 webjar.PerspectiveGroupAggregationIT,ShellSwitcherIT,MonitoringShellIT,DatabaseShellITgreen headless (the first run had two Chrome session/renderer errors while a second IT run drove Chrome on the same machine; both classes passed in full on rerun).mvn -T 1C formatter:validatewith the cache wiped.Fixes #7428
🤖 Generated with Claude Code