Uh oh!
There was an error while loading. Please reload this page.
feat(webkit): add a side prop so a trailing panel is Sidebar too - #901
Draft
gabriel-lisboa-azion wants to merge 7 commits into
Draft
feat(webkit): add a side prop so a trailing panel is Sidebar too#901gabriel-lisboa-azion wants to merge 7 commits into
gabriel-lisboa-azion wants to merge 7 commits into
Conversation
An explorer layout — a log with a detail panel, a database browser with a schema panel — puts a resizable, hideable panel on the right. The only thing that differs there is the direction of every horizontal decision: which edge the border and the handle sit on, which way a drag grows the panel, which way it leaves, and which way the collapse glyph points. `side: 'end'` mirrors all of them from a single sign. `useSidebarRail` derives a `direction()` of +1 or -1 and every place that reads a horizontal direction multiplies by it, so a trailing panel inherits the same clamping, the same phase-aware transition, the same `inert` collapsed state and the same testids instead of being re-implemented beside the leading one — which is exactly how the two would drift. Defaults to `start`, so every existing consumer is unaffected. Adds `data-side` on the root and a Trailing story that puts both edges on one page, since a mirror is only demonstrable against the thing it mirrors.
…story Adds the 6 snapshots for the new Trailing story across the mode matrix. Generated by the Storybook Regenerate Baseline workflow on this branch's HEAD — baselines are ubuntu-only, so a local run would not match the folder the visual gate compares against. No existing snapshot is modified or deleted: `side` defaults to `start`, so the other Sidebar stories render exactly as before.
This was referenced Aug 25, 2026
…he footer (#937) The rule above the sidebar footer was drawn by `SidebarFooter`, conditionally on the rail not being collapsible. Two things were wrong with that. It stopped at that component's box. The footer REGION spans the rail edge-to-edge, so a rule drawn inside `SidebarFooter` sat short of both edges and read as a border around the footer's content rather than as the rail's own division — and a rail whose footer is only the collapse control got no rule at all, because `SidebarFooter` was not rendered. And it made the separator a property of the slot's content instead of the layout, so whether the rail had a division depended on which component the consumer happened to put in it. The rule moves to `FOOTER_REGION_CLASS`, which is the region, unconditionally. The region takes full padding to sit under it (`p-` rather than `px-`/`pb-`), and `SidebarFooter` goes back to laying out its own content and nothing else. Stacked on #901 because both edit `sidebar.vue`, and because shipping the `sidebar-footer.vue` half alone would remove the separator entirely — nothing else draws it.
…y comments Drops the prose comments the side-prop work added across the sidebar: the edge map and arrow-key notes in `sidebar.vue`, the direction and leave-transform notes in `use-sidebar-rail.ts`, the footer-region note in `sidebar-footer.vue`, the mirror notes in the test, and the trailing-panel note in the story. The JSDoc stays: `side` on the prop table and on `UseSidebarRailOptions` document the public surface and feed the Storybook prop table and editor hover. Also reflows `FOOTER_REGION_CLASS` onto one line, which is what Prettier wants and what `webkit:format:check` was failing on.
* chore(webkit): centre the sidebar footer in a fixed band Give the rail's footer region the header bar's 56px height and make it do the centring itself, so a rail closed by a footer and a page closed by a bar share one horizontal. `items-center` only binds on a flex box, so the region becomes `flex`; on the block box it was, the property emitted and did nothing. The padding drops to horizontal only for the same reason the height is fixed: `p-(--spacing-md)` leaves a 24px content box inside a 56px band, which the collapse trigger alone (`IconButton size="small"`, 28px) overflows. * fix(webkit): fill the sidebar footer band so its controls sit at the trailing edge The band holding the footer slot and the collapse trigger was a shrink-to-fit flex item inside the region this branch turned into a flex box, so both packed against the rail's leading edge: the `flex-1` inside the slot had no space to distribute, and the no-slot `justify-end` was inert for the same reason. The band now fills the region (`min-w-0 flex-1`), and the slot wrapper takes `min-w-0 flex-1` whether or not the rail is collapsible. Drops the band's own `border-t` + `pt-(--spacing-md)` with it. The region owns the separator, so the band's border drew a second line inside the band; and the top padding pushed the 28px content off the 56px band's centre, which the fixed height already answers. Measured in the sample console at 1440px: on a 300px rail the account menu ends at 248 and the collapse trigger at 284 — flush with the region's 16px inset.
gabriel-lisboa-azion added a commit
that referenced
this pull request
Aug 31, 2026
…he footer (#937) The rule above the sidebar footer was drawn by `SidebarFooter`, conditionally on the rail not being collapsible. Two things were wrong with that. It stopped at that component's box. The footer REGION spans the rail edge-to-edge, so a rule drawn inside `SidebarFooter` sat short of both edges and read as a border around the footer's content rather than as the rail's own division — and a rail whose footer is only the collapse control got no rule at all, because `SidebarFooter` was not rendered. And it made the separator a property of the slot's content instead of the layout, so whether the rail had a division depended on which component the consumer happened to put in it. The rule moves to `FOOTER_REGION_CLASS`, which is the region, unconditionally. The region takes full padding to sit under it (`p-` rather than `px-`/`pb-`), and `SidebarFooter` goes back to laying out its own content and nothing else. Stacked on #901 because both edit `sidebar.vue`, and because shipping the `sidebar-footer.vue` half alone would remove the separator entirely — nothing else draws it.
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 freeto 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.
Summary
side: 'start' | 'end'(default'start', so every existing consumer is unaffected). An explorer layout — a log with a detail panel, a database browser with a schema panel — needs a resizable, hideable panel on the right.useSidebarRailderives adirection()of +1/-1 and every horizontal decision multiplies by it, so the trailing panel inherits the same clamping, phase-aware transition,inertcollapsed state and testids instead of being re-implemented beside the leading one.data-sideon the root, a Trailing story putting both edges on one page, and spec + catalog updates.How to test
cd packages/webkit && npx vitest run src/components/layout/sidebar→ passes.pnpm storybook:dev→ Components/Layout/Sidebar → Trailing. The right-hand panel's border and drag handle are on its left edge; dragging left grows it; collapsing sends it out to the right; the collapse glyph and arrow keys mirror. The leading rail on the same page behaves exactly as before.sidepassed →start).Notes