Restore the five layouts' visual and behavioral fidelity to VueForge's fd793696 - #22
Merged
Merged
Conversation
…fd79369 You said the components now roughly match fd79369, but the layouts still didn't. Checked directly rather than by feel: at that exact commit, packages/layouts held VfAdminLayout, VfAppShell, VfDocumentLayout, VfAdminShell, and VfSetupLayout -- the direct ancestors of today's five, sharing the same style-entry file names. Diffed the CSS line by line: admin-layout 260 lines there versus 140 here, app-shell 362 vs 83, admin-shell 162 vs 63, document-layout 286 vs 69, setup-layout 293 vs 54. Not typos -- a deliberate simplification during the multiplatform rewrite that never got its sophistication back. Restored what was actually lost, adapted to the architecture that rewrite correctly introduced (state as data-cm-* attributes the Razor adapter and a shared runtime controller both read, not Vue-only classes and scoped-slot-exposed functions) rather than reverting to VueForge's own, framework-only implementation: - Admin layout: sidebar and header are fixed to the viewport again, not laid out in a static grid. A collapsed sidebar opens on hover or keyboard focus without leaving the collapsed state -- restored as plain :is(:hover, :has(:focus-visible)) CSS, since that was already how VueForge's version did it too; no JS ever drove it. Responsiveness is a real @container query against the layout's own inline size (matching VueForge's --vf-bp-lg-down, which resolves to exactly 1024px, same as this design system's own --cm-breakpoint-lg) rather than the viewport, so an admin layout embedded in a narrower pane degrades the same way a narrow window would. - App shell: sidebar and aside are sticky with their own capped height and scrollbar again, so content taller than the viewport no longer pushes past the bottom edge. The aside now collapses before the sidebar does on a narrowing window (two breakpoints, not one), matching the original. - Admin shell: the workspace is an elevated card inset within the shell again -- rounded top corners, its own border, margin on three sides -- rather than flush with the sidebar. The topbar is sticky and deliberately dark in both themes, via the same background-inverse/text-inverse token pair tooltip.css and badge.css already use for exactly this contrast. - Document layout: sidebar and aside are sticky with a capped, scrollable height again, the page gets a two-sided border once there's room to see it, and the aside now has its own breakpoint before the sidebar does. - Setup layout: given an aside, it now sits beside the form once there's room, divided by one border, instead of always stacking above it -- the wizard-with-illustration layout VueForge had, reimplemented with CSS grid rather than reverting to VueForge's own combinatorial one (this version only handles the header+main+aside split, not every brand/toolbar/aside permutation the original enumerated, which is a real, deliberate scope cut, not an oversight). Found and fixed a real bug in the showcase itself while making all this checkable: the demo frame had no explicit width, so at its narrow default it always tripped every layout's own narrow-window behavior, and its border-radius/overflow:hidden gave position: fixed nothing to be relative to -- those elements escaped the frame and pinned themselves to the real browser window. Added `contain: layout paint` to establish the frame as their containing block, and widened the showcase column enough (76rem) to clear every restored breakpoint, so the demos show their intended desktop form by default and only degrade to the mobile one when actually narrow -- correctly, not by accident. Verified every claim live over the Chrome DevTools protocol against the running dev server, not by reading the CSS and assuming: measured the escaped-fixed-position bug's exact pixel offset before the frame fix and confirmed containment after; drove the admin layout's collapse toggle and confirmed 288px -> 76px; dispatched a real mouse-move onto the collapsed sidebar and confirmed hover-expand to 288px while data-cm-sidebar-collapsed stayed "true"; emulated a 390px viewport and confirmed the mobile drawer's off-canvas start state, its post-toggle data-cm-mobile-sidebar-open and backdrop opacity, and its screenshot; screenshotted every layout in both themes, including the admin shell topbar contrast, which was wrong (near-black text on a near-black bar) before the background-inverse/text-inverse fix and correct after, in both themes. npm run verify passes in full.
KolesnikovKirill
deleted the
fix/restore-layout-fidelity-from-vueforge
branch
September 5, 2026 08:55
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.
What and why
You said components now roughly match VueForge's
fd793696commit, but the layouts still didn't.Checked directly rather than by feel: at that exact commit,
packages/layoutsheldVfAdminLayout,VfAppShell,VfDocumentLayout,VfAdminShell, andVfSetupLayout— the direct ancestors of today's five, sharing the same style-entry file names. Diffed the CSS line by line:Not typos — a deliberate simplification during the multiplatform rewrite that never got its sophistication back.
What changed
Restored what was actually lost, adapted to the architecture that rewrite correctly introduced (state as
data-cm-*attributes the Razor adapter and a shared runtime controller both read, not Vue-only classes and scoped-slot-exposed functions) rather than reverting to VueForge's own, framework-only implementation::is(:hover, :has(:focus-visible))CSS, since that was already how VueForge's version did it too; no JS ever drove it. Responsiveness is a real@containerquery against the layout's own inline size (matching VueForge's--vf-bp-lg-down, which resolves to exactly 1024px — same as this design system's own--cm-breakpoint-lg) rather than the viewport, so an admin layout embedded in a narrower pane degrades the same way a narrow window would.background-inverse/text-inversetoken pairtooltip.cssandbadge.cssalready use for exactly this contrast.A real bug found while making this checkable
The showcase's own demo frame had no explicit width, so at its narrow default it always tripped every layout's own narrow-window behavior, and its
border-radius/overflow: hiddengaveposition: fixednothing to be relative to — those elements escaped the frame and pinned themselves to the real browser window instead. Addedcontain: layout paintto establish the frame as their containing block, and widened the showcase column enough (76rem) to clear every restored breakpoint, so the demos show their intended desktop form by default and only degrade to the mobile one when actually narrow — correctly, not by accident.Verified against the real thing
Drove the live dev server over the Chrome DevTools protocol, not by reading the CSS and assuming: measured the escaped-fixed-position bug's exact pixel offset before the frame fix and confirmed containment after; drove the admin layout's collapse toggle and confirmed
288px → 76px; dispatched a real mouse-move onto the collapsed sidebar and confirmed hover-expand back to288pxwhiledata-cm-sidebar-collapsedstayed"true"; emulated a 390px viewport and confirmed the mobile drawer's off-canvas start state, its post-toggledata-cm-mobile-sidebar-openand backdrop opacity, and its screenshot; screenshotted every layout in both themes, including the admin shell topbar contrast, which was wrong (near-black text on a near-black bar) before thebackground-inverse/text-inversefix and correct after, in both themes.Checks
npm run verifypasses in full.