Repository navigation
UI Consistency: 1 issue found
apps/web/src/components/teleport/TeleportOutButton.tsx: the new header action uses the nativedisabledattribute for itssessionBusy/importNeedsCwdstates, andButton's base variant includesdisabled:pointer-events-none, so theTooltipTriggernever receives hover and the tooltip copy written for those exact states can never be shown. The repo already handles this witharia-disabled+ an opacity class (seeThemeEditorPanel.renderAppearanceButton, which comments that "a real disabled attribute would swallow the pointer events"). An inline comment with a suggested fix was posted.
Previously flagged items are resolved: the teleport header button now uses size="icon-xs" with the primitive's own icon sizing, and the draft hero import action restores cursor-pointer.
Details
Note
Your check run agent prompt is: .macroscope/check-run-agents/ui-consistency.md
More information about how Check Run Agents work can be found in our Help Center.
Files reviewed in scope (include patterns apps/web/src/**/*.{ts,tsx,css}): commandPaletteBus.ts, components/ChatView.tsx, components/ChatView.logic.test.ts, components/CommandPalette.tsx, components/CommandPalette.logic.ts, components/CommandPalette.logic.test.ts, components/chat/ChatComposer.tsx, components/chat/ChatHeader.tsx, components/chat/DraftHeroHeadline.tsx, components/teleport/TeleportOutButton.tsx, lib/teleport.ts, state/teleport.ts.
Checks performed:
- Compared the new header control against sibling header actions (
OpenInPicker,GitActionsControl,ProjectScriptsControl) for size/geometry parity;size="icon-xs"with primitive icon sizing now matches. - Read
components/ui/button.tsxandcomponents/ui/tooltip.tsxto confirmdisabled:pointer-events-nonein the button base and thatTooltipTriggeradds no disabled-trigger handling. - Confirmed repo precedent for the
aria-disabled+ opacity pattern on tooltip-wrapped locked controls. - Command palette additions build data items (
CommandPaletteActionItem) and reuse the existingITEM_ICON_CLASS/ADDON_ICON_CLASSicon contracts; theLoaderIcon+animate-spinspinner matches existing usage elsewhere in the app. - No CSS/global stylesheet or theme-variant changes in this PR, so emitted-CSS and theme-variant gates do not apply.
ChatComposerplaceholder/disabled changes keep the existing composer disabled semantics and add explanatory placeholder text; no primitive override introduced.
🔍 Agent activity — 1 tool call
💭 I'm checking whether the previous fixes were applied correctly—the TeleportOutButton now shows
size="icon-xs"instead ofsize="xs", and the DraftHeroHeadline button has thecursor-pointerclass added. Let me verify these changes in the current version. The prior issues with the hero button are confirmed fixed. Now I'm reviewing the remaining changed files across the web app—the command palette bus, chat view components, command palette logic and tests, chat composer, and other related files—to identify any new issues. I need to check how the CommandPalette icon class constants are being used and whether there's a shared Spinner component for the LoaderIcon consistency. The LoaderIcon with spin animation is a standard pattern here, so that's not a concern. I'm wondering whether disabling the TeleportOutButton while wrapping it in a TooltipTrigger could be problematic—disabled buttons might not trigger pointer events in Base UI, which could prevent the tooltip from appearing. I should check how other header controls handle this combination of disabled state and tooltips. I'm running into an issue with the TeleportOutButton where disabled buttons don't trigger hover events in Chrome and Safari, which means the tooltip explaining when teleport is available won't display properly since the tooltip relies on those hover events to show. Let me look at how the Button primitive is implemented and check if there are other examples in the codebase where tooltips are paired with disabled buttons to see if there's an established pattern for handling this. I'm noticing a real problem here — thedisabled:pointer-events-noneclass on the button means that when it's busy, hover events never reach the tooltip trigger, so those helpful explanatory tooltips about when teleport and import are available can't show up. This is a regression since the tooltip content is specifically written for those disabled states. I should check if there's an existing pattern in the codebase for handling tooltips on disabled buttons. Looking at the ThemeEditorPanel component around that section, I'm checking how the lockReason is being handled with a Tooltip and aria-disabled attribute pattern. I'm realizing there's an accessibility issue in TeleportOutButton where usingdisabled={busy}combined with the pointer-events-none styling prevents the disabled-state tooltip from ever appearing, breaking the pattern we established elsewhere in the codebase wherearia-disabledis used instead to preserve tooltip visibility. The fix is to switch toaria-disabledfor the sessionBusy and importNeedsCwd cases while keeping the existing click guard, and apply opacity styling similar to ThemeEditorPanel. I'm considering whether to suggest a single-line replacement at line 77 changingdisabled={busy}toaria-disabled={busy}with the className adjustment, since a multi-line suggestion would require reproducing the intervening lines. Finishing the suggestion block for the button's aria-disabled and className updates. I'm also scanning the rest of the changes — the ChatComposer's disabled textarea when teleported out is acceptable since it shows a placeholder explanation, though the string comparison forsendDisabledReasonis a bit fragile. The CommandPalette additions look fine as data objects, and I'm noting that the DraftHeroHeadline's raw button element with cursor-pointer was flagged before. led render elements specially? I should check the tooltip.tsx file to see how TooltipTrigger handles disabled states. Thedisabledattribute on line 77 will triggerpointer-events-nonefrom the Button component, which blocks hover states entirely. I need to post a review comment on lines 69–77 (the multi-line section containing the disabled prop) with the start_line set to 69 and line set to 77 since this is a new file where all lines are additions.
1. modify_pr — One finding: the new header control's disabled state suppresses the tooltip that explains why it is unavailable.
Agent Credits: 194 credits