Skip to content

[fix/feat:ui] Move menu checks to the right - #3233

Closed
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks
Closed

[fix/feat:ui] Move menu checks to the right#3233
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks

Conversation

@sandersonstabo

@sandersonstabosandersonstabo commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

What changed

Selected menu items can hide the default left radio indicator and render their checkmark on the right instead.

Why

Humans are used to selected state being on the right side

UI changes

Before:

Before

After:

After

Checklist

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

Testing

vp check apps/web/src/components/ui/menu.tsx apps/web/src/components/chat/TraitsPicker.tsx apps/web/src/components/chat/ChatComposer.tsx

Note

Move menu check indicators to the right in chat composer and traits picker

  • Replaces the default built-in radio/selection indicators in the runtime mode selector (ChatComposer.tsx) and traits picker (TraitsPicker.tsx) with an explicit right-aligned CheckIcon that shows conditionally based on the selected value.
  • Adds a hideIndicator prop to MenuRadioItem in menu.tsx, which suppresses the built-in indicator and adjusts layout so content spans the full width.

Macroscope summarized 4bbdcf7.


Note

Low Risk
Pure presentation changes to menu/select items; selection behavior and state wiring are unchanged.

Overview
Selection menus in the chat composer and traits picker now show the active choice with a right-alignedCheckIcon instead of the default left radio/check column.

MenuRadioItem gains an optional hideIndicator prop that drops the built-in left indicator and uses full-width row padding so callers can render their own trailing check. TraitsPicker applies this to effort/select and On/Off boolean groups. The runtime mode dropdown in ChatComposer uses the same pattern on SelectItem (hideIndicator plus a check that stays visible only for the current mode).

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

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 8638d264-46a7-46e8-bb1c-c593fb834db9

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
@sandersonstabo
sandersonstabo marked this pull request as ready for review June 20, 2026 08:16
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Purely visual change that moves checkmark indicators from the left to right side of menu items. No runtime behavior changes - only presentation/styling adjustments to UI components.

You can customize Macroscope's approvability policy. Learn more.

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

</svg>
</MenuPrimitive.RadioItemIndicator>
)}
<span className={hideIndicator ? "col-start-1" : "col-start-2"}>{children}</span>

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.

Label truncation may not apply

Low Severity

MenuRadioItem wraps children in a grid cell without min-w-0, unlike SelectItem. The new traits rows use truncate with a right-side check inside that cell, so long option labels can expand or overflow instead of ellipsizing when the menu width is constrained.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

{option.description}
</span>
</div>
<CheckIcon className={cn("size-4", isSelected ? "opacity-100" : "opacity-0")} />

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.

Muted runtime mode checkmark

Low Severity

The new right-side CheckIcon sits inside SelectItem’s ItemText, which forces SVGs without a text-* class to text-muted-foreground. The old left indicator sat outside ItemText and kept normal foreground contrast, so the selected-state check now matches decorative icons instead of a selection affordance.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

@shivamhwp

Copy link
Copy Markdown
Collaborator

gpt-5.6-sol on behalf of shivamhwp.

Thank you for taking the time to submit this. We are closing this PR because #3234 has already landed the menu-check update on main. It changes the same three files and covers the behavior proposed here, so there is no remaining work for this branch to contribute.

We appreciate the contribution.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@sandersonstabo@shivamhwp@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[fix/feat:ui] Move menu checks to the right by sandersonstabo · Pull Request #3233 · pingdotgg/t3code · GitHub
Skip to content

[fix/feat:ui] Move menu checks to the right - #3233

Closed
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks
Closed

[fix/feat:ui] Move menu checks to the right#3233
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks

Conversation

@sandersonstabo

@sandersonstabosandersonstabo commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

What changed

Selected menu items can hide the default left radio indicator and render their checkmark on the right instead.

Why

Humans are used to selected state being on the right side

UI changes

Before:

Before

After:

After

Checklist

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

Testing

vp check apps/web/src/components/ui/menu.tsx apps/web/src/components/chat/TraitsPicker.tsx apps/web/src/components/chat/ChatComposer.tsx

Note

Move menu check indicators to the right in chat composer and traits picker

  • Replaces the default built-in radio/selection indicators in the runtime mode selector (ChatComposer.tsx) and traits picker (TraitsPicker.tsx) with an explicit right-aligned CheckIcon that shows conditionally based on the selected value.
  • Adds a hideIndicator prop to MenuRadioItem in menu.tsx, which suppresses the built-in indicator and adjusts layout so content spans the full width.

Macroscope summarized 4bbdcf7.


Note

Low Risk
Pure presentation changes to menu/select items; selection behavior and state wiring are unchanged.

Overview
Selection menus in the chat composer and traits picker now show the active choice with a right-alignedCheckIcon instead of the default left radio/check column.

MenuRadioItem gains an optional hideIndicator prop that drops the built-in left indicator and uses full-width row padding so callers can render their own trailing check. TraitsPicker applies this to effort/select and On/Off boolean groups. The runtime mode dropdown in ChatComposer uses the same pattern on SelectItem (hideIndicator plus a check that stays visible only for the current mode).

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

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 8638d264-46a7-46e8-bb1c-c593fb834db9

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
@sandersonstabo
sandersonstabo marked this pull request as ready for review June 20, 2026 08:16
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Purely visual change that moves checkmark indicators from the left to right side of menu items. No runtime behavior changes - only presentation/styling adjustments to UI components.

You can customize Macroscope's approvability policy. Learn more.

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

</svg>
</MenuPrimitive.RadioItemIndicator>
)}
<span className={hideIndicator ? "col-start-1" : "col-start-2"}>{children}</span>

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.

Label truncation may not apply

Low Severity

MenuRadioItem wraps children in a grid cell without min-w-0, unlike SelectItem. The new traits rows use truncate with a right-side check inside that cell, so long option labels can expand or overflow instead of ellipsizing when the menu width is constrained.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

{option.description}
</span>
</div>
<CheckIcon className={cn("size-4", isSelected ? "opacity-100" : "opacity-0")} />

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.

Muted runtime mode checkmark

Low Severity

The new right-side CheckIcon sits inside SelectItem’s ItemText, which forces SVGs without a text-* class to text-muted-foreground. The old left indicator sat outside ItemText and kept normal foreground contrast, so the selected-state check now matches decorative icons instead of a selection affordance.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

@shivamhwp

Copy link
Copy Markdown
Collaborator

gpt-5.6-sol on behalf of shivamhwp.

Thank you for taking the time to submit this. We are closing this PR because #3234 has already landed the menu-check update on main. It changes the same three files and covers the behavior proposed here, so there is no remaining work for this branch to contribute.

We appreciate the contribution.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

[fix/feat:ui] Move menu checks to the right - #3233

Closed
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks
Closed

[fix/feat:ui] Move menu checks to the right#3233
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks

Conversation

@sandersonstabo

@sandersonstabosandersonstabo commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

What changed

Selected menu items can hide the default left radio indicator and render their checkmark on the right instead.

Why

Humans are used to selected state being on the right side

UI changes

Before:

Before

After:

After

Checklist

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

Testing

vp check apps/web/src/components/ui/menu.tsx apps/web/src/components/chat/TraitsPicker.tsx apps/web/src/components/chat/ChatComposer.tsx

Note

Move menu check indicators to the right in chat composer and traits picker

  • Replaces the default built-in radio/selection indicators in the runtime mode selector (ChatComposer.tsx) and traits picker (TraitsPicker.tsx) with an explicit right-aligned CheckIcon that shows conditionally based on the selected value.
  • Adds a hideIndicator prop to MenuRadioItem in menu.tsx, which suppresses the built-in indicator and adjusts layout so content spans the full width.

Macroscope summarized 4bbdcf7.


Note

Low Risk
Pure presentation changes to menu/select items; selection behavior and state wiring are unchanged.

Overview
Selection menus in the chat composer and traits picker now show the active choice with a right-alignedCheckIcon instead of the default left radio/check column.

MenuRadioItem gains an optional hideIndicator prop that drops the built-in left indicator and uses full-width row padding so callers can render their own trailing check. TraitsPicker applies this to effort/select and On/Off boolean groups. The runtime mode dropdown in ChatComposer uses the same pattern on SelectItem (hideIndicator plus a check that stays visible only for the current mode).

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

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 8638d264-46a7-46e8-bb1c-c593fb834db9

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
@sandersonstabo
sandersonstabo marked this pull request as ready for review June 20, 2026 08:16
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Purely visual change that moves checkmark indicators from the left to right side of menu items. No runtime behavior changes - only presentation/styling adjustments to UI components.

You can customize Macroscope's approvability policy. Learn more.

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

</svg>
</MenuPrimitive.RadioItemIndicator>
)}
<span className={hideIndicator ? "col-start-1" : "col-start-2"}>{children}</span>

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.

Label truncation may not apply

Low Severity

MenuRadioItem wraps children in a grid cell without min-w-0, unlike SelectItem. The new traits rows use truncate with a right-side check inside that cell, so long option labels can expand or overflow instead of ellipsizing when the menu width is constrained.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

{option.description}
</span>
</div>
<CheckIcon className={cn("size-4", isSelected ? "opacity-100" : "opacity-0")} />

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.

Muted runtime mode checkmark

Low Severity

The new right-side CheckIcon sits inside SelectItem’s ItemText, which forces SVGs without a text-* class to text-muted-foreground. The old left indicator sat outside ItemText and kept normal foreground contrast, so the selected-state check now matches decorative icons instead of a selection affordance.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

@shivamhwp

Copy link
Copy Markdown
Collaborator

gpt-5.6-sol on behalf of shivamhwp.

Thank you for taking the time to submit this. We are closing this PR because #3234 has already landed the menu-check update on main. It changes the same three files and covers the behavior proposed here, so there is no remaining work for this branch to contribute.

We appreciate the contribution.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

[fix/feat:ui] Move menu checks to the right - #3233

Closed
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks
Closed

[fix/feat:ui] Move menu checks to the right#3233
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks

Conversation

@sandersonstabo

@sandersonstabosandersonstabo commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

What changed

Selected menu items can hide the default left radio indicator and render their checkmark on the right instead.

Why

Humans are used to selected state being on the right side

UI changes

Before:

Before

After:

After

Checklist

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

Testing

vp check apps/web/src/components/ui/menu.tsx apps/web/src/components/chat/TraitsPicker.tsx apps/web/src/components/chat/ChatComposer.tsx

Note

Move menu check indicators to the right in chat composer and traits picker

  • Replaces the default built-in radio/selection indicators in the runtime mode selector (ChatComposer.tsx) and traits picker (TraitsPicker.tsx) with an explicit right-aligned CheckIcon that shows conditionally based on the selected value.
  • Adds a hideIndicator prop to MenuRadioItem in menu.tsx, which suppresses the built-in indicator and adjusts layout so content spans the full width.

Macroscope summarized 4bbdcf7.


Note

Low Risk
Pure presentation changes to menu/select items; selection behavior and state wiring are unchanged.

Overview
Selection menus in the chat composer and traits picker now show the active choice with a right-alignedCheckIcon instead of the default left radio/check column.

MenuRadioItem gains an optional hideIndicator prop that drops the built-in left indicator and uses full-width row padding so callers can render their own trailing check. TraitsPicker applies this to effort/select and On/Off boolean groups. The runtime mode dropdown in ChatComposer uses the same pattern on SelectItem (hideIndicator plus a check that stays visible only for the current mode).

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

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 8638d264-46a7-46e8-bb1c-c593fb834db9

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
@sandersonstabo
sandersonstabo marked this pull request as ready for review June 20, 2026 08:16
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Purely visual change that moves checkmark indicators from the left to right side of menu items. No runtime behavior changes - only presentation/styling adjustments to UI components.

You can customize Macroscope's approvability policy. Learn more.

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

</svg>
</MenuPrimitive.RadioItemIndicator>
)}
<span className={hideIndicator ? "col-start-1" : "col-start-2"}>{children}</span>

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.

Label truncation may not apply

Low Severity

MenuRadioItem wraps children in a grid cell without min-w-0, unlike SelectItem. The new traits rows use truncate with a right-side check inside that cell, so long option labels can expand or overflow instead of ellipsizing when the menu width is constrained.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

{option.description}
</span>
</div>
<CheckIcon className={cn("size-4", isSelected ? "opacity-100" : "opacity-0")} />

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.

Muted runtime mode checkmark

Low Severity

The new right-side CheckIcon sits inside SelectItem’s ItemText, which forces SVGs without a text-* class to text-muted-foreground. The old left indicator sat outside ItemText and kept normal foreground contrast, so the selected-state check now matches decorative icons instead of a selection affordance.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

@shivamhwp

Copy link
Copy Markdown
Collaborator

gpt-5.6-sol on behalf of shivamhwp.

Thank you for taking the time to submit this. We are closing this PR because #3234 has already landed the menu-check update on main. It changes the same three files and covers the behavior proposed here, so there is no remaining work for this branch to contribute.

We appreciate the contribution.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

[fix/feat:ui] Move menu checks to the right - #3233

Closed
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks
Closed

[fix/feat:ui] Move menu checks to the right#3233
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks

Conversation

@sandersonstabo

@sandersonstabosandersonstabo commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

What changed

Selected menu items can hide the default left radio indicator and render their checkmark on the right instead.

Why

Humans are used to selected state being on the right side

UI changes

Before:

Before

After:

After

Checklist

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

Testing

vp check apps/web/src/components/ui/menu.tsx apps/web/src/components/chat/TraitsPicker.tsx apps/web/src/components/chat/ChatComposer.tsx

Note

Move menu check indicators to the right in chat composer and traits picker

  • Replaces the default built-in radio/selection indicators in the runtime mode selector (ChatComposer.tsx) and traits picker (TraitsPicker.tsx) with an explicit right-aligned CheckIcon that shows conditionally based on the selected value.
  • Adds a hideIndicator prop to MenuRadioItem in menu.tsx, which suppresses the built-in indicator and adjusts layout so content spans the full width.

Macroscope summarized 4bbdcf7.


Note

Low Risk
Pure presentation changes to menu/select items; selection behavior and state wiring are unchanged.

Overview
Selection menus in the chat composer and traits picker now show the active choice with a right-alignedCheckIcon instead of the default left radio/check column.

MenuRadioItem gains an optional hideIndicator prop that drops the built-in left indicator and uses full-width row padding so callers can render their own trailing check. TraitsPicker applies this to effort/select and On/Off boolean groups. The runtime mode dropdown in ChatComposer uses the same pattern on SelectItem (hideIndicator plus a check that stays visible only for the current mode).

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

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 8638d264-46a7-46e8-bb1c-c593fb834db9

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
@sandersonstabo
sandersonstabo marked this pull request as ready for review June 20, 2026 08:16
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Purely visual change that moves checkmark indicators from the left to right side of menu items. No runtime behavior changes - only presentation/styling adjustments to UI components.

You can customize Macroscope's approvability policy. Learn more.

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

</svg>
</MenuPrimitive.RadioItemIndicator>
)}
<span className={hideIndicator ? "col-start-1" : "col-start-2"}>{children}</span>

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.

Label truncation may not apply

Low Severity

MenuRadioItem wraps children in a grid cell without min-w-0, unlike SelectItem. The new traits rows use truncate with a right-side check inside that cell, so long option labels can expand or overflow instead of ellipsizing when the menu width is constrained.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

{option.description}
</span>
</div>
<CheckIcon className={cn("size-4", isSelected ? "opacity-100" : "opacity-0")} />

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.

Muted runtime mode checkmark

Low Severity

The new right-side CheckIcon sits inside SelectItem’s ItemText, which forces SVGs without a text-* class to text-muted-foreground. The old left indicator sat outside ItemText and kept normal foreground contrast, so the selected-state check now matches decorative icons instead of a selection affordance.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

@shivamhwp

Copy link
Copy Markdown
Collaborator

gpt-5.6-sol on behalf of shivamhwp.

Thank you for taking the time to submit this. We are closing this PR because #3234 has already landed the menu-check update on main. It changes the same three files and covers the behavior proposed here, so there is no remaining work for this branch to contribute.

We appreciate the contribution.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@sandersonstabo@shivamhwp@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [fix/feat:ui] Move menu checks to the right by sandersonstabo · Pull Request #3233 · pingdotgg/t3code · GitHub
Skip to content

[fix/feat:ui] Move menu checks to the right - #3233

Closed
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks
Closed

[fix/feat:ui] Move menu checks to the right#3233
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks

Conversation

@sandersonstabo

@sandersonstabosandersonstabo commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

What changed

Selected menu items can hide the default left radio indicator and render their checkmark on the right instead.

Why

Humans are used to selected state being on the right side

UI changes

Before:

Before

After:

After

Checklist

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

Testing

vp check apps/web/src/components/ui/menu.tsx apps/web/src/components/chat/TraitsPicker.tsx apps/web/src/components/chat/ChatComposer.tsx

Note

Move menu check indicators to the right in chat composer and traits picker

  • Replaces the default built-in radio/selection indicators in the runtime mode selector (ChatComposer.tsx) and traits picker (TraitsPicker.tsx) with an explicit right-aligned CheckIcon that shows conditionally based on the selected value.
  • Adds a hideIndicator prop to MenuRadioItem in menu.tsx, which suppresses the built-in indicator and adjusts layout so content spans the full width.

Macroscope summarized 4bbdcf7.


Note

Low Risk
Pure presentation changes to menu/select items; selection behavior and state wiring are unchanged.

Overview
Selection menus in the chat composer and traits picker now show the active choice with a right-alignedCheckIcon instead of the default left radio/check column.

MenuRadioItem gains an optional hideIndicator prop that drops the built-in left indicator and uses full-width row padding so callers can render their own trailing check. TraitsPicker applies this to effort/select and On/Off boolean groups. The runtime mode dropdown in ChatComposer uses the same pattern on SelectItem (hideIndicator plus a check that stays visible only for the current mode).

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

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 8638d264-46a7-46e8-bb1c-c593fb834db9

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
@sandersonstabo
sandersonstabo marked this pull request as ready for review June 20, 2026 08:16
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Purely visual change that moves checkmark indicators from the left to right side of menu items. No runtime behavior changes - only presentation/styling adjustments to UI components.

You can customize Macroscope's approvability policy. Learn more.

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

</svg>
</MenuPrimitive.RadioItemIndicator>
)}
<span className={hideIndicator ? "col-start-1" : "col-start-2"}>{children}</span>

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.

Label truncation may not apply

Low Severity

MenuRadioItem wraps children in a grid cell without min-w-0, unlike SelectItem. The new traits rows use truncate with a right-side check inside that cell, so long option labels can expand or overflow instead of ellipsizing when the menu width is constrained.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

{option.description}
</span>
</div>
<CheckIcon className={cn("size-4", isSelected ? "opacity-100" : "opacity-0")} />

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.

Muted runtime mode checkmark

Low Severity

The new right-side CheckIcon sits inside SelectItem’s ItemText, which forces SVGs without a text-* class to text-muted-foreground. The old left indicator sat outside ItemText and kept normal foreground contrast, so the selected-state check now matches decorative icons instead of a selection affordance.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

@shivamhwp

Copy link
Copy Markdown
Collaborator

gpt-5.6-sol on behalf of shivamhwp.

Thank you for taking the time to submit this. We are closing this PR because #3234 has already landed the menu-check update on main. It changes the same three files and covers the behavior proposed here, so there is no remaining work for this branch to contribute.

We appreciate the contribution.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@sandersonstabo@shivamhwp@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [fix/feat:ui] Move menu checks to the right by sandersonstabo · Pull Request #3233 · pingdotgg/t3code · GitHub
Skip to content

[fix/feat:ui] Move menu checks to the right - #3233

Closed
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks
Closed

[fix/feat:ui] Move menu checks to the right#3233
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks

Conversation

@sandersonstabo

@sandersonstabosandersonstabo commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

What changed

Selected menu items can hide the default left radio indicator and render their checkmark on the right instead.

Why

Humans are used to selected state being on the right side

UI changes

Before:

Before

After:

After

Checklist

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

Testing

vp check apps/web/src/components/ui/menu.tsx apps/web/src/components/chat/TraitsPicker.tsx apps/web/src/components/chat/ChatComposer.tsx

Note

Move menu check indicators to the right in chat composer and traits picker

  • Replaces the default built-in radio/selection indicators in the runtime mode selector (ChatComposer.tsx) and traits picker (TraitsPicker.tsx) with an explicit right-aligned CheckIcon that shows conditionally based on the selected value.
  • Adds a hideIndicator prop to MenuRadioItem in menu.tsx, which suppresses the built-in indicator and adjusts layout so content spans the full width.

Macroscope summarized 4bbdcf7.


Note

Low Risk
Pure presentation changes to menu/select items; selection behavior and state wiring are unchanged.

Overview
Selection menus in the chat composer and traits picker now show the active choice with a right-alignedCheckIcon instead of the default left radio/check column.

MenuRadioItem gains an optional hideIndicator prop that drops the built-in left indicator and uses full-width row padding so callers can render their own trailing check. TraitsPicker applies this to effort/select and On/Off boolean groups. The runtime mode dropdown in ChatComposer uses the same pattern on SelectItem (hideIndicator plus a check that stays visible only for the current mode).

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

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 8638d264-46a7-46e8-bb1c-c593fb834db9

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
@sandersonstabo
sandersonstabo marked this pull request as ready for review June 20, 2026 08:16
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Purely visual change that moves checkmark indicators from the left to right side of menu items. No runtime behavior changes - only presentation/styling adjustments to UI components.

You can customize Macroscope's approvability policy. Learn more.

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

</svg>
</MenuPrimitive.RadioItemIndicator>
)}
<span className={hideIndicator ? "col-start-1" : "col-start-2"}>{children}</span>

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.

Label truncation may not apply

Low Severity

MenuRadioItem wraps children in a grid cell without min-w-0, unlike SelectItem. The new traits rows use truncate with a right-side check inside that cell, so long option labels can expand or overflow instead of ellipsizing when the menu width is constrained.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

{option.description}
</span>
</div>
<CheckIcon className={cn("size-4", isSelected ? "opacity-100" : "opacity-0")} />

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.

Muted runtime mode checkmark

Low Severity

The new right-side CheckIcon sits inside SelectItem’s ItemText, which forces SVGs without a text-* class to text-muted-foreground. The old left indicator sat outside ItemText and kept normal foreground contrast, so the selected-state check now matches decorative icons instead of a selection affordance.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

@shivamhwp

Copy link
Copy Markdown
Collaborator

gpt-5.6-sol on behalf of shivamhwp.

Thank you for taking the time to submit this. We are closing this PR because #3234 has already landed the menu-check update on main. It changes the same three files and covers the behavior proposed here, so there is no remaining work for this branch to contribute.

We appreciate the contribution.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

[fix/feat:ui] Move menu checks to the right - #3233

Closed
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks
Closed

[fix/feat:ui] Move menu checks to the right#3233
sandersonstabo wants to merge 2 commits into
pingdotgg:mainfrom
sandersonstabo:sanderson/fix-ui-right-side-menu-checks

Conversation

@sandersonstabo

@sandersonstabosandersonstabo commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

What changed

Selected menu items can hide the default left radio indicator and render their checkmark on the right instead.

Why

Humans are used to selected state being on the right side

UI changes

Before:

Before

After:

After

Checklist

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

Testing

vp check apps/web/src/components/ui/menu.tsx apps/web/src/components/chat/TraitsPicker.tsx apps/web/src/components/chat/ChatComposer.tsx

Note

Move menu check indicators to the right in chat composer and traits picker

  • Replaces the default built-in radio/selection indicators in the runtime mode selector (ChatComposer.tsx) and traits picker (TraitsPicker.tsx) with an explicit right-aligned CheckIcon that shows conditionally based on the selected value.
  • Adds a hideIndicator prop to MenuRadioItem in menu.tsx, which suppresses the built-in indicator and adjusts layout so content spans the full width.

Macroscope summarized 4bbdcf7.


Note

Low Risk
Pure presentation changes to menu/select items; selection behavior and state wiring are unchanged.

Overview
Selection menus in the chat composer and traits picker now show the active choice with a right-alignedCheckIcon instead of the default left radio/check column.

MenuRadioItem gains an optional hideIndicator prop that drops the built-in left indicator and uses full-width row padding so callers can render their own trailing check. TraitsPicker applies this to effort/select and On/Off boolean groups. The runtime mode dropdown in ChatComposer uses the same pattern on SelectItem (hideIndicator plus a check that stays visible only for the current mode).

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

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 8638d264-46a7-46e8-bb1c-c593fb834db9

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
@sandersonstabo
sandersonstabo marked this pull request as ready for review June 20, 2026 08:16
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Purely visual change that moves checkmark indicators from the left to right side of menu items. No runtime behavior changes - only presentation/styling adjustments to UI components.

You can customize Macroscope's approvability policy. Learn more.

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

</svg>
</MenuPrimitive.RadioItemIndicator>
)}
<span className={hideIndicator ? "col-start-1" : "col-start-2"}>{children}</span>

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.

Label truncation may not apply

Low Severity

MenuRadioItem wraps children in a grid cell without min-w-0, unlike SelectItem. The new traits rows use truncate with a right-side check inside that cell, so long option labels can expand or overflow instead of ellipsizing when the menu width is constrained.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

{option.description}
</span>
</div>
<CheckIcon className={cn("size-4", isSelected ? "opacity-100" : "opacity-0")} />

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.

Muted runtime mode checkmark

Low Severity

The new right-side CheckIcon sits inside SelectItem’s ItemText, which forces SVGs without a text-* class to text-muted-foreground. The old left indicator sat outside ItemText and kept normal foreground contrast, so the selected-state check now matches decorative icons instead of a selection affordance.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 4bbdcf7. Configure here.

@shivamhwp

Copy link
Copy Markdown
Collaborator

gpt-5.6-sol on behalf of shivamhwp.

Thank you for taking the time to submit this. We are closing this PR because #3234 has already landed the menu-check update on main. It changes the same three files and covers the behavior proposed here, so there is no remaining work for this branch to contribute.

We appreciate the contribution.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@sandersonstabo@shivamhwp@juliusmarminge