Nav-pane layout, filtering, and lazy Solution Explorer improvements#267
Merged
tannergooding merged 6 commits intoJul 19, 2026
Conversation
Read the VMR's src/source-manifest.json at index time and emit one /repoPath filter tag per mapped subfolder (dotnet/runtime, nuget/nuget.client, ...) so search can be scoped to the originating repo. Only filter tags are added; the existing /repo mapping is kept, so source links still point at dotnet/dotnet. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Emitting the assembly list (/assemblylist) no longer forces itself as the default landing page -- Solution Explorer stays the default and the assembly list is reachable through a reciprocal 'assembly list' footer link, mirroring the existing 'solution explorer' link. Drop the redundant 'filter the assembly list' prompt from the results note; that guidance already lives in the overview. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Pin the repo filter, result counts, and footer links so a long result line or tree node scrolls within its own group instead of pushing the dropdown off-screen, and add a draggable splitter between the side-by-side panes (desktop only). Includes a long-named test file so the overflow is visible on the sample site. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Drop the result group's side margins so its tinted header spans the pane, move the per-line horizontal scroll onto the collapsible body so the header stays put, and pin each group header just below the results note as its items scroll. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Pin repo (and solution) grouping headers to the top and left of the scrolling tree with a full-pane min-width so the current repo stays labeled and its tint spans the view even after a long path scrolls the tree sideways. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The merged Solution Explorer inlined every project's full file and reference subtree, forcing the browser to parse and build collapsed DOM for the entire index up front -- a multi-second load on a large index like source.dot.net. Write each project's subtree to a per-project SolutionExplorerFragment.html and emit only a data-src placeholder in the document; the client fetches and wires the subtree on first expand, matching how the namespace explorer already defers. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
tannergooding
enabled auto-merge (squash)
July 19, 2026 05:16
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.
A batch of SourceBrowser nav-pane improvements, driven by source.dot.net's scale (26 repos / 1208 projects) but applicable to any large index (e.g. source.terrafx.dev).
Per-subfolder repo filter tags for the dotnet/dotnet VMR
Tags each project with its originating repo (
data-repo) so the nav pane can filter by sub-folder within the VMR while keeping thedotnet/dotnetURL. Adds a build task (GenerateVmrRepoTags) that derives the tags.Solution Explorer as the default view
Defaults the nav pane to the Solution Explorer and pairs it with the assembly list, rather than opening on the assembly list. Removes the redundant "filter the assembly list" link from the assembly-list page (it belongs to the overview) to match the Solution Explorer treatment.
Resizable panes + pinned filter/notes
Makes the side-by-side panels resizable when not in mobile/stacked layout, and keeps the repo-select dropdown within the window bounds instead of pushing off-screen on very long entries. The "displaying N results", "generated in N ms", and "try also browsing" notes stay pinned/visible while only the results list scrolls.
Full-width, floating group headers
Search-result project groups and Solution Explorer repo/solution groups now extend the full pane width (left and right), and their grouping headers float (
position: sticky) so the project/repo/solution context stays visible while scrolling. Horizontal overflow is contained to the group body so headers stay put.Lazy Solution Explorer (main perf win)
The merged Solution Explorer inlined every project's full file and reference subtree into the document, forcing the browser to parse and build collapsed DOM for the entire index up front -- a multi-second load on a large index like source.dot.net.
Each project's subtree is now written to a per-project
SolutionExplorerFragment.html, and the document carries only adata-srcplaceholder. The client fetches and wires the subtree on first expand (guarded against re-fetch on collapse/re-expand), mirroring how the namespace explorer already defers. Projects with no subtree, or any that don't split cleanly, fall back to inline; fragment-write failures fall back to inline.On the test site this drops
SolutionExplorer.htmlfrom the full inlined tree to a ~2KB skeleton.data-repohooks remain on the skeleton rows, so the repo filter is unaffected, and reference/file links rewrite correctly on expand.Deferred / follow-up: repo-level deferral (initial doc = repo headers only) is a reasonable next increment if the ~2400-node per-project skeleton still exceeds budget on the real source.dot.net index -- but it requires reworking the repo-filter dropdown to become the lazy-expand trigger, so it's intentionally left out of this PR. Still-open item: the references view lacks a repo filter on the "no references found" entry.
Validation
@0@#reference placeholders rewrite on subfolder expand, repo filter intact.