feat(web): add pull request file sidebar - #6373

Closed
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar
Closed

feat(web): add pull request file sidebar#6373
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar

Conversation

@ShpetimA

@ShpetimAShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

What Changed

This pr adds a file-tree you can toggle using pierre to the pr viewer.
It also changes the default mode for files opened from prs from folded to opened.

Why

It adds better visibility on what changed in the pr.
You can see the file structure changes and easier navigation throughout the pr.
For the second point of swapping the default folded/opened state to me when you go in the pr code tab you go to review so intent is to view the files. Default should be open and if user wants he can fold.

UI Changes

Screen.Recording.2026-08-17.at.12.03.24.AM.mov

New Change one collapse/uncollapse button that does both filetree/files together:

Screen.Recording.2026-08-17.at.1.26.27.AM.mov

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Low Risk
UI-only review navigation and fold defaults; pagination logic is covered by new unit tests with no auth or data-persistence changes beyond a client preference flag.

Overview
Adds a toggleable file explorer on the PR Code tab so reviewers can browse changed paths (with git status), load more paged diff slices from the sidebar, and jump to a file in the diff (expanding it if collapsed via CodeViewHandle.scrollTo).

Expand/collapse all now drives both per-file diffs and sidebar directories (foldOverridefoldPreference, default expanded instead of folded). Sidebar visibility persists in localStorage; shared Pierre tree styling moves to pierre-tree-theme.ts (also used by FileBrowserPanel). getPullRequestFileLoadState avoids showing misleading “X of Y” totals when the host count is exhausted but more slices remain. User docs updated for the new Files control and default expanded layout.

Reviewed by Cursor Bugbot for commit 7b7bca4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add file explorer sidebar to pull request Code tab

  • Adds PullRequestDiffFileTree component rendering a Pierre-styled file tree with git status badges, directory expansion state, and a Load more footer showing progress and retry on failure
  • Adds a toggle in PullRequestCodeTab toolbar backed by local storage; selecting a file in the tree scrolls the diff viewer to it, and expand/collapse-all now also controls directories in the sidebar
  • Introduces getPullRequestFileLoadState to reconcile host-reported totals with loaded file counts, treating exhausted totals as lower bounds when more pages remain
  • Centralizes tree CSS and theming in pierre-tree-theme.ts; FileBrowserPanel now consumes the shared PIERRE_TREE_UNSAFE_CSS and pierreTreeStyle
  • Behavioral Change: isFileDiffCollapsed now takes a non-null DiffFoldPreference defaulting to expanded; files render expanded unless individually toggled. The toolbar no longer shows text file count, only caveat icons.

Macroscope summarized 7b7bca4.

@coderabbitai

coderabbitaiBot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fb3ffeba-0895-4331-89dd-4adb138d1b53

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 12, 2026
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR adds a substantial pull-request file explorer with file navigation, pagination, and synchronized expansion behavior, while also changing the Code tab to open diffs expanded and show the explorer by default. Those changes affect the standard review experience and product defaults, so human review is needed.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

@ShpetimA

ShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ab556c8187f0ad24074f2e725a45485ca8ba8864. Configure here.

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

I understood the question wrong but yes you can also toggle it on or off. Meaning hide it, its saved in local storage presiting between prs.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

not collapsing it, hiding it completely like on the Files tab:

CleanShot.2026-08-15.at.13.40.07.mp4

@ShpetimA

ShpetimA commented Aug 15, 2026

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.02.44.PM.mov

@juliusmarminge Yes we can, the tab which showed only file numbers now is the toggle my bad for not including the video initially just missed it

@juliusmarminge

Copy link
Copy Markdown
Member

okay that placement is bad. we should use the same pattern as the Files tab.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image we could put it at the end of these icons what do you think

@juliusmarminge

Copy link
Copy Markdown
Member

yes try that

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.16.30.PM.mov

Made the change and I'm liking it do you think we should keep still the file counter since we have one already here:

image

Feels like redundant info

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two consistency findings in the new file-tree sidebar: a primitive height override that does not survive the responsive merge, and a duplicated Pierre tree theming contract. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One layout finding on the new file-tree sidebar. The previously flagged size=\"xs\" vs h-10 height conflict on the Load more button is still open and not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image

Can't open the pr view anymore im rate limited 🙃. But here is the difference on the load more button. I made the change, I agree that compact looks better.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@juliusmarminge Made the changes whenever you have time have a look again 🫡

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the new file-tree header uses a surface-subheader class that is not defined anywhere, so the row loses its shared subheader geometry.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
…ee.tsx
Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>
@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA can you plz update the PR desc with the latest screenshots of all UI changes you made?

Vids are preferred if possible

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated with a video removed the old ui changes screenshot / videos

@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

One expands the file tree the other the files. I think makes sense to have both since unrelated

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

Could make the change to have one as both i dont think it would be bad aswell

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated to one collapse/uncollapse button added a video in description

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the load-more control's call-site overflow-hidden clips the Button primitive's coarse-pointer hit-target pseudo-element. Inline comment below.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
# Conflicts:
#	apps/web/src/components/files/FileBrowserPanel.tsx
#	docs/user/source-control.md
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

Since julius created a pr and merged a new one based on this we can close this pr now.

@ShpetimAShpetimA closed this Sep 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ShpetimA@juliusmarminge@Bil0000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(web): add pull request file sidebar - #6373

Closed
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar
Closed

feat(web): add pull request file sidebar#6373
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar

Conversation

@ShpetimA

@ShpetimAShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

What Changed

This pr adds a file-tree you can toggle using pierre to the pr viewer.
It also changes the default mode for files opened from prs from folded to opened.

Why

It adds better visibility on what changed in the pr.
You can see the file structure changes and easier navigation throughout the pr.
For the second point of swapping the default folded/opened state to me when you go in the pr code tab you go to review so intent is to view the files. Default should be open and if user wants he can fold.

UI Changes

Screen.Recording.2026-08-17.at.12.03.24.AM.mov

New Change one collapse/uncollapse button that does both filetree/files together:

Screen.Recording.2026-08-17.at.1.26.27.AM.mov

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Low Risk
UI-only review navigation and fold defaults; pagination logic is covered by new unit tests with no auth or data-persistence changes beyond a client preference flag.

Overview
Adds a toggleable file explorer on the PR Code tab so reviewers can browse changed paths (with git status), load more paged diff slices from the sidebar, and jump to a file in the diff (expanding it if collapsed via CodeViewHandle.scrollTo).

Expand/collapse all now drives both per-file diffs and sidebar directories (foldOverridefoldPreference, default expanded instead of folded). Sidebar visibility persists in localStorage; shared Pierre tree styling moves to pierre-tree-theme.ts (also used by FileBrowserPanel). getPullRequestFileLoadState avoids showing misleading “X of Y” totals when the host count is exhausted but more slices remain. User docs updated for the new Files control and default expanded layout.

Reviewed by Cursor Bugbot for commit 7b7bca4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add file explorer sidebar to pull request Code tab

  • Adds PullRequestDiffFileTree component rendering a Pierre-styled file tree with git status badges, directory expansion state, and a Load more footer showing progress and retry on failure
  • Adds a toggle in PullRequestCodeTab toolbar backed by local storage; selecting a file in the tree scrolls the diff viewer to it, and expand/collapse-all now also controls directories in the sidebar
  • Introduces getPullRequestFileLoadState to reconcile host-reported totals with loaded file counts, treating exhausted totals as lower bounds when more pages remain
  • Centralizes tree CSS and theming in pierre-tree-theme.ts; FileBrowserPanel now consumes the shared PIERRE_TREE_UNSAFE_CSS and pierreTreeStyle
  • Behavioral Change: isFileDiffCollapsed now takes a non-null DiffFoldPreference defaulting to expanded; files render expanded unless individually toggled. The toolbar no longer shows text file count, only caveat icons.

Macroscope summarized 7b7bca4.

@coderabbitai

coderabbitaiBot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fb3ffeba-0895-4331-89dd-4adb138d1b53

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 12, 2026
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR adds a substantial pull-request file explorer with file navigation, pagination, and synchronized expansion behavior, while also changing the Code tab to open diffs expanded and show the explorer by default. Those changes affect the standard review experience and product defaults, so human review is needed.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

@ShpetimA

ShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ab556c8187f0ad24074f2e725a45485ca8ba8864. Configure here.

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

I understood the question wrong but yes you can also toggle it on or off. Meaning hide it, its saved in local storage presiting between prs.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

not collapsing it, hiding it completely like on the Files tab:

CleanShot.2026-08-15.at.13.40.07.mp4

@ShpetimA

ShpetimA commented Aug 15, 2026

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.02.44.PM.mov

@juliusmarminge Yes we can, the tab which showed only file numbers now is the toggle my bad for not including the video initially just missed it

@juliusmarminge

Copy link
Copy Markdown
Member

okay that placement is bad. we should use the same pattern as the Files tab.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image we could put it at the end of these icons what do you think

@juliusmarminge

Copy link
Copy Markdown
Member

yes try that

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.16.30.PM.mov

Made the change and I'm liking it do you think we should keep still the file counter since we have one already here:

image

Feels like redundant info

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two consistency findings in the new file-tree sidebar: a primitive height override that does not survive the responsive merge, and a duplicated Pierre tree theming contract. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One layout finding on the new file-tree sidebar. The previously flagged size=\"xs\" vs h-10 height conflict on the Load more button is still open and not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image

Can't open the pr view anymore im rate limited 🙃. But here is the difference on the load more button. I made the change, I agree that compact looks better.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@juliusmarminge Made the changes whenever you have time have a look again 🫡

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the new file-tree header uses a surface-subheader class that is not defined anywhere, so the row loses its shared subheader geometry.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
…ee.tsx
Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>
@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA can you plz update the PR desc with the latest screenshots of all UI changes you made?

Vids are preferred if possible

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated with a video removed the old ui changes screenshot / videos

@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

One expands the file tree the other the files. I think makes sense to have both since unrelated

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

Could make the change to have one as both i dont think it would be bad aswell

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated to one collapse/uncollapse button added a video in description

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the load-more control's call-site overflow-hidden clips the Button primitive's coarse-pointer hit-target pseudo-element. Inline comment below.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
# Conflicts:
#	apps/web/src/components/files/FileBrowserPanel.tsx
#	docs/user/source-control.md
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

Since julius created a pr and merged a new one based on this we can close this pr now.

@ShpetimAShpetimA closed this Sep 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ShpetimA@juliusmarminge@Bil0000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(web): add pull request file sidebar - #6373

Closed
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar
Closed

feat(web): add pull request file sidebar#6373
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar

Conversation

@ShpetimA

@ShpetimAShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

What Changed

This pr adds a file-tree you can toggle using pierre to the pr viewer.
It also changes the default mode for files opened from prs from folded to opened.

Why

It adds better visibility on what changed in the pr.
You can see the file structure changes and easier navigation throughout the pr.
For the second point of swapping the default folded/opened state to me when you go in the pr code tab you go to review so intent is to view the files. Default should be open and if user wants he can fold.

UI Changes

Screen.Recording.2026-08-17.at.12.03.24.AM.mov

New Change one collapse/uncollapse button that does both filetree/files together:

Screen.Recording.2026-08-17.at.1.26.27.AM.mov

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Low Risk
UI-only review navigation and fold defaults; pagination logic is covered by new unit tests with no auth or data-persistence changes beyond a client preference flag.

Overview
Adds a toggleable file explorer on the PR Code tab so reviewers can browse changed paths (with git status), load more paged diff slices from the sidebar, and jump to a file in the diff (expanding it if collapsed via CodeViewHandle.scrollTo).

Expand/collapse all now drives both per-file diffs and sidebar directories (foldOverridefoldPreference, default expanded instead of folded). Sidebar visibility persists in localStorage; shared Pierre tree styling moves to pierre-tree-theme.ts (also used by FileBrowserPanel). getPullRequestFileLoadState avoids showing misleading “X of Y” totals when the host count is exhausted but more slices remain. User docs updated for the new Files control and default expanded layout.

Reviewed by Cursor Bugbot for commit 7b7bca4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add file explorer sidebar to pull request Code tab

  • Adds PullRequestDiffFileTree component rendering a Pierre-styled file tree with git status badges, directory expansion state, and a Load more footer showing progress and retry on failure
  • Adds a toggle in PullRequestCodeTab toolbar backed by local storage; selecting a file in the tree scrolls the diff viewer to it, and expand/collapse-all now also controls directories in the sidebar
  • Introduces getPullRequestFileLoadState to reconcile host-reported totals with loaded file counts, treating exhausted totals as lower bounds when more pages remain
  • Centralizes tree CSS and theming in pierre-tree-theme.ts; FileBrowserPanel now consumes the shared PIERRE_TREE_UNSAFE_CSS and pierreTreeStyle
  • Behavioral Change: isFileDiffCollapsed now takes a non-null DiffFoldPreference defaulting to expanded; files render expanded unless individually toggled. The toolbar no longer shows text file count, only caveat icons.

Macroscope summarized 7b7bca4.

@coderabbitai

coderabbitaiBot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fb3ffeba-0895-4331-89dd-4adb138d1b53

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 12, 2026
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR adds a substantial pull-request file explorer with file navigation, pagination, and synchronized expansion behavior, while also changing the Code tab to open diffs expanded and show the explorer by default. Those changes affect the standard review experience and product defaults, so human review is needed.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

@ShpetimA

ShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ab556c8187f0ad24074f2e725a45485ca8ba8864. Configure here.

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

I understood the question wrong but yes you can also toggle it on or off. Meaning hide it, its saved in local storage presiting between prs.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

not collapsing it, hiding it completely like on the Files tab:

CleanShot.2026-08-15.at.13.40.07.mp4

@ShpetimA

ShpetimA commented Aug 15, 2026

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.02.44.PM.mov

@juliusmarminge Yes we can, the tab which showed only file numbers now is the toggle my bad for not including the video initially just missed it

@juliusmarminge

Copy link
Copy Markdown
Member

okay that placement is bad. we should use the same pattern as the Files tab.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image we could put it at the end of these icons what do you think

@juliusmarminge

Copy link
Copy Markdown
Member

yes try that

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.16.30.PM.mov

Made the change and I'm liking it do you think we should keep still the file counter since we have one already here:

image

Feels like redundant info

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two consistency findings in the new file-tree sidebar: a primitive height override that does not survive the responsive merge, and a duplicated Pierre tree theming contract. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One layout finding on the new file-tree sidebar. The previously flagged size=\"xs\" vs h-10 height conflict on the Load more button is still open and not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image

Can't open the pr view anymore im rate limited 🙃. But here is the difference on the load more button. I made the change, I agree that compact looks better.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@juliusmarminge Made the changes whenever you have time have a look again 🫡

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the new file-tree header uses a surface-subheader class that is not defined anywhere, so the row loses its shared subheader geometry.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
…ee.tsx
Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>
@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA can you plz update the PR desc with the latest screenshots of all UI changes you made?

Vids are preferred if possible

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated with a video removed the old ui changes screenshot / videos

@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

One expands the file tree the other the files. I think makes sense to have both since unrelated

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

Could make the change to have one as both i dont think it would be bad aswell

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated to one collapse/uncollapse button added a video in description

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the load-more control's call-site overflow-hidden clips the Button primitive's coarse-pointer hit-target pseudo-element. Inline comment below.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
# Conflicts:
#	apps/web/src/components/files/FileBrowserPanel.tsx
#	docs/user/source-control.md
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

Since julius created a pr and merged a new one based on this we can close this pr now.

@ShpetimAShpetimA closed this Sep 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ShpetimA@juliusmarminge@Bil0000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(web): add pull request file sidebar - #6373

Closed
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar
Closed

feat(web): add pull request file sidebar#6373
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar

Conversation

@ShpetimA

@ShpetimAShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

What Changed

This pr adds a file-tree you can toggle using pierre to the pr viewer.
It also changes the default mode for files opened from prs from folded to opened.

Why

It adds better visibility on what changed in the pr.
You can see the file structure changes and easier navigation throughout the pr.
For the second point of swapping the default folded/opened state to me when you go in the pr code tab you go to review so intent is to view the files. Default should be open and if user wants he can fold.

UI Changes

Screen.Recording.2026-08-17.at.12.03.24.AM.mov

New Change one collapse/uncollapse button that does both filetree/files together:

Screen.Recording.2026-08-17.at.1.26.27.AM.mov

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Low Risk
UI-only review navigation and fold defaults; pagination logic is covered by new unit tests with no auth or data-persistence changes beyond a client preference flag.

Overview
Adds a toggleable file explorer on the PR Code tab so reviewers can browse changed paths (with git status), load more paged diff slices from the sidebar, and jump to a file in the diff (expanding it if collapsed via CodeViewHandle.scrollTo).

Expand/collapse all now drives both per-file diffs and sidebar directories (foldOverridefoldPreference, default expanded instead of folded). Sidebar visibility persists in localStorage; shared Pierre tree styling moves to pierre-tree-theme.ts (also used by FileBrowserPanel). getPullRequestFileLoadState avoids showing misleading “X of Y” totals when the host count is exhausted but more slices remain. User docs updated for the new Files control and default expanded layout.

Reviewed by Cursor Bugbot for commit 7b7bca4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add file explorer sidebar to pull request Code tab

  • Adds PullRequestDiffFileTree component rendering a Pierre-styled file tree with git status badges, directory expansion state, and a Load more footer showing progress and retry on failure
  • Adds a toggle in PullRequestCodeTab toolbar backed by local storage; selecting a file in the tree scrolls the diff viewer to it, and expand/collapse-all now also controls directories in the sidebar
  • Introduces getPullRequestFileLoadState to reconcile host-reported totals with loaded file counts, treating exhausted totals as lower bounds when more pages remain
  • Centralizes tree CSS and theming in pierre-tree-theme.ts; FileBrowserPanel now consumes the shared PIERRE_TREE_UNSAFE_CSS and pierreTreeStyle
  • Behavioral Change: isFileDiffCollapsed now takes a non-null DiffFoldPreference defaulting to expanded; files render expanded unless individually toggled. The toolbar no longer shows text file count, only caveat icons.

Macroscope summarized 7b7bca4.

@coderabbitai

coderabbitaiBot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fb3ffeba-0895-4331-89dd-4adb138d1b53

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 12, 2026
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR adds a substantial pull-request file explorer with file navigation, pagination, and synchronized expansion behavior, while also changing the Code tab to open diffs expanded and show the explorer by default. Those changes affect the standard review experience and product defaults, so human review is needed.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

@ShpetimA

ShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ab556c8187f0ad24074f2e725a45485ca8ba8864. Configure here.

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

I understood the question wrong but yes you can also toggle it on or off. Meaning hide it, its saved in local storage presiting between prs.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

not collapsing it, hiding it completely like on the Files tab:

CleanShot.2026-08-15.at.13.40.07.mp4

@ShpetimA

ShpetimA commented Aug 15, 2026

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.02.44.PM.mov

@juliusmarminge Yes we can, the tab which showed only file numbers now is the toggle my bad for not including the video initially just missed it

@juliusmarminge

Copy link
Copy Markdown
Member

okay that placement is bad. we should use the same pattern as the Files tab.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image we could put it at the end of these icons what do you think

@juliusmarminge

Copy link
Copy Markdown
Member

yes try that

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.16.30.PM.mov

Made the change and I'm liking it do you think we should keep still the file counter since we have one already here:

image

Feels like redundant info

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two consistency findings in the new file-tree sidebar: a primitive height override that does not survive the responsive merge, and a duplicated Pierre tree theming contract. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One layout finding on the new file-tree sidebar. The previously flagged size=\"xs\" vs h-10 height conflict on the Load more button is still open and not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image

Can't open the pr view anymore im rate limited 🙃. But here is the difference on the load more button. I made the change, I agree that compact looks better.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@juliusmarminge Made the changes whenever you have time have a look again 🫡

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the new file-tree header uses a surface-subheader class that is not defined anywhere, so the row loses its shared subheader geometry.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
…ee.tsx
Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>
@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA can you plz update the PR desc with the latest screenshots of all UI changes you made?

Vids are preferred if possible

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated with a video removed the old ui changes screenshot / videos

@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

One expands the file tree the other the files. I think makes sense to have both since unrelated

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

Could make the change to have one as both i dont think it would be bad aswell

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated to one collapse/uncollapse button added a video in description

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the load-more control's call-site overflow-hidden clips the Button primitive's coarse-pointer hit-target pseudo-element. Inline comment below.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
# Conflicts:
#	apps/web/src/components/files/FileBrowserPanel.tsx
#	docs/user/source-control.md
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

Since julius created a pr and merged a new one based on this we can close this pr now.

@ShpetimAShpetimA closed this Sep 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ShpetimA@juliusmarminge@Bil0000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(web): add pull request file sidebar - #6373

Closed
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar
Closed

feat(web): add pull request file sidebar#6373
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar

Conversation

@ShpetimA

@ShpetimAShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

What Changed

This pr adds a file-tree you can toggle using pierre to the pr viewer.
It also changes the default mode for files opened from prs from folded to opened.

Why

It adds better visibility on what changed in the pr.
You can see the file structure changes and easier navigation throughout the pr.
For the second point of swapping the default folded/opened state to me when you go in the pr code tab you go to review so intent is to view the files. Default should be open and if user wants he can fold.

UI Changes

Screen.Recording.2026-08-17.at.12.03.24.AM.mov

New Change one collapse/uncollapse button that does both filetree/files together:

Screen.Recording.2026-08-17.at.1.26.27.AM.mov

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Low Risk
UI-only review navigation and fold defaults; pagination logic is covered by new unit tests with no auth or data-persistence changes beyond a client preference flag.

Overview
Adds a toggleable file explorer on the PR Code tab so reviewers can browse changed paths (with git status), load more paged diff slices from the sidebar, and jump to a file in the diff (expanding it if collapsed via CodeViewHandle.scrollTo).

Expand/collapse all now drives both per-file diffs and sidebar directories (foldOverridefoldPreference, default expanded instead of folded). Sidebar visibility persists in localStorage; shared Pierre tree styling moves to pierre-tree-theme.ts (also used by FileBrowserPanel). getPullRequestFileLoadState avoids showing misleading “X of Y” totals when the host count is exhausted but more slices remain. User docs updated for the new Files control and default expanded layout.

Reviewed by Cursor Bugbot for commit 7b7bca4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add file explorer sidebar to pull request Code tab

  • Adds PullRequestDiffFileTree component rendering a Pierre-styled file tree with git status badges, directory expansion state, and a Load more footer showing progress and retry on failure
  • Adds a toggle in PullRequestCodeTab toolbar backed by local storage; selecting a file in the tree scrolls the diff viewer to it, and expand/collapse-all now also controls directories in the sidebar
  • Introduces getPullRequestFileLoadState to reconcile host-reported totals with loaded file counts, treating exhausted totals as lower bounds when more pages remain
  • Centralizes tree CSS and theming in pierre-tree-theme.ts; FileBrowserPanel now consumes the shared PIERRE_TREE_UNSAFE_CSS and pierreTreeStyle
  • Behavioral Change: isFileDiffCollapsed now takes a non-null DiffFoldPreference defaulting to expanded; files render expanded unless individually toggled. The toolbar no longer shows text file count, only caveat icons.

Macroscope summarized 7b7bca4.

@coderabbitai

coderabbitaiBot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fb3ffeba-0895-4331-89dd-4adb138d1b53

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 12, 2026
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR adds a substantial pull-request file explorer with file navigation, pagination, and synchronized expansion behavior, while also changing the Code tab to open diffs expanded and show the explorer by default. Those changes affect the standard review experience and product defaults, so human review is needed.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

@ShpetimA

ShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ab556c8187f0ad24074f2e725a45485ca8ba8864. Configure here.

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

I understood the question wrong but yes you can also toggle it on or off. Meaning hide it, its saved in local storage presiting between prs.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

not collapsing it, hiding it completely like on the Files tab:

CleanShot.2026-08-15.at.13.40.07.mp4

@ShpetimA

ShpetimA commented Aug 15, 2026

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.02.44.PM.mov

@juliusmarminge Yes we can, the tab which showed only file numbers now is the toggle my bad for not including the video initially just missed it

@juliusmarminge

Copy link
Copy Markdown
Member

okay that placement is bad. we should use the same pattern as the Files tab.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image we could put it at the end of these icons what do you think

@juliusmarminge

Copy link
Copy Markdown
Member

yes try that

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.16.30.PM.mov

Made the change and I'm liking it do you think we should keep still the file counter since we have one already here:

image

Feels like redundant info

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two consistency findings in the new file-tree sidebar: a primitive height override that does not survive the responsive merge, and a duplicated Pierre tree theming contract. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One layout finding on the new file-tree sidebar. The previously flagged size=\"xs\" vs h-10 height conflict on the Load more button is still open and not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image

Can't open the pr view anymore im rate limited 🙃. But here is the difference on the load more button. I made the change, I agree that compact looks better.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@juliusmarminge Made the changes whenever you have time have a look again 🫡

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the new file-tree header uses a surface-subheader class that is not defined anywhere, so the row loses its shared subheader geometry.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
…ee.tsx
Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>
@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA can you plz update the PR desc with the latest screenshots of all UI changes you made?

Vids are preferred if possible

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated with a video removed the old ui changes screenshot / videos

@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

One expands the file tree the other the files. I think makes sense to have both since unrelated

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

Could make the change to have one as both i dont think it would be bad aswell

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated to one collapse/uncollapse button added a video in description

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the load-more control's call-site overflow-hidden clips the Button primitive's coarse-pointer hit-target pseudo-element. Inline comment below.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
# Conflicts:
#	apps/web/src/components/files/FileBrowserPanel.tsx
#	docs/user/source-control.md
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

Since julius created a pr and merged a new one based on this we can close this pr now.

@ShpetimAShpetimA closed this Sep 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ShpetimA@juliusmarminge@Bil0000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(web): add pull request file sidebar - #6373

Closed
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar
Closed

feat(web): add pull request file sidebar#6373
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar

Conversation

@ShpetimA

@ShpetimAShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

What Changed

This pr adds a file-tree you can toggle using pierre to the pr viewer.
It also changes the default mode for files opened from prs from folded to opened.

Why

It adds better visibility on what changed in the pr.
You can see the file structure changes and easier navigation throughout the pr.
For the second point of swapping the default folded/opened state to me when you go in the pr code tab you go to review so intent is to view the files. Default should be open and if user wants he can fold.

UI Changes

Screen.Recording.2026-08-17.at.12.03.24.AM.mov

New Change one collapse/uncollapse button that does both filetree/files together:

Screen.Recording.2026-08-17.at.1.26.27.AM.mov

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Low Risk
UI-only review navigation and fold defaults; pagination logic is covered by new unit tests with no auth or data-persistence changes beyond a client preference flag.

Overview
Adds a toggleable file explorer on the PR Code tab so reviewers can browse changed paths (with git status), load more paged diff slices from the sidebar, and jump to a file in the diff (expanding it if collapsed via CodeViewHandle.scrollTo).

Expand/collapse all now drives both per-file diffs and sidebar directories (foldOverridefoldPreference, default expanded instead of folded). Sidebar visibility persists in localStorage; shared Pierre tree styling moves to pierre-tree-theme.ts (also used by FileBrowserPanel). getPullRequestFileLoadState avoids showing misleading “X of Y” totals when the host count is exhausted but more slices remain. User docs updated for the new Files control and default expanded layout.

Reviewed by Cursor Bugbot for commit 7b7bca4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add file explorer sidebar to pull request Code tab

  • Adds PullRequestDiffFileTree component rendering a Pierre-styled file tree with git status badges, directory expansion state, and a Load more footer showing progress and retry on failure
  • Adds a toggle in PullRequestCodeTab toolbar backed by local storage; selecting a file in the tree scrolls the diff viewer to it, and expand/collapse-all now also controls directories in the sidebar
  • Introduces getPullRequestFileLoadState to reconcile host-reported totals with loaded file counts, treating exhausted totals as lower bounds when more pages remain
  • Centralizes tree CSS and theming in pierre-tree-theme.ts; FileBrowserPanel now consumes the shared PIERRE_TREE_UNSAFE_CSS and pierreTreeStyle
  • Behavioral Change: isFileDiffCollapsed now takes a non-null DiffFoldPreference defaulting to expanded; files render expanded unless individually toggled. The toolbar no longer shows text file count, only caveat icons.

Macroscope summarized 7b7bca4.

@coderabbitai

coderabbitaiBot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fb3ffeba-0895-4331-89dd-4adb138d1b53

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 12, 2026
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR adds a substantial pull-request file explorer with file navigation, pagination, and synchronized expansion behavior, while also changing the Code tab to open diffs expanded and show the explorer by default. Those changes affect the standard review experience and product defaults, so human review is needed.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

@ShpetimA

ShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ab556c8187f0ad24074f2e725a45485ca8ba8864. Configure here.

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

I understood the question wrong but yes you can also toggle it on or off. Meaning hide it, its saved in local storage presiting between prs.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

not collapsing it, hiding it completely like on the Files tab:

CleanShot.2026-08-15.at.13.40.07.mp4

@ShpetimA

ShpetimA commented Aug 15, 2026

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.02.44.PM.mov

@juliusmarminge Yes we can, the tab which showed only file numbers now is the toggle my bad for not including the video initially just missed it

@juliusmarminge

Copy link
Copy Markdown
Member

okay that placement is bad. we should use the same pattern as the Files tab.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image we could put it at the end of these icons what do you think

@juliusmarminge

Copy link
Copy Markdown
Member

yes try that

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.16.30.PM.mov

Made the change and I'm liking it do you think we should keep still the file counter since we have one already here:

image

Feels like redundant info

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two consistency findings in the new file-tree sidebar: a primitive height override that does not survive the responsive merge, and a duplicated Pierre tree theming contract. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One layout finding on the new file-tree sidebar. The previously flagged size=\"xs\" vs h-10 height conflict on the Load more button is still open and not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image

Can't open the pr view anymore im rate limited 🙃. But here is the difference on the load more button. I made the change, I agree that compact looks better.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@juliusmarminge Made the changes whenever you have time have a look again 🫡

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the new file-tree header uses a surface-subheader class that is not defined anywhere, so the row loses its shared subheader geometry.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
…ee.tsx
Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>
@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA can you plz update the PR desc with the latest screenshots of all UI changes you made?

Vids are preferred if possible

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated with a video removed the old ui changes screenshot / videos

@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

One expands the file tree the other the files. I think makes sense to have both since unrelated

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

Could make the change to have one as both i dont think it would be bad aswell

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated to one collapse/uncollapse button added a video in description

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the load-more control's call-site overflow-hidden clips the Button primitive's coarse-pointer hit-target pseudo-element. Inline comment below.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
# Conflicts:
#	apps/web/src/components/files/FileBrowserPanel.tsx
#	docs/user/source-control.md
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

Since julius created a pr and merged a new one based on this we can close this pr now.

@ShpetimAShpetimA closed this Sep 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ShpetimA@juliusmarminge@Bil0000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(web): add pull request file sidebar - #6373

Closed
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar
Closed

feat(web): add pull request file sidebar#6373
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar

Conversation

@ShpetimA

@ShpetimAShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

What Changed

This pr adds a file-tree you can toggle using pierre to the pr viewer.
It also changes the default mode for files opened from prs from folded to opened.

Why

It adds better visibility on what changed in the pr.
You can see the file structure changes and easier navigation throughout the pr.
For the second point of swapping the default folded/opened state to me when you go in the pr code tab you go to review so intent is to view the files. Default should be open and if user wants he can fold.

UI Changes

Screen.Recording.2026-08-17.at.12.03.24.AM.mov

New Change one collapse/uncollapse button that does both filetree/files together:

Screen.Recording.2026-08-17.at.1.26.27.AM.mov

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Low Risk
UI-only review navigation and fold defaults; pagination logic is covered by new unit tests with no auth or data-persistence changes beyond a client preference flag.

Overview
Adds a toggleable file explorer on the PR Code tab so reviewers can browse changed paths (with git status), load more paged diff slices from the sidebar, and jump to a file in the diff (expanding it if collapsed via CodeViewHandle.scrollTo).

Expand/collapse all now drives both per-file diffs and sidebar directories (foldOverridefoldPreference, default expanded instead of folded). Sidebar visibility persists in localStorage; shared Pierre tree styling moves to pierre-tree-theme.ts (also used by FileBrowserPanel). getPullRequestFileLoadState avoids showing misleading “X of Y” totals when the host count is exhausted but more slices remain. User docs updated for the new Files control and default expanded layout.

Reviewed by Cursor Bugbot for commit 7b7bca4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add file explorer sidebar to pull request Code tab

  • Adds PullRequestDiffFileTree component rendering a Pierre-styled file tree with git status badges, directory expansion state, and a Load more footer showing progress and retry on failure
  • Adds a toggle in PullRequestCodeTab toolbar backed by local storage; selecting a file in the tree scrolls the diff viewer to it, and expand/collapse-all now also controls directories in the sidebar
  • Introduces getPullRequestFileLoadState to reconcile host-reported totals with loaded file counts, treating exhausted totals as lower bounds when more pages remain
  • Centralizes tree CSS and theming in pierre-tree-theme.ts; FileBrowserPanel now consumes the shared PIERRE_TREE_UNSAFE_CSS and pierreTreeStyle
  • Behavioral Change: isFileDiffCollapsed now takes a non-null DiffFoldPreference defaulting to expanded; files render expanded unless individually toggled. The toolbar no longer shows text file count, only caveat icons.

Macroscope summarized 7b7bca4.

@coderabbitai

coderabbitaiBot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fb3ffeba-0895-4331-89dd-4adb138d1b53

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 12, 2026
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR adds a substantial pull-request file explorer with file navigation, pagination, and synchronized expansion behavior, while also changing the Code tab to open diffs expanded and show the explorer by default. Those changes affect the standard review experience and product defaults, so human review is needed.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

@ShpetimA

ShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ab556c8187f0ad24074f2e725a45485ca8ba8864. Configure here.

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

I understood the question wrong but yes you can also toggle it on or off. Meaning hide it, its saved in local storage presiting between prs.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

not collapsing it, hiding it completely like on the Files tab:

CleanShot.2026-08-15.at.13.40.07.mp4

@ShpetimA

ShpetimA commented Aug 15, 2026

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.02.44.PM.mov

@juliusmarminge Yes we can, the tab which showed only file numbers now is the toggle my bad for not including the video initially just missed it

@juliusmarminge

Copy link
Copy Markdown
Member

okay that placement is bad. we should use the same pattern as the Files tab.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image we could put it at the end of these icons what do you think

@juliusmarminge

Copy link
Copy Markdown
Member

yes try that

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.16.30.PM.mov

Made the change and I'm liking it do you think we should keep still the file counter since we have one already here:

image

Feels like redundant info

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two consistency findings in the new file-tree sidebar: a primitive height override that does not survive the responsive merge, and a duplicated Pierre tree theming contract. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One layout finding on the new file-tree sidebar. The previously flagged size=\"xs\" vs h-10 height conflict on the Load more button is still open and not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image

Can't open the pr view anymore im rate limited 🙃. But here is the difference on the load more button. I made the change, I agree that compact looks better.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@juliusmarminge Made the changes whenever you have time have a look again 🫡

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the new file-tree header uses a surface-subheader class that is not defined anywhere, so the row loses its shared subheader geometry.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
…ee.tsx
Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>
@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA can you plz update the PR desc with the latest screenshots of all UI changes you made?

Vids are preferred if possible

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated with a video removed the old ui changes screenshot / videos

@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

One expands the file tree the other the files. I think makes sense to have both since unrelated

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

Could make the change to have one as both i dont think it would be bad aswell

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated to one collapse/uncollapse button added a video in description

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the load-more control's call-site overflow-hidden clips the Button primitive's coarse-pointer hit-target pseudo-element. Inline comment below.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
# Conflicts:
#	apps/web/src/components/files/FileBrowserPanel.tsx
#	docs/user/source-control.md
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

Since julius created a pr and merged a new one based on this we can close this pr now.

@ShpetimAShpetimA closed this Sep 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ShpetimA@juliusmarminge@Bil0000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(web): add pull request file sidebar - #6373

Closed
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar
Closed

feat(web): add pull request file sidebar#6373
ShpetimA wants to merge 10 commits into
pingdotgg:mainfrom
ShpetimA:pr-files-sidebar

Conversation

@ShpetimA

@ShpetimAShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

What Changed

This pr adds a file-tree you can toggle using pierre to the pr viewer.
It also changes the default mode for files opened from prs from folded to opened.

Why

It adds better visibility on what changed in the pr.
You can see the file structure changes and easier navigation throughout the pr.
For the second point of swapping the default folded/opened state to me when you go in the pr code tab you go to review so intent is to view the files. Default should be open and if user wants he can fold.

UI Changes

Screen.Recording.2026-08-17.at.12.03.24.AM.mov

New Change one collapse/uncollapse button that does both filetree/files together:

Screen.Recording.2026-08-17.at.1.26.27.AM.mov

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Low Risk
UI-only review navigation and fold defaults; pagination logic is covered by new unit tests with no auth or data-persistence changes beyond a client preference flag.

Overview
Adds a toggleable file explorer on the PR Code tab so reviewers can browse changed paths (with git status), load more paged diff slices from the sidebar, and jump to a file in the diff (expanding it if collapsed via CodeViewHandle.scrollTo).

Expand/collapse all now drives both per-file diffs and sidebar directories (foldOverridefoldPreference, default expanded instead of folded). Sidebar visibility persists in localStorage; shared Pierre tree styling moves to pierre-tree-theme.ts (also used by FileBrowserPanel). getPullRequestFileLoadState avoids showing misleading “X of Y” totals when the host count is exhausted but more slices remain. User docs updated for the new Files control and default expanded layout.

Reviewed by Cursor Bugbot for commit 7b7bca4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add file explorer sidebar to pull request Code tab

  • Adds PullRequestDiffFileTree component rendering a Pierre-styled file tree with git status badges, directory expansion state, and a Load more footer showing progress and retry on failure
  • Adds a toggle in PullRequestCodeTab toolbar backed by local storage; selecting a file in the tree scrolls the diff viewer to it, and expand/collapse-all now also controls directories in the sidebar
  • Introduces getPullRequestFileLoadState to reconcile host-reported totals with loaded file counts, treating exhausted totals as lower bounds when more pages remain
  • Centralizes tree CSS and theming in pierre-tree-theme.ts; FileBrowserPanel now consumes the shared PIERRE_TREE_UNSAFE_CSS and pierreTreeStyle
  • Behavioral Change: isFileDiffCollapsed now takes a non-null DiffFoldPreference defaulting to expanded; files render expanded unless individually toggled. The toolbar no longer shows text file count, only caveat icons.

Macroscope summarized 7b7bca4.

@coderabbitai

coderabbitaiBot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fb3ffeba-0895-4331-89dd-4adb138d1b53

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 12, 2026
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR adds a substantial pull-request file explorer with file navigation, pagination, and synchronized expansion behavior, while also changing the Code tab to open diffs expanded and show the explorer by default. Those changes affect the standard review experience and product defaults, so human review is needed.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

@ShpetimA

ShpetimA commented Aug 12, 2026

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ab556c8187f0ad24074f2e725a45485ca8ba8864. Configure here.

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

can i not toggle the tree?

I understood the question wrong but yes you can also toggle it on or off. Meaning hide it, its saved in local storage presiting between prs.

@juliusmarminge

Copy link
Copy Markdown
Member

can i not toggle the tree?

You mean the file tree ? Yes you can toggle it on the header of the file tree:

Screen.Recording.2026-08-12.at.11.49.39.PM.mov

not collapsing it, hiding it completely like on the Files tab:

CleanShot.2026-08-15.at.13.40.07.mp4

@ShpetimA

ShpetimA commented Aug 15, 2026

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.02.44.PM.mov

@juliusmarminge Yes we can, the tab which showed only file numbers now is the toggle my bad for not including the video initially just missed it

@juliusmarminge

Copy link
Copy Markdown
Member

okay that placement is bad. we should use the same pattern as the Files tab.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image we could put it at the end of these icons what do you think

@juliusmarminge

Copy link
Copy Markdown
Member

yes try that

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
Screen.Recording.2026-08-15.at.2.16.30.PM.mov

Made the change and I'm liking it do you think we should keep still the file counter since we have one already here:

image

Feels like redundant info

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two consistency findings in the new file-tree sidebar: a primitive height override that does not survive the responsive merge, and a duplicated Pierre tree theming contract. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One layout finding on the new file-tree sidebar. The previously flagged size=\"xs\" vs h-10 height conflict on the Load more button is still open and not repeated here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx Outdated
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor
image

Can't open the pr view anymore im rate limited 🙃. But here is the difference on the load more button. I made the change, I agree that compact looks better.

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@juliusmarminge Made the changes whenever you have time have a look again 🫡

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the new file-tree header uses a surface-subheader class that is not defined anywhere, so the row loses its shared subheader geometry.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
…ee.tsx
Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>
@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA can you plz update the PR desc with the latest screenshots of all UI changes you made?

Vids are preferred if possible

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated with a video removed the old ui changes screenshot / videos

@Bil0000

Copy link
Copy Markdown
Contributor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

One expands the file tree the other the files. I think makes sense to have both since unrelated

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@ShpetimA why have 2 of these?

why not making it 1 that expands both?
CleanShot 2026-08-17 at 1 22 33@2x

Could make the change to have one as both i dont think it would be bad aswell

@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

@Bil0000 Updated to one collapse/uncollapse button added a video in description

Comment threadapps/web/src/components/pullRequest/PullRequestCodeTab.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: the load-more control's call-site overflow-hidden clips the Button primitive's coarse-pointer hit-target pseudo-element. Inline comment below.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/pullRequest/PullRequestDiffFileTree.tsx Outdated
# Conflicts:
#	apps/web/src/components/files/FileBrowserPanel.tsx
#	docs/user/source-control.md
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge pushed a commit that referenced this pull request Sep 3, 2026
Navigating a diff with many files meant scrolling through all of them. Both the
thread diff panel and the pull request Code tab now have a toolbar toggle that
opens a Pierre file tree of the changed files with git status marks. Picking a
file expands it if it was folded and scrolls the diff to it. The tree keeps the
reader's expanded folders across refreshes and later diff slices by diffing the
path list instead of rebuilding, and a "Load more files" footer in the pull
request tree pulls in the next slice without scrolling for the sentinel.
One shared DiffFileTree component backs both views; the Pierre tree theme it
shares with the Files tab moves to pierre-tree-theme.ts.
Based on the approach in #6373.
Co-authored-by: Shpetim <32248437+ShpetimA@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ShpetimA

Copy link
Copy Markdown
ContributorAuthor

Since julius created a pr and merged a new one based on this we can close this pr now.

@ShpetimAShpetimA closed this Sep 3, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ShpetimA@juliusmarminge@Bil0000