feat(web): add opt-in panel animations - #8830

Merged
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting
Sep 2, 2026
Merged

feat(web): add opt-in panel animations#8830
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Panel motion was inconsistent across the sidebar, right panel, and terminal drawer. This adds one Appearance setting for all three, with a 0–400 ms duration slider that defaults to 0 ms.

The implementation shares one duration and one small presence hook across the panel surfaces. Reduced-motion mode stays instant, and the existing mobile sidebar sheet keeps its default behavior.

Evidence

Before:

Panel animations appearance row before the duration control

After, dark mode:

Compact panel motion setting in dark mode

After, light mode:

Compact panel motion setting in light mode

Settings preview at 400 ms:

Compact panel motion preview opening and closing

Right-panel motion at 400 ms:

1280 × 800 MP4

Right panel opening and closing at 400 ms

Verified with 99 focused tests, web/contracts/desktop typechecks, a production web build, and direct browser checks at 0 ms and 400 ms.

Built with gpt-5.6-sol through the Codex harness.

Note

Add opt-in panel animations across web UI panels

  • Introduces PanelAnimationDurationMs (0-400ms) in ClientSettingsSchema with UI controls in the AppearanceSettingsPanel.
  • Adds usePanelPresence and observeResponsiveBreakpointFade utilities to handle animation and retain panel content during close transitions.
  • Updates SheetPopup, PreviewPanelShell, ChatView, PullRequestsRouteView, and other components to consume the animation settings and transition widths, margins, and opacity.
  • Risk: PreviewPanelShell width-transition effect forces a temporary 0ms transition during width changes, and panels now stay mounted longer via usePanelPresence while closing, which requires careful cleanup to avoid lingering references.

Macroscope summarized 68a55c6.

@coderabbitai

coderabbitaiBot commented Aug 30, 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: Team

Run ID: b0330005-df4e-4e23-a079-cfaf5d79f840

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

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 30, 2026
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts 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.

Reviewed the panel-animation opt-in for shared-primitive and CSS-ownership consistency. Two findings: a clipped resize handle in PreviewPanelShell when animations are enabled, and header transition ownership moving from the owning module into a global rule. The @starting-style block is appropriate to keep in index.css.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI Consistency review

Three findings, one of which is a concrete regression risk in the new opt-in close animation.

  1. apps/web/src/components/preview/PreviewPanelShell.tsx — the collapse animates the width of the box that owns the panel content, so panel children reflow through every intermediate width. For the terminal surface this reaches the server: the tiny grid computed on the last animation frames is flushed to the PTY when the panel unmounts.
  2. apps/web/src/index.css / apps/web/src/components/WorkspacePageHeader.tsx — a one-owner padding-left transition moved out of the owning component into unlayered global CSS, taking cascade ownership away from the call site. The repo's in-data-* variant expresses the same ancestor condition at the owner.
  3. apps/web/src/panelAnimations.tsusePanelPresence is new timer/state logic that decides when panel content unmounts, and PreviewPanelShell / Sidebar / SheetPopup gained animated/open defaulting; a focused test would lock that contract.

Settings row, search entry, contract default, and the sheet/sidebar animated gating otherwise look consistent with the surrounding patterns.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This XL change introduces configurable panel animation and presence-management behavior across the sidebar, chat, pull-request, terminal, sheet, and responsive header surfaces. It also changes existing default transitions to snap at the new 0 ms default, so the cross-cutting runtime and default-experience impact merits human review.

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

@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.

Reviewed the panel-animation opt-in against the shared panel/sidebar primitives. Two findings in apps/web/src, both on the inline right panel host: an always-on width transition that now fights the resize drag, and the new global @starting-style override that belongs to PreviewPanelShell. The prior findings on this PR (content reflow during close, header transition ownership, missing usePanelPresence coverage) look addressed.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI consistency review of the panel-animation changes. The earlier findings (resize-drag easing, global index.css ownership, missing usePanelPresence coverage) look addressed. One regression remains, in ChatView's sheet-mode branch: the titlebar control cluster is now rendered twice.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the panel-animation presence wiring in ChatView: the titlebar control cluster is withheld from the header for the whole sheet exit, so it is missing from the UI for ~200ms in sheet mode.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the shared Sidebar primitive: the new animationDurationMs prop does not reach the desktop transitions, which read an ancestor-provided CSS variable instead. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Two ownership/geometry issues in the new panel-animation plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/components/ui/sidebar.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.

UI consistency review found one behavioral regression in the right-panel presence wiring and one settings-panel consistency gap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 31, 2026

@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 on the new panel-animation plumbing: the inline panel's transition duration is the only part of this feature that isn't threaded explicitly.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.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 finding: the titlebar-cluster reserve in the chat header (and the equivalent spacer in the pull-requests route) is now keyed to panel presence, which releases it a full animation ahead of the panel actually covering the cluster, so the floating controls overlap the header actions for the whole open transition.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the header reserve change in _chat.pull-requests.tsx: the spacer is now always mounted, so its flex gap-3 contribution survives even when it collapses to w-0.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/routes/_chat.pull-requests.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 finding: the mobile sidebar drawer now loses its sheet motion by default because Sidebar forwards the panel-animation setting into the shared SheetPopup.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Both findings are inline. The rest of the revision looks consistent: the resize handle is no longer clipped, --panel-animation-duration is now owned by PreviewPanelShell/Sidebar themselves, the tab strip and body unmount together through one retained value, and the terminal drawer's grid collapse clips a fixed-height <aside> rather than reflowing the Ghostty grid.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/settings/SettingsPanels.tsx
Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatHeader.tsx Outdated

@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 2 potential issues.

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 c3c5b7f. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
@maria-rcks
maria-rcks merged commit 91c8d47 into pingdotgg:mainSep 2, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* feat(desktop): browser profiles for the preview browser by @juliusmarminge in pingdotgg/t3code#7254
* refactor(shared): move the node:sqlite Effect SQL client into shared by @juliusmarminge in pingdotgg/t3code#7272
* feat(web): add opt-in panel animations by @maria-rcks in pingdotgg/t3code#8830
* feat(projects): automatically pull clean default branches by @maria-rcks in pingdotgg/t3code#9277
* fix(web): show pull request state icons in tabs by @flamboh in pingdotgg/t3code#9112
* feat(providers): add context compaction across harnesses by @maria-rcks in pingdotgg/t3code#8808
* feat(web): add proactive panels by @maria-rcks in pingdotgg/t3code#9276
* fix(web): unify control sizing across settings pages by @juliusmarminge in pingdotgg/t3code#9281
* fix(web): offer browser profiles from the empty-panel launcher by @juliusmarminge in pingdotgg/t3code#9279
* Revert "feat(providers): add context compaction across harnesses" by @maria-rcks in pingdotgg/t3code#9284
* fix(web): show scroll-to-end as soon as the last message slips under the composer by @juliusmarminge in pingdotgg/t3code#9280
* fix(cursor): honor auto and full access modes by @maria-rcks in pingdotgg/t3code#9283
* fix(desktop): detect installed Spectre libs for Windows builds by @juliusmarminge in pingdotgg/t3code#9285
* fix(pull-requests): missing features & better behaviour by @maria-rcks in pingdotgg/t3code#9188
* fix(providers): discover workspace skills everywhere by @maria-rcks in pingdotgg/t3code#9180
* fix(server): preserve automatic settlement timestamps by @eimexdev in pingdotgg/t3code#9254
* fix(opencode): show Reasoning selector for OpenCode models by @maria-rcks in pingdotgg/t3code#9287
* feat(web): preview document attachments in the file viewer by @juliusmarminge in pingdotgg/t3code#9292
* chore(ci): narrow the UI consistency check-run agent by @juliusmarminge in pingdotgg/t3code#9297
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1261...v0.0.39-nightly.20260903.1262
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1262
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, '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 opt-in panel animations - #8830

Merged
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting
Sep 2, 2026
Merged

feat(web): add opt-in panel animations#8830
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Panel motion was inconsistent across the sidebar, right panel, and terminal drawer. This adds one Appearance setting for all three, with a 0–400 ms duration slider that defaults to 0 ms.

The implementation shares one duration and one small presence hook across the panel surfaces. Reduced-motion mode stays instant, and the existing mobile sidebar sheet keeps its default behavior.

Evidence

Before:

Panel animations appearance row before the duration control

After, dark mode:

Compact panel motion setting in dark mode

After, light mode:

Compact panel motion setting in light mode

Settings preview at 400 ms:

Compact panel motion preview opening and closing

Right-panel motion at 400 ms:

1280 × 800 MP4

Right panel opening and closing at 400 ms

Verified with 99 focused tests, web/contracts/desktop typechecks, a production web build, and direct browser checks at 0 ms and 400 ms.

Built with gpt-5.6-sol through the Codex harness.

Note

Add opt-in panel animations across web UI panels

  • Introduces PanelAnimationDurationMs (0-400ms) in ClientSettingsSchema with UI controls in the AppearanceSettingsPanel.
  • Adds usePanelPresence and observeResponsiveBreakpointFade utilities to handle animation and retain panel content during close transitions.
  • Updates SheetPopup, PreviewPanelShell, ChatView, PullRequestsRouteView, and other components to consume the animation settings and transition widths, margins, and opacity.
  • Risk: PreviewPanelShell width-transition effect forces a temporary 0ms transition during width changes, and panels now stay mounted longer via usePanelPresence while closing, which requires careful cleanup to avoid lingering references.

Macroscope summarized 68a55c6.

@coderabbitai

coderabbitaiBot commented Aug 30, 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: Team

Run ID: b0330005-df4e-4e23-a079-cfaf5d79f840

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

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 30, 2026
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts 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.

Reviewed the panel-animation opt-in for shared-primitive and CSS-ownership consistency. Two findings: a clipped resize handle in PreviewPanelShell when animations are enabled, and header transition ownership moving from the owning module into a global rule. The @starting-style block is appropriate to keep in index.css.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI Consistency review

Three findings, one of which is a concrete regression risk in the new opt-in close animation.

  1. apps/web/src/components/preview/PreviewPanelShell.tsx — the collapse animates the width of the box that owns the panel content, so panel children reflow through every intermediate width. For the terminal surface this reaches the server: the tiny grid computed on the last animation frames is flushed to the PTY when the panel unmounts.
  2. apps/web/src/index.css / apps/web/src/components/WorkspacePageHeader.tsx — a one-owner padding-left transition moved out of the owning component into unlayered global CSS, taking cascade ownership away from the call site. The repo's in-data-* variant expresses the same ancestor condition at the owner.
  3. apps/web/src/panelAnimations.tsusePanelPresence is new timer/state logic that decides when panel content unmounts, and PreviewPanelShell / Sidebar / SheetPopup gained animated/open defaulting; a focused test would lock that contract.

Settings row, search entry, contract default, and the sheet/sidebar animated gating otherwise look consistent with the surrounding patterns.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This XL change introduces configurable panel animation and presence-management behavior across the sidebar, chat, pull-request, terminal, sheet, and responsive header surfaces. It also changes existing default transitions to snap at the new 0 ms default, so the cross-cutting runtime and default-experience impact merits human review.

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

@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.

Reviewed the panel-animation opt-in against the shared panel/sidebar primitives. Two findings in apps/web/src, both on the inline right panel host: an always-on width transition that now fights the resize drag, and the new global @starting-style override that belongs to PreviewPanelShell. The prior findings on this PR (content reflow during close, header transition ownership, missing usePanelPresence coverage) look addressed.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI consistency review of the panel-animation changes. The earlier findings (resize-drag easing, global index.css ownership, missing usePanelPresence coverage) look addressed. One regression remains, in ChatView's sheet-mode branch: the titlebar control cluster is now rendered twice.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the panel-animation presence wiring in ChatView: the titlebar control cluster is withheld from the header for the whole sheet exit, so it is missing from the UI for ~200ms in sheet mode.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the shared Sidebar primitive: the new animationDurationMs prop does not reach the desktop transitions, which read an ancestor-provided CSS variable instead. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Two ownership/geometry issues in the new panel-animation plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/components/ui/sidebar.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.

UI consistency review found one behavioral regression in the right-panel presence wiring and one settings-panel consistency gap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 31, 2026

@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 on the new panel-animation plumbing: the inline panel's transition duration is the only part of this feature that isn't threaded explicitly.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.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 finding: the titlebar-cluster reserve in the chat header (and the equivalent spacer in the pull-requests route) is now keyed to panel presence, which releases it a full animation ahead of the panel actually covering the cluster, so the floating controls overlap the header actions for the whole open transition.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the header reserve change in _chat.pull-requests.tsx: the spacer is now always mounted, so its flex gap-3 contribution survives even when it collapses to w-0.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/routes/_chat.pull-requests.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 finding: the mobile sidebar drawer now loses its sheet motion by default because Sidebar forwards the panel-animation setting into the shared SheetPopup.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Both findings are inline. The rest of the revision looks consistent: the resize handle is no longer clipped, --panel-animation-duration is now owned by PreviewPanelShell/Sidebar themselves, the tab strip and body unmount together through one retained value, and the terminal drawer's grid collapse clips a fixed-height <aside> rather than reflowing the Ghostty grid.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/settings/SettingsPanels.tsx
Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatHeader.tsx Outdated

@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 2 potential issues.

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 c3c5b7f. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
@maria-rcks
maria-rcks merged commit 91c8d47 into pingdotgg:mainSep 2, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* feat(desktop): browser profiles for the preview browser by @juliusmarminge in pingdotgg/t3code#7254
* refactor(shared): move the node:sqlite Effect SQL client into shared by @juliusmarminge in pingdotgg/t3code#7272
* feat(web): add opt-in panel animations by @maria-rcks in pingdotgg/t3code#8830
* feat(projects): automatically pull clean default branches by @maria-rcks in pingdotgg/t3code#9277
* fix(web): show pull request state icons in tabs by @flamboh in pingdotgg/t3code#9112
* feat(providers): add context compaction across harnesses by @maria-rcks in pingdotgg/t3code#8808
* feat(web): add proactive panels by @maria-rcks in pingdotgg/t3code#9276
* fix(web): unify control sizing across settings pages by @juliusmarminge in pingdotgg/t3code#9281
* fix(web): offer browser profiles from the empty-panel launcher by @juliusmarminge in pingdotgg/t3code#9279
* Revert "feat(providers): add context compaction across harnesses" by @maria-rcks in pingdotgg/t3code#9284
* fix(web): show scroll-to-end as soon as the last message slips under the composer by @juliusmarminge in pingdotgg/t3code#9280
* fix(cursor): honor auto and full access modes by @maria-rcks in pingdotgg/t3code#9283
* fix(desktop): detect installed Spectre libs for Windows builds by @juliusmarminge in pingdotgg/t3code#9285
* fix(pull-requests): missing features & better behaviour by @maria-rcks in pingdotgg/t3code#9188
* fix(providers): discover workspace skills everywhere by @maria-rcks in pingdotgg/t3code#9180
* fix(server): preserve automatic settlement timestamps by @eimexdev in pingdotgg/t3code#9254
* fix(opencode): show Reasoning selector for OpenCode models by @maria-rcks in pingdotgg/t3code#9287
* feat(web): preview document attachments in the file viewer by @juliusmarminge in pingdotgg/t3code#9292
* chore(ci): narrow the UI consistency check-run agent by @juliusmarminge in pingdotgg/t3code#9297
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1261...v0.0.39-nightly.20260903.1262
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1262
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, '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 opt-in panel animations - #8830

Merged
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting
Sep 2, 2026
Merged

feat(web): add opt-in panel animations#8830
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Panel motion was inconsistent across the sidebar, right panel, and terminal drawer. This adds one Appearance setting for all three, with a 0–400 ms duration slider that defaults to 0 ms.

The implementation shares one duration and one small presence hook across the panel surfaces. Reduced-motion mode stays instant, and the existing mobile sidebar sheet keeps its default behavior.

Evidence

Before:

Panel animations appearance row before the duration control

After, dark mode:

Compact panel motion setting in dark mode

After, light mode:

Compact panel motion setting in light mode

Settings preview at 400 ms:

Compact panel motion preview opening and closing

Right-panel motion at 400 ms:

1280 × 800 MP4

Right panel opening and closing at 400 ms

Verified with 99 focused tests, web/contracts/desktop typechecks, a production web build, and direct browser checks at 0 ms and 400 ms.

Built with gpt-5.6-sol through the Codex harness.

Note

Add opt-in panel animations across web UI panels

  • Introduces PanelAnimationDurationMs (0-400ms) in ClientSettingsSchema with UI controls in the AppearanceSettingsPanel.
  • Adds usePanelPresence and observeResponsiveBreakpointFade utilities to handle animation and retain panel content during close transitions.
  • Updates SheetPopup, PreviewPanelShell, ChatView, PullRequestsRouteView, and other components to consume the animation settings and transition widths, margins, and opacity.
  • Risk: PreviewPanelShell width-transition effect forces a temporary 0ms transition during width changes, and panels now stay mounted longer via usePanelPresence while closing, which requires careful cleanup to avoid lingering references.

Macroscope summarized 68a55c6.

@coderabbitai

coderabbitaiBot commented Aug 30, 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: Team

Run ID: b0330005-df4e-4e23-a079-cfaf5d79f840

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

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 30, 2026
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts 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.

Reviewed the panel-animation opt-in for shared-primitive and CSS-ownership consistency. Two findings: a clipped resize handle in PreviewPanelShell when animations are enabled, and header transition ownership moving from the owning module into a global rule. The @starting-style block is appropriate to keep in index.css.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI Consistency review

Three findings, one of which is a concrete regression risk in the new opt-in close animation.

  1. apps/web/src/components/preview/PreviewPanelShell.tsx — the collapse animates the width of the box that owns the panel content, so panel children reflow through every intermediate width. For the terminal surface this reaches the server: the tiny grid computed on the last animation frames is flushed to the PTY when the panel unmounts.
  2. apps/web/src/index.css / apps/web/src/components/WorkspacePageHeader.tsx — a one-owner padding-left transition moved out of the owning component into unlayered global CSS, taking cascade ownership away from the call site. The repo's in-data-* variant expresses the same ancestor condition at the owner.
  3. apps/web/src/panelAnimations.tsusePanelPresence is new timer/state logic that decides when panel content unmounts, and PreviewPanelShell / Sidebar / SheetPopup gained animated/open defaulting; a focused test would lock that contract.

Settings row, search entry, contract default, and the sheet/sidebar animated gating otherwise look consistent with the surrounding patterns.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This XL change introduces configurable panel animation and presence-management behavior across the sidebar, chat, pull-request, terminal, sheet, and responsive header surfaces. It also changes existing default transitions to snap at the new 0 ms default, so the cross-cutting runtime and default-experience impact merits human review.

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

@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.

Reviewed the panel-animation opt-in against the shared panel/sidebar primitives. Two findings in apps/web/src, both on the inline right panel host: an always-on width transition that now fights the resize drag, and the new global @starting-style override that belongs to PreviewPanelShell. The prior findings on this PR (content reflow during close, header transition ownership, missing usePanelPresence coverage) look addressed.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI consistency review of the panel-animation changes. The earlier findings (resize-drag easing, global index.css ownership, missing usePanelPresence coverage) look addressed. One regression remains, in ChatView's sheet-mode branch: the titlebar control cluster is now rendered twice.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the panel-animation presence wiring in ChatView: the titlebar control cluster is withheld from the header for the whole sheet exit, so it is missing from the UI for ~200ms in sheet mode.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the shared Sidebar primitive: the new animationDurationMs prop does not reach the desktop transitions, which read an ancestor-provided CSS variable instead. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Two ownership/geometry issues in the new panel-animation plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/components/ui/sidebar.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.

UI consistency review found one behavioral regression in the right-panel presence wiring and one settings-panel consistency gap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 31, 2026

@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 on the new panel-animation plumbing: the inline panel's transition duration is the only part of this feature that isn't threaded explicitly.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.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 finding: the titlebar-cluster reserve in the chat header (and the equivalent spacer in the pull-requests route) is now keyed to panel presence, which releases it a full animation ahead of the panel actually covering the cluster, so the floating controls overlap the header actions for the whole open transition.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the header reserve change in _chat.pull-requests.tsx: the spacer is now always mounted, so its flex gap-3 contribution survives even when it collapses to w-0.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/routes/_chat.pull-requests.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 finding: the mobile sidebar drawer now loses its sheet motion by default because Sidebar forwards the panel-animation setting into the shared SheetPopup.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Both findings are inline. The rest of the revision looks consistent: the resize handle is no longer clipped, --panel-animation-duration is now owned by PreviewPanelShell/Sidebar themselves, the tab strip and body unmount together through one retained value, and the terminal drawer's grid collapse clips a fixed-height <aside> rather than reflowing the Ghostty grid.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/settings/SettingsPanels.tsx
Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatHeader.tsx Outdated

@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 2 potential issues.

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 c3c5b7f. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
@maria-rcks
maria-rcks merged commit 91c8d47 into pingdotgg:mainSep 2, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* feat(desktop): browser profiles for the preview browser by @juliusmarminge in pingdotgg/t3code#7254
* refactor(shared): move the node:sqlite Effect SQL client into shared by @juliusmarminge in pingdotgg/t3code#7272
* feat(web): add opt-in panel animations by @maria-rcks in pingdotgg/t3code#8830
* feat(projects): automatically pull clean default branches by @maria-rcks in pingdotgg/t3code#9277
* fix(web): show pull request state icons in tabs by @flamboh in pingdotgg/t3code#9112
* feat(providers): add context compaction across harnesses by @maria-rcks in pingdotgg/t3code#8808
* feat(web): add proactive panels by @maria-rcks in pingdotgg/t3code#9276
* fix(web): unify control sizing across settings pages by @juliusmarminge in pingdotgg/t3code#9281
* fix(web): offer browser profiles from the empty-panel launcher by @juliusmarminge in pingdotgg/t3code#9279
* Revert "feat(providers): add context compaction across harnesses" by @maria-rcks in pingdotgg/t3code#9284
* fix(web): show scroll-to-end as soon as the last message slips under the composer by @juliusmarminge in pingdotgg/t3code#9280
* fix(cursor): honor auto and full access modes by @maria-rcks in pingdotgg/t3code#9283
* fix(desktop): detect installed Spectre libs for Windows builds by @juliusmarminge in pingdotgg/t3code#9285
* fix(pull-requests): missing features & better behaviour by @maria-rcks in pingdotgg/t3code#9188
* fix(providers): discover workspace skills everywhere by @maria-rcks in pingdotgg/t3code#9180
* fix(server): preserve automatic settlement timestamps by @eimexdev in pingdotgg/t3code#9254
* fix(opencode): show Reasoning selector for OpenCode models by @maria-rcks in pingdotgg/t3code#9287
* feat(web): preview document attachments in the file viewer by @juliusmarminge in pingdotgg/t3code#9292
* chore(ci): narrow the UI consistency check-run agent by @juliusmarminge in pingdotgg/t3code#9297
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1261...v0.0.39-nightly.20260903.1262
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1262
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, '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 opt-in panel animations - #8830

Merged
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting
Sep 2, 2026
Merged

feat(web): add opt-in panel animations#8830
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Panel motion was inconsistent across the sidebar, right panel, and terminal drawer. This adds one Appearance setting for all three, with a 0–400 ms duration slider that defaults to 0 ms.

The implementation shares one duration and one small presence hook across the panel surfaces. Reduced-motion mode stays instant, and the existing mobile sidebar sheet keeps its default behavior.

Evidence

Before:

Panel animations appearance row before the duration control

After, dark mode:

Compact panel motion setting in dark mode

After, light mode:

Compact panel motion setting in light mode

Settings preview at 400 ms:

Compact panel motion preview opening and closing

Right-panel motion at 400 ms:

1280 × 800 MP4

Right panel opening and closing at 400 ms

Verified with 99 focused tests, web/contracts/desktop typechecks, a production web build, and direct browser checks at 0 ms and 400 ms.

Built with gpt-5.6-sol through the Codex harness.

Note

Add opt-in panel animations across web UI panels

  • Introduces PanelAnimationDurationMs (0-400ms) in ClientSettingsSchema with UI controls in the AppearanceSettingsPanel.
  • Adds usePanelPresence and observeResponsiveBreakpointFade utilities to handle animation and retain panel content during close transitions.
  • Updates SheetPopup, PreviewPanelShell, ChatView, PullRequestsRouteView, and other components to consume the animation settings and transition widths, margins, and opacity.
  • Risk: PreviewPanelShell width-transition effect forces a temporary 0ms transition during width changes, and panels now stay mounted longer via usePanelPresence while closing, which requires careful cleanup to avoid lingering references.

Macroscope summarized 68a55c6.

@coderabbitai

coderabbitaiBot commented Aug 30, 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: Team

Run ID: b0330005-df4e-4e23-a079-cfaf5d79f840

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

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 30, 2026
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts 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.

Reviewed the panel-animation opt-in for shared-primitive and CSS-ownership consistency. Two findings: a clipped resize handle in PreviewPanelShell when animations are enabled, and header transition ownership moving from the owning module into a global rule. The @starting-style block is appropriate to keep in index.css.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI Consistency review

Three findings, one of which is a concrete regression risk in the new opt-in close animation.

  1. apps/web/src/components/preview/PreviewPanelShell.tsx — the collapse animates the width of the box that owns the panel content, so panel children reflow through every intermediate width. For the terminal surface this reaches the server: the tiny grid computed on the last animation frames is flushed to the PTY when the panel unmounts.
  2. apps/web/src/index.css / apps/web/src/components/WorkspacePageHeader.tsx — a one-owner padding-left transition moved out of the owning component into unlayered global CSS, taking cascade ownership away from the call site. The repo's in-data-* variant expresses the same ancestor condition at the owner.
  3. apps/web/src/panelAnimations.tsusePanelPresence is new timer/state logic that decides when panel content unmounts, and PreviewPanelShell / Sidebar / SheetPopup gained animated/open defaulting; a focused test would lock that contract.

Settings row, search entry, contract default, and the sheet/sidebar animated gating otherwise look consistent with the surrounding patterns.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This XL change introduces configurable panel animation and presence-management behavior across the sidebar, chat, pull-request, terminal, sheet, and responsive header surfaces. It also changes existing default transitions to snap at the new 0 ms default, so the cross-cutting runtime and default-experience impact merits human review.

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

@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.

Reviewed the panel-animation opt-in against the shared panel/sidebar primitives. Two findings in apps/web/src, both on the inline right panel host: an always-on width transition that now fights the resize drag, and the new global @starting-style override that belongs to PreviewPanelShell. The prior findings on this PR (content reflow during close, header transition ownership, missing usePanelPresence coverage) look addressed.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI consistency review of the panel-animation changes. The earlier findings (resize-drag easing, global index.css ownership, missing usePanelPresence coverage) look addressed. One regression remains, in ChatView's sheet-mode branch: the titlebar control cluster is now rendered twice.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the panel-animation presence wiring in ChatView: the titlebar control cluster is withheld from the header for the whole sheet exit, so it is missing from the UI for ~200ms in sheet mode.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the shared Sidebar primitive: the new animationDurationMs prop does not reach the desktop transitions, which read an ancestor-provided CSS variable instead. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Two ownership/geometry issues in the new panel-animation plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/components/ui/sidebar.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.

UI consistency review found one behavioral regression in the right-panel presence wiring and one settings-panel consistency gap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 31, 2026

@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 on the new panel-animation plumbing: the inline panel's transition duration is the only part of this feature that isn't threaded explicitly.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.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 finding: the titlebar-cluster reserve in the chat header (and the equivalent spacer in the pull-requests route) is now keyed to panel presence, which releases it a full animation ahead of the panel actually covering the cluster, so the floating controls overlap the header actions for the whole open transition.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the header reserve change in _chat.pull-requests.tsx: the spacer is now always mounted, so its flex gap-3 contribution survives even when it collapses to w-0.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/routes/_chat.pull-requests.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 finding: the mobile sidebar drawer now loses its sheet motion by default because Sidebar forwards the panel-animation setting into the shared SheetPopup.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Both findings are inline. The rest of the revision looks consistent: the resize handle is no longer clipped, --panel-animation-duration is now owned by PreviewPanelShell/Sidebar themselves, the tab strip and body unmount together through one retained value, and the terminal drawer's grid collapse clips a fixed-height <aside> rather than reflowing the Ghostty grid.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/settings/SettingsPanels.tsx
Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatHeader.tsx Outdated

@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 2 potential issues.

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 c3c5b7f. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
@maria-rcks
maria-rcks merged commit 91c8d47 into pingdotgg:mainSep 2, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* feat(desktop): browser profiles for the preview browser by @juliusmarminge in pingdotgg/t3code#7254
* refactor(shared): move the node:sqlite Effect SQL client into shared by @juliusmarminge in pingdotgg/t3code#7272
* feat(web): add opt-in panel animations by @maria-rcks in pingdotgg/t3code#8830
* feat(projects): automatically pull clean default branches by @maria-rcks in pingdotgg/t3code#9277
* fix(web): show pull request state icons in tabs by @flamboh in pingdotgg/t3code#9112
* feat(providers): add context compaction across harnesses by @maria-rcks in pingdotgg/t3code#8808
* feat(web): add proactive panels by @maria-rcks in pingdotgg/t3code#9276
* fix(web): unify control sizing across settings pages by @juliusmarminge in pingdotgg/t3code#9281
* fix(web): offer browser profiles from the empty-panel launcher by @juliusmarminge in pingdotgg/t3code#9279
* Revert "feat(providers): add context compaction across harnesses" by @maria-rcks in pingdotgg/t3code#9284
* fix(web): show scroll-to-end as soon as the last message slips under the composer by @juliusmarminge in pingdotgg/t3code#9280
* fix(cursor): honor auto and full access modes by @maria-rcks in pingdotgg/t3code#9283
* fix(desktop): detect installed Spectre libs for Windows builds by @juliusmarminge in pingdotgg/t3code#9285
* fix(pull-requests): missing features & better behaviour by @maria-rcks in pingdotgg/t3code#9188
* fix(providers): discover workspace skills everywhere by @maria-rcks in pingdotgg/t3code#9180
* fix(server): preserve automatic settlement timestamps by @eimexdev in pingdotgg/t3code#9254
* fix(opencode): show Reasoning selector for OpenCode models by @maria-rcks in pingdotgg/t3code#9287
* feat(web): preview document attachments in the file viewer by @juliusmarminge in pingdotgg/t3code#9292
* chore(ci): narrow the UI consistency check-run agent by @juliusmarminge in pingdotgg/t3code#9297
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1261...v0.0.39-nightly.20260903.1262
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1262
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, '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 opt-in panel animations - #8830

Merged
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting
Sep 2, 2026
Merged

feat(web): add opt-in panel animations#8830
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Panel motion was inconsistent across the sidebar, right panel, and terminal drawer. This adds one Appearance setting for all three, with a 0–400 ms duration slider that defaults to 0 ms.

The implementation shares one duration and one small presence hook across the panel surfaces. Reduced-motion mode stays instant, and the existing mobile sidebar sheet keeps its default behavior.

Evidence

Before:

Panel animations appearance row before the duration control

After, dark mode:

Compact panel motion setting in dark mode

After, light mode:

Compact panel motion setting in light mode

Settings preview at 400 ms:

Compact panel motion preview opening and closing

Right-panel motion at 400 ms:

1280 × 800 MP4

Right panel opening and closing at 400 ms

Verified with 99 focused tests, web/contracts/desktop typechecks, a production web build, and direct browser checks at 0 ms and 400 ms.

Built with gpt-5.6-sol through the Codex harness.

Note

Add opt-in panel animations across web UI panels

  • Introduces PanelAnimationDurationMs (0-400ms) in ClientSettingsSchema with UI controls in the AppearanceSettingsPanel.
  • Adds usePanelPresence and observeResponsiveBreakpointFade utilities to handle animation and retain panel content during close transitions.
  • Updates SheetPopup, PreviewPanelShell, ChatView, PullRequestsRouteView, and other components to consume the animation settings and transition widths, margins, and opacity.
  • Risk: PreviewPanelShell width-transition effect forces a temporary 0ms transition during width changes, and panels now stay mounted longer via usePanelPresence while closing, which requires careful cleanup to avoid lingering references.

Macroscope summarized 68a55c6.

@coderabbitai

coderabbitaiBot commented Aug 30, 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: Team

Run ID: b0330005-df4e-4e23-a079-cfaf5d79f840

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

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 30, 2026
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts 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.

Reviewed the panel-animation opt-in for shared-primitive and CSS-ownership consistency. Two findings: a clipped resize handle in PreviewPanelShell when animations are enabled, and header transition ownership moving from the owning module into a global rule. The @starting-style block is appropriate to keep in index.css.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI Consistency review

Three findings, one of which is a concrete regression risk in the new opt-in close animation.

  1. apps/web/src/components/preview/PreviewPanelShell.tsx — the collapse animates the width of the box that owns the panel content, so panel children reflow through every intermediate width. For the terminal surface this reaches the server: the tiny grid computed on the last animation frames is flushed to the PTY when the panel unmounts.
  2. apps/web/src/index.css / apps/web/src/components/WorkspacePageHeader.tsx — a one-owner padding-left transition moved out of the owning component into unlayered global CSS, taking cascade ownership away from the call site. The repo's in-data-* variant expresses the same ancestor condition at the owner.
  3. apps/web/src/panelAnimations.tsusePanelPresence is new timer/state logic that decides when panel content unmounts, and PreviewPanelShell / Sidebar / SheetPopup gained animated/open defaulting; a focused test would lock that contract.

Settings row, search entry, contract default, and the sheet/sidebar animated gating otherwise look consistent with the surrounding patterns.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This XL change introduces configurable panel animation and presence-management behavior across the sidebar, chat, pull-request, terminal, sheet, and responsive header surfaces. It also changes existing default transitions to snap at the new 0 ms default, so the cross-cutting runtime and default-experience impact merits human review.

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

@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.

Reviewed the panel-animation opt-in against the shared panel/sidebar primitives. Two findings in apps/web/src, both on the inline right panel host: an always-on width transition that now fights the resize drag, and the new global @starting-style override that belongs to PreviewPanelShell. The prior findings on this PR (content reflow during close, header transition ownership, missing usePanelPresence coverage) look addressed.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI consistency review of the panel-animation changes. The earlier findings (resize-drag easing, global index.css ownership, missing usePanelPresence coverage) look addressed. One regression remains, in ChatView's sheet-mode branch: the titlebar control cluster is now rendered twice.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the panel-animation presence wiring in ChatView: the titlebar control cluster is withheld from the header for the whole sheet exit, so it is missing from the UI for ~200ms in sheet mode.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the shared Sidebar primitive: the new animationDurationMs prop does not reach the desktop transitions, which read an ancestor-provided CSS variable instead. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Two ownership/geometry issues in the new panel-animation plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/components/ui/sidebar.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.

UI consistency review found one behavioral regression in the right-panel presence wiring and one settings-panel consistency gap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 31, 2026

@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 on the new panel-animation plumbing: the inline panel's transition duration is the only part of this feature that isn't threaded explicitly.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.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 finding: the titlebar-cluster reserve in the chat header (and the equivalent spacer in the pull-requests route) is now keyed to panel presence, which releases it a full animation ahead of the panel actually covering the cluster, so the floating controls overlap the header actions for the whole open transition.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the header reserve change in _chat.pull-requests.tsx: the spacer is now always mounted, so its flex gap-3 contribution survives even when it collapses to w-0.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/routes/_chat.pull-requests.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 finding: the mobile sidebar drawer now loses its sheet motion by default because Sidebar forwards the panel-animation setting into the shared SheetPopup.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Both findings are inline. The rest of the revision looks consistent: the resize handle is no longer clipped, --panel-animation-duration is now owned by PreviewPanelShell/Sidebar themselves, the tab strip and body unmount together through one retained value, and the terminal drawer's grid collapse clips a fixed-height <aside> rather than reflowing the Ghostty grid.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/settings/SettingsPanels.tsx
Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatHeader.tsx Outdated

@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 2 potential issues.

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 c3c5b7f. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
@maria-rcks
maria-rcks merged commit 91c8d47 into pingdotgg:mainSep 2, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* feat(desktop): browser profiles for the preview browser by @juliusmarminge in pingdotgg/t3code#7254
* refactor(shared): move the node:sqlite Effect SQL client into shared by @juliusmarminge in pingdotgg/t3code#7272
* feat(web): add opt-in panel animations by @maria-rcks in pingdotgg/t3code#8830
* feat(projects): automatically pull clean default branches by @maria-rcks in pingdotgg/t3code#9277
* fix(web): show pull request state icons in tabs by @flamboh in pingdotgg/t3code#9112
* feat(providers): add context compaction across harnesses by @maria-rcks in pingdotgg/t3code#8808
* feat(web): add proactive panels by @maria-rcks in pingdotgg/t3code#9276
* fix(web): unify control sizing across settings pages by @juliusmarminge in pingdotgg/t3code#9281
* fix(web): offer browser profiles from the empty-panel launcher by @juliusmarminge in pingdotgg/t3code#9279
* Revert "feat(providers): add context compaction across harnesses" by @maria-rcks in pingdotgg/t3code#9284
* fix(web): show scroll-to-end as soon as the last message slips under the composer by @juliusmarminge in pingdotgg/t3code#9280
* fix(cursor): honor auto and full access modes by @maria-rcks in pingdotgg/t3code#9283
* fix(desktop): detect installed Spectre libs for Windows builds by @juliusmarminge in pingdotgg/t3code#9285
* fix(pull-requests): missing features & better behaviour by @maria-rcks in pingdotgg/t3code#9188
* fix(providers): discover workspace skills everywhere by @maria-rcks in pingdotgg/t3code#9180
* fix(server): preserve automatic settlement timestamps by @eimexdev in pingdotgg/t3code#9254
* fix(opencode): show Reasoning selector for OpenCode models by @maria-rcks in pingdotgg/t3code#9287
* feat(web): preview document attachments in the file viewer by @juliusmarminge in pingdotgg/t3code#9292
* chore(ci): narrow the UI consistency check-run agent by @juliusmarminge in pingdotgg/t3code#9297
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1261...v0.0.39-nightly.20260903.1262
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1262
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, '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 opt-in panel animations - #8830

Merged
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting
Sep 2, 2026
Merged

feat(web): add opt-in panel animations#8830
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Panel motion was inconsistent across the sidebar, right panel, and terminal drawer. This adds one Appearance setting for all three, with a 0–400 ms duration slider that defaults to 0 ms.

The implementation shares one duration and one small presence hook across the panel surfaces. Reduced-motion mode stays instant, and the existing mobile sidebar sheet keeps its default behavior.

Evidence

Before:

Panel animations appearance row before the duration control

After, dark mode:

Compact panel motion setting in dark mode

After, light mode:

Compact panel motion setting in light mode

Settings preview at 400 ms:

Compact panel motion preview opening and closing

Right-panel motion at 400 ms:

1280 × 800 MP4

Right panel opening and closing at 400 ms

Verified with 99 focused tests, web/contracts/desktop typechecks, a production web build, and direct browser checks at 0 ms and 400 ms.

Built with gpt-5.6-sol through the Codex harness.

Note

Add opt-in panel animations across web UI panels

  • Introduces PanelAnimationDurationMs (0-400ms) in ClientSettingsSchema with UI controls in the AppearanceSettingsPanel.
  • Adds usePanelPresence and observeResponsiveBreakpointFade utilities to handle animation and retain panel content during close transitions.
  • Updates SheetPopup, PreviewPanelShell, ChatView, PullRequestsRouteView, and other components to consume the animation settings and transition widths, margins, and opacity.
  • Risk: PreviewPanelShell width-transition effect forces a temporary 0ms transition during width changes, and panels now stay mounted longer via usePanelPresence while closing, which requires careful cleanup to avoid lingering references.

Macroscope summarized 68a55c6.

@coderabbitai

coderabbitaiBot commented Aug 30, 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: Team

Run ID: b0330005-df4e-4e23-a079-cfaf5d79f840

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

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 30, 2026
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts 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.

Reviewed the panel-animation opt-in for shared-primitive and CSS-ownership consistency. Two findings: a clipped resize handle in PreviewPanelShell when animations are enabled, and header transition ownership moving from the owning module into a global rule. The @starting-style block is appropriate to keep in index.css.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI Consistency review

Three findings, one of which is a concrete regression risk in the new opt-in close animation.

  1. apps/web/src/components/preview/PreviewPanelShell.tsx — the collapse animates the width of the box that owns the panel content, so panel children reflow through every intermediate width. For the terminal surface this reaches the server: the tiny grid computed on the last animation frames is flushed to the PTY when the panel unmounts.
  2. apps/web/src/index.css / apps/web/src/components/WorkspacePageHeader.tsx — a one-owner padding-left transition moved out of the owning component into unlayered global CSS, taking cascade ownership away from the call site. The repo's in-data-* variant expresses the same ancestor condition at the owner.
  3. apps/web/src/panelAnimations.tsusePanelPresence is new timer/state logic that decides when panel content unmounts, and PreviewPanelShell / Sidebar / SheetPopup gained animated/open defaulting; a focused test would lock that contract.

Settings row, search entry, contract default, and the sheet/sidebar animated gating otherwise look consistent with the surrounding patterns.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This XL change introduces configurable panel animation and presence-management behavior across the sidebar, chat, pull-request, terminal, sheet, and responsive header surfaces. It also changes existing default transitions to snap at the new 0 ms default, so the cross-cutting runtime and default-experience impact merits human review.

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

@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.

Reviewed the panel-animation opt-in against the shared panel/sidebar primitives. Two findings in apps/web/src, both on the inline right panel host: an always-on width transition that now fights the resize drag, and the new global @starting-style override that belongs to PreviewPanelShell. The prior findings on this PR (content reflow during close, header transition ownership, missing usePanelPresence coverage) look addressed.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI consistency review of the panel-animation changes. The earlier findings (resize-drag easing, global index.css ownership, missing usePanelPresence coverage) look addressed. One regression remains, in ChatView's sheet-mode branch: the titlebar control cluster is now rendered twice.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the panel-animation presence wiring in ChatView: the titlebar control cluster is withheld from the header for the whole sheet exit, so it is missing from the UI for ~200ms in sheet mode.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the shared Sidebar primitive: the new animationDurationMs prop does not reach the desktop transitions, which read an ancestor-provided CSS variable instead. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Two ownership/geometry issues in the new panel-animation plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/components/ui/sidebar.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.

UI consistency review found one behavioral regression in the right-panel presence wiring and one settings-panel consistency gap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 31, 2026

@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 on the new panel-animation plumbing: the inline panel's transition duration is the only part of this feature that isn't threaded explicitly.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.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 finding: the titlebar-cluster reserve in the chat header (and the equivalent spacer in the pull-requests route) is now keyed to panel presence, which releases it a full animation ahead of the panel actually covering the cluster, so the floating controls overlap the header actions for the whole open transition.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the header reserve change in _chat.pull-requests.tsx: the spacer is now always mounted, so its flex gap-3 contribution survives even when it collapses to w-0.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/routes/_chat.pull-requests.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 finding: the mobile sidebar drawer now loses its sheet motion by default because Sidebar forwards the panel-animation setting into the shared SheetPopup.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Both findings are inline. The rest of the revision looks consistent: the resize handle is no longer clipped, --panel-animation-duration is now owned by PreviewPanelShell/Sidebar themselves, the tab strip and body unmount together through one retained value, and the terminal drawer's grid collapse clips a fixed-height <aside> rather than reflowing the Ghostty grid.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/settings/SettingsPanels.tsx
Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatHeader.tsx Outdated

@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 2 potential issues.

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 c3c5b7f. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
@maria-rcks
maria-rcks merged commit 91c8d47 into pingdotgg:mainSep 2, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* feat(desktop): browser profiles for the preview browser by @juliusmarminge in pingdotgg/t3code#7254
* refactor(shared): move the node:sqlite Effect SQL client into shared by @juliusmarminge in pingdotgg/t3code#7272
* feat(web): add opt-in panel animations by @maria-rcks in pingdotgg/t3code#8830
* feat(projects): automatically pull clean default branches by @maria-rcks in pingdotgg/t3code#9277
* fix(web): show pull request state icons in tabs by @flamboh in pingdotgg/t3code#9112
* feat(providers): add context compaction across harnesses by @maria-rcks in pingdotgg/t3code#8808
* feat(web): add proactive panels by @maria-rcks in pingdotgg/t3code#9276
* fix(web): unify control sizing across settings pages by @juliusmarminge in pingdotgg/t3code#9281
* fix(web): offer browser profiles from the empty-panel launcher by @juliusmarminge in pingdotgg/t3code#9279
* Revert "feat(providers): add context compaction across harnesses" by @maria-rcks in pingdotgg/t3code#9284
* fix(web): show scroll-to-end as soon as the last message slips under the composer by @juliusmarminge in pingdotgg/t3code#9280
* fix(cursor): honor auto and full access modes by @maria-rcks in pingdotgg/t3code#9283
* fix(desktop): detect installed Spectre libs for Windows builds by @juliusmarminge in pingdotgg/t3code#9285
* fix(pull-requests): missing features & better behaviour by @maria-rcks in pingdotgg/t3code#9188
* fix(providers): discover workspace skills everywhere by @maria-rcks in pingdotgg/t3code#9180
* fix(server): preserve automatic settlement timestamps by @eimexdev in pingdotgg/t3code#9254
* fix(opencode): show Reasoning selector for OpenCode models by @maria-rcks in pingdotgg/t3code#9287
* feat(web): preview document attachments in the file viewer by @juliusmarminge in pingdotgg/t3code#9292
* chore(ci): narrow the UI consistency check-run agent by @juliusmarminge in pingdotgg/t3code#9297
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1261...v0.0.39-nightly.20260903.1262
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1262
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, '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 opt-in panel animations - #8830

Merged
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting
Sep 2, 2026
Merged

feat(web): add opt-in panel animations#8830
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Panel motion was inconsistent across the sidebar, right panel, and terminal drawer. This adds one Appearance setting for all three, with a 0–400 ms duration slider that defaults to 0 ms.

The implementation shares one duration and one small presence hook across the panel surfaces. Reduced-motion mode stays instant, and the existing mobile sidebar sheet keeps its default behavior.

Evidence

Before:

Panel animations appearance row before the duration control

After, dark mode:

Compact panel motion setting in dark mode

After, light mode:

Compact panel motion setting in light mode

Settings preview at 400 ms:

Compact panel motion preview opening and closing

Right-panel motion at 400 ms:

1280 × 800 MP4

Right panel opening and closing at 400 ms

Verified with 99 focused tests, web/contracts/desktop typechecks, a production web build, and direct browser checks at 0 ms and 400 ms.

Built with gpt-5.6-sol through the Codex harness.

Note

Add opt-in panel animations across web UI panels

  • Introduces PanelAnimationDurationMs (0-400ms) in ClientSettingsSchema with UI controls in the AppearanceSettingsPanel.
  • Adds usePanelPresence and observeResponsiveBreakpointFade utilities to handle animation and retain panel content during close transitions.
  • Updates SheetPopup, PreviewPanelShell, ChatView, PullRequestsRouteView, and other components to consume the animation settings and transition widths, margins, and opacity.
  • Risk: PreviewPanelShell width-transition effect forces a temporary 0ms transition during width changes, and panels now stay mounted longer via usePanelPresence while closing, which requires careful cleanup to avoid lingering references.

Macroscope summarized 68a55c6.

@coderabbitai

coderabbitaiBot commented Aug 30, 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: Team

Run ID: b0330005-df4e-4e23-a079-cfaf5d79f840

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

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 30, 2026
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts 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.

Reviewed the panel-animation opt-in for shared-primitive and CSS-ownership consistency. Two findings: a clipped resize handle in PreviewPanelShell when animations are enabled, and header transition ownership moving from the owning module into a global rule. The @starting-style block is appropriate to keep in index.css.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI Consistency review

Three findings, one of which is a concrete regression risk in the new opt-in close animation.

  1. apps/web/src/components/preview/PreviewPanelShell.tsx — the collapse animates the width of the box that owns the panel content, so panel children reflow through every intermediate width. For the terminal surface this reaches the server: the tiny grid computed on the last animation frames is flushed to the PTY when the panel unmounts.
  2. apps/web/src/index.css / apps/web/src/components/WorkspacePageHeader.tsx — a one-owner padding-left transition moved out of the owning component into unlayered global CSS, taking cascade ownership away from the call site. The repo's in-data-* variant expresses the same ancestor condition at the owner.
  3. apps/web/src/panelAnimations.tsusePanelPresence is new timer/state logic that decides when panel content unmounts, and PreviewPanelShell / Sidebar / SheetPopup gained animated/open defaulting; a focused test would lock that contract.

Settings row, search entry, contract default, and the sheet/sidebar animated gating otherwise look consistent with the surrounding patterns.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This XL change introduces configurable panel animation and presence-management behavior across the sidebar, chat, pull-request, terminal, sheet, and responsive header surfaces. It also changes existing default transitions to snap at the new 0 ms default, so the cross-cutting runtime and default-experience impact merits human review.

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

@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.

Reviewed the panel-animation opt-in against the shared panel/sidebar primitives. Two findings in apps/web/src, both on the inline right panel host: an always-on width transition that now fights the resize drag, and the new global @starting-style override that belongs to PreviewPanelShell. The prior findings on this PR (content reflow during close, header transition ownership, missing usePanelPresence coverage) look addressed.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI consistency review of the panel-animation changes. The earlier findings (resize-drag easing, global index.css ownership, missing usePanelPresence coverage) look addressed. One regression remains, in ChatView's sheet-mode branch: the titlebar control cluster is now rendered twice.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the panel-animation presence wiring in ChatView: the titlebar control cluster is withheld from the header for the whole sheet exit, so it is missing from the UI for ~200ms in sheet mode.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the shared Sidebar primitive: the new animationDurationMs prop does not reach the desktop transitions, which read an ancestor-provided CSS variable instead. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Two ownership/geometry issues in the new panel-animation plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/components/ui/sidebar.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.

UI consistency review found one behavioral regression in the right-panel presence wiring and one settings-panel consistency gap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 31, 2026

@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 on the new panel-animation plumbing: the inline panel's transition duration is the only part of this feature that isn't threaded explicitly.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.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 finding: the titlebar-cluster reserve in the chat header (and the equivalent spacer in the pull-requests route) is now keyed to panel presence, which releases it a full animation ahead of the panel actually covering the cluster, so the floating controls overlap the header actions for the whole open transition.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the header reserve change in _chat.pull-requests.tsx: the spacer is now always mounted, so its flex gap-3 contribution survives even when it collapses to w-0.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/routes/_chat.pull-requests.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 finding: the mobile sidebar drawer now loses its sheet motion by default because Sidebar forwards the panel-animation setting into the shared SheetPopup.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Both findings are inline. The rest of the revision looks consistent: the resize handle is no longer clipped, --panel-animation-duration is now owned by PreviewPanelShell/Sidebar themselves, the tab strip and body unmount together through one retained value, and the terminal drawer's grid collapse clips a fixed-height <aside> rather than reflowing the Ghostty grid.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/settings/SettingsPanels.tsx
Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatHeader.tsx Outdated

@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 2 potential issues.

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 c3c5b7f. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
@maria-rcks
maria-rcks merged commit 91c8d47 into pingdotgg:mainSep 2, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* feat(desktop): browser profiles for the preview browser by @juliusmarminge in pingdotgg/t3code#7254
* refactor(shared): move the node:sqlite Effect SQL client into shared by @juliusmarminge in pingdotgg/t3code#7272
* feat(web): add opt-in panel animations by @maria-rcks in pingdotgg/t3code#8830
* feat(projects): automatically pull clean default branches by @maria-rcks in pingdotgg/t3code#9277
* fix(web): show pull request state icons in tabs by @flamboh in pingdotgg/t3code#9112
* feat(providers): add context compaction across harnesses by @maria-rcks in pingdotgg/t3code#8808
* feat(web): add proactive panels by @maria-rcks in pingdotgg/t3code#9276
* fix(web): unify control sizing across settings pages by @juliusmarminge in pingdotgg/t3code#9281
* fix(web): offer browser profiles from the empty-panel launcher by @juliusmarminge in pingdotgg/t3code#9279
* Revert "feat(providers): add context compaction across harnesses" by @maria-rcks in pingdotgg/t3code#9284
* fix(web): show scroll-to-end as soon as the last message slips under the composer by @juliusmarminge in pingdotgg/t3code#9280
* fix(cursor): honor auto and full access modes by @maria-rcks in pingdotgg/t3code#9283
* fix(desktop): detect installed Spectre libs for Windows builds by @juliusmarminge in pingdotgg/t3code#9285
* fix(pull-requests): missing features & better behaviour by @maria-rcks in pingdotgg/t3code#9188
* fix(providers): discover workspace skills everywhere by @maria-rcks in pingdotgg/t3code#9180
* fix(server): preserve automatic settlement timestamps by @eimexdev in pingdotgg/t3code#9254
* fix(opencode): show Reasoning selector for OpenCode models by @maria-rcks in pingdotgg/t3code#9287
* feat(web): preview document attachments in the file viewer by @juliusmarminge in pingdotgg/t3code#9292
* chore(ci): narrow the UI consistency check-run agent by @juliusmarminge in pingdotgg/t3code#9297
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1261...v0.0.39-nightly.20260903.1262
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1262
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, '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 opt-in panel animations - #8830

Merged
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting
Sep 2, 2026
Merged

feat(web): add opt-in panel animations#8830
maria-rcks merged 29 commits into
pingdotgg:mainfrom
maria-rcks:t3code/sidebar-animation-setting

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Panel motion was inconsistent across the sidebar, right panel, and terminal drawer. This adds one Appearance setting for all three, with a 0–400 ms duration slider that defaults to 0 ms.

The implementation shares one duration and one small presence hook across the panel surfaces. Reduced-motion mode stays instant, and the existing mobile sidebar sheet keeps its default behavior.

Evidence

Before:

Panel animations appearance row before the duration control

After, dark mode:

Compact panel motion setting in dark mode

After, light mode:

Compact panel motion setting in light mode

Settings preview at 400 ms:

Compact panel motion preview opening and closing

Right-panel motion at 400 ms:

1280 × 800 MP4

Right panel opening and closing at 400 ms

Verified with 99 focused tests, web/contracts/desktop typechecks, a production web build, and direct browser checks at 0 ms and 400 ms.

Built with gpt-5.6-sol through the Codex harness.

Note

Add opt-in panel animations across web UI panels

  • Introduces PanelAnimationDurationMs (0-400ms) in ClientSettingsSchema with UI controls in the AppearanceSettingsPanel.
  • Adds usePanelPresence and observeResponsiveBreakpointFade utilities to handle animation and retain panel content during close transitions.
  • Updates SheetPopup, PreviewPanelShell, ChatView, PullRequestsRouteView, and other components to consume the animation settings and transition widths, margins, and opacity.
  • Risk: PreviewPanelShell width-transition effect forces a temporary 0ms transition during width changes, and panels now stay mounted longer via usePanelPresence while closing, which requires careful cleanup to avoid lingering references.

Macroscope summarized 68a55c6.

@coderabbitai

coderabbitaiBot commented Aug 30, 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: Team

Run ID: b0330005-df4e-4e23-a079-cfaf5d79f840

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

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 30, 2026
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts 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.

Reviewed the panel-animation opt-in for shared-primitive and CSS-ownership consistency. Two findings: a clipped resize handle in PreviewPanelShell when animations are enabled, and header transition ownership moving from the owning module into a global rule. The @starting-style block is appropriate to keep in index.css.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI Consistency review

Three findings, one of which is a concrete regression risk in the new opt-in close animation.

  1. apps/web/src/components/preview/PreviewPanelShell.tsx — the collapse animates the width of the box that owns the panel content, so panel children reflow through every intermediate width. For the terminal surface this reaches the server: the tiny grid computed on the last animation frames is flushed to the PTY when the panel unmounts.
  2. apps/web/src/index.css / apps/web/src/components/WorkspacePageHeader.tsx — a one-owner padding-left transition moved out of the owning component into unlayered global CSS, taking cascade ownership away from the call site. The repo's in-data-* variant expresses the same ancestor condition at the owner.
  3. apps/web/src/panelAnimations.tsusePanelPresence is new timer/state logic that decides when panel content unmounts, and PreviewPanelShell / Sidebar / SheetPopup gained animated/open defaulting; a focused test would lock that contract.

Settings row, search entry, contract default, and the sheet/sidebar animated gating otherwise look consistent with the surrounding patterns.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
@macroscopeapp

macroscopeappBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This XL change introduces configurable panel animation and presence-management behavior across the sidebar, chat, pull-request, terminal, sheet, and responsive header surfaces. It also changes existing default transitions to snap at the new 0 ms default, so the cross-cutting runtime and default-experience impact merits human review.

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

@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.

Reviewed the panel-animation opt-in against the shared panel/sidebar primitives. Two findings in apps/web/src, both on the inline right panel host: an always-on width transition that now fights the resize drag, and the new global @starting-style override that belongs to PreviewPanelShell. The prior findings on this PR (content reflow during close, header transition ownership, missing usePanelPresence coverage) look addressed.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/index.css Outdated
Comment threadapps/web/src/components/preview/PreviewPanelShell.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.

UI consistency review of the panel-animation changes. The earlier findings (resize-drag easing, global index.css ownership, missing usePanelPresence coverage) look addressed. One regression remains, in ChatView's sheet-mode branch: the titlebar control cluster is now rendered twice.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the panel-animation presence wiring in ChatView: the titlebar control cluster is withheld from the header for the whole sheet exit, so it is missing from the UI for ~200ms in sheet mode.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the shared Sidebar primitive: the new animationDurationMs prop does not reach the desktop transitions, which read an ancestor-provided CSS variable instead. Details inline.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Two ownership/geometry issues in the new panel-animation plumbing.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.tsx Outdated
Comment threadapps/web/src/components/ui/sidebar.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.

UI consistency review found one behavioral regression in the right-panel presence wiring and one settings-panel consistency gap.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 31, 2026

@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 on the new panel-animation plumbing: the inline panel's transition duration is the only part of this feature that isn't threaded explicitly.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/preview/PreviewPanelShell.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 finding: the titlebar-cluster reserve in the chat header (and the equivalent spacer in the pull-requests route) is now keyed to panel presence, which releases it a full animation ahead of the panel actually covering the cluster, so the floating controls overlap the header actions for the whole open transition.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.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 finding on the header reserve change in _chat.pull-requests.tsx: the spacer is now always mounted, so its flex gap-3 contribution survives even when it collapses to w-0.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/routes/_chat.pull-requests.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 finding: the mobile sidebar drawer now loses its sheet motion by default because Sidebar forwards the panel-animation setting into the shared SheetPopup.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.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.

Both findings are inline. The rest of the revision looks consistent: the resize handle is no longer clipped, --panel-animation-duration is now owned by PreviewPanelShell/Sidebar themselves, the tab strip and body unmount together through one retained value, and the terminal drawer's grid collapse clips a fixed-height <aside> rather than reflowing the Ghostty grid.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ui/sidebar.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/settings/SettingsPanels.tsx
Comment threadapps/web/src/components/settings/SettingsPanels.tsx Outdated
Comment threadapps/web/src/panelAnimations.ts Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatHeader.tsx Outdated

@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 2 potential issues.

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 c3c5b7f. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/routes/_chat.pull-requests.tsx Outdated
@maria-rcks
maria-rcks merged commit 91c8d47 into pingdotgg:mainSep 2, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* feat(desktop): browser profiles for the preview browser by @juliusmarminge in pingdotgg/t3code#7254
* refactor(shared): move the node:sqlite Effect SQL client into shared by @juliusmarminge in pingdotgg/t3code#7272
* feat(web): add opt-in panel animations by @maria-rcks in pingdotgg/t3code#8830
* feat(projects): automatically pull clean default branches by @maria-rcks in pingdotgg/t3code#9277
* fix(web): show pull request state icons in tabs by @flamboh in pingdotgg/t3code#9112
* feat(providers): add context compaction across harnesses by @maria-rcks in pingdotgg/t3code#8808
* feat(web): add proactive panels by @maria-rcks in pingdotgg/t3code#9276
* fix(web): unify control sizing across settings pages by @juliusmarminge in pingdotgg/t3code#9281
* fix(web): offer browser profiles from the empty-panel launcher by @juliusmarminge in pingdotgg/t3code#9279
* Revert "feat(providers): add context compaction across harnesses" by @maria-rcks in pingdotgg/t3code#9284
* fix(web): show scroll-to-end as soon as the last message slips under the composer by @juliusmarminge in pingdotgg/t3code#9280
* fix(cursor): honor auto and full access modes by @maria-rcks in pingdotgg/t3code#9283
* fix(desktop): detect installed Spectre libs for Windows builds by @juliusmarminge in pingdotgg/t3code#9285
* fix(pull-requests): missing features & better behaviour by @maria-rcks in pingdotgg/t3code#9188
* fix(providers): discover workspace skills everywhere by @maria-rcks in pingdotgg/t3code#9180
* fix(server): preserve automatic settlement timestamps by @eimexdev in pingdotgg/t3code#9254
* fix(opencode): show Reasoning selector for OpenCode models by @maria-rcks in pingdotgg/t3code#9287
* feat(web): preview document attachments in the file viewer by @juliusmarminge in pingdotgg/t3code#9292
* chore(ci): narrow the UI consistency check-run agent by @juliusmarminge in pingdotgg/t3code#9297
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260902.1261...v0.0.39-nightly.20260903.1262
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1262
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks