From adec425353bdd90cc2225d8d562857bf51bba758 Mon Sep 17 00:00:00 2001 From: brsbl <57682038+brsbl@users.noreply.github.com> Date: Thu, 27 Aug 2026 06:52:08 +0000 Subject: [PATCH] Lower composer control emphasis --- .../pickers/ModelReasoningPicker.test.tsx | 14 ++++++++++++++ .../components/pickers/ModelReasoningPicker.tsx | 5 ++++- .../promptbox/FollowUpPromptBox.stories.tsx | 12 +++++++++--- .../promptbox/PromptBoxActionsMenu.test.tsx | 7 +++---- .../components/promptbox/PromptBoxActionsMenu.tsx | 2 ++ .../promptbox/PromptBoxInternal.test.tsx | 8 +++++--- .../src/components/promptbox/PromptBoxInternal.tsx | 3 ++- 7 files changed, 39 insertions(+), 12 deletions(-) diff --git a/apps/app/src/components/pickers/ModelReasoningPicker.test.tsx b/apps/app/src/components/pickers/ModelReasoningPicker.test.tsx index 0722fd60b9..12951966b2 100644 --- a/apps/app/src/components/pickers/ModelReasoningPicker.test.tsx +++ b/apps/app/src/components/pickers/ModelReasoningPicker.test.tsx @@ -159,6 +159,7 @@ function renderPicker({ modelLoadError = null, compact = false, splitPane = false, + muted = false, }: { onSelectedProviderChange?: ((value: string) => void) | null; onModelChange?: (value: string) => void; @@ -176,6 +177,7 @@ function renderPicker({ modelLoadError?: SystemExecutionOptionsModelLoadError | null; compact?: boolean; splitPane?: boolean; + muted?: boolean; } = {}) { const { queryClient, wrapper } = createQueryClientTestHarness(); queryClient.setQueryData( @@ -215,6 +217,7 @@ function renderPicker({ fastModeEnabled={false} onFastModeChange={vi.fn()} showFastModeToggle={false} + muted={muted} modal={false} /> @@ -248,6 +251,17 @@ afterEach(() => { }); describe("ModelReasoningPicker", () => { + it("uses the lower-emphasis chrome token for the composer caret", () => { + renderPicker({ muted: true }); + + const trigger = screen.getByRole("button", { + name: "Provider, model and reasoning", + }); + expect( + trigger.querySelector('[data-icon="ChevronDown"]')?.classList, + ).toContain("text-subtle-foreground/75"); + }); + it("gives a non-SVG provider mark the same 16px trigger size as button SVGs", () => { renderPicker({ pickerProviderOptions: [ diff --git a/apps/app/src/components/pickers/ModelReasoningPicker.tsx b/apps/app/src/components/pickers/ModelReasoningPicker.tsx index 08f99cfb71..e6ae8a0dfc 100644 --- a/apps/app/src/components/pickers/ModelReasoningPicker.tsx +++ b/apps/app/src/components/pickers/ModelReasoningPicker.tsx @@ -855,7 +855,10 @@ export function ModelReasoningPicker({ {disabled ? null : ( )} + + + ); +} + export function Overview() { return ( diff --git a/apps/app/src/components/promptbox/PromptBoxActionsMenu.test.tsx b/apps/app/src/components/promptbox/PromptBoxActionsMenu.test.tsx index 76661136fb..e9363d6e46 100644 --- a/apps/app/src/components/promptbox/PromptBoxActionsMenu.test.tsx +++ b/apps/app/src/components/promptbox/PromptBoxActionsMenu.test.tsx @@ -43,10 +43,9 @@ describe("PromptBoxActionsMenu", () => { const onAttach = vi.fn(); render( {}} onAttach={onAttach} />); - fireEvent.pointerDown( - screen.getByRole("button", { name: "Prompt actions" }), - { button: 0 }, - ); + const trigger = screen.getByRole("button", { name: "Prompt actions" }); + expect(trigger.classList).toContain("text-subtle-foreground/75"); + fireEvent.pointerDown(trigger, { button: 0 }); fireEvent.click( await screen.findByRole("menuitem", { name: "Attach files" }), ); diff --git a/apps/app/src/components/promptbox/PromptBoxActionsMenu.tsx b/apps/app/src/components/promptbox/PromptBoxActionsMenu.tsx index c90e48e91b..a6a94b4fd3 100644 --- a/apps/app/src/components/promptbox/PromptBoxActionsMenu.tsx +++ b/apps/app/src/components/promptbox/PromptBoxActionsMenu.tsx @@ -17,6 +17,7 @@ import { useResolvedComposerPlusMenuItems } from "@/components/plugin/composer-s import { useOptionalPluginComposerView } from "@/components/plugin/plugin-composer-host"; import { Icon, type IconName } from "@bb/shared-ui/icon"; import { COARSE_POINTER_PROMPT_ICON_ACTION_BUTTON_CLASS } from "@bb/shared-ui/coarse-pointer-sizing"; +import { CHROME_SUBTLE_ICON_BUTTON_FOREGROUND_CLASS } from "@bb/shared-ui/chrome-style-tokens"; import { CREATE_PLUGIN_PROMPT } from "@bb/client-core"; import type { ProviderPromptActionCommand } from "@bb/client-core"; @@ -181,6 +182,7 @@ export function PromptBoxActionsMenu({ aria-label="Prompt actions" className={cn( COARSE_POINTER_PROMPT_ICON_ACTION_BUTTON_CLASS, + CHROME_SUBTLE_ICON_BUTTON_FOREGROUND_CLASS, "-ml-1.5", )} > diff --git a/apps/app/src/components/promptbox/PromptBoxInternal.test.tsx b/apps/app/src/components/promptbox/PromptBoxInternal.test.tsx index 8df62039a1..90bf8b10d0 100644 --- a/apps/app/src/components/promptbox/PromptBoxInternal.test.tsx +++ b/apps/app/src/components/promptbox/PromptBoxInternal.test.tsx @@ -1648,9 +1648,11 @@ describe("PromptBoxInternal size controls", () => { expect( screen.queryByRole("button", { name: /Make prompt box/u }), ).toBeNull(); - fireEvent.click( - screen.getByRole("button", { name: "Collapse prompt box" }), - ); + const collapseButton = screen.getByRole("button", { + name: "Collapse prompt box", + }); + expect(collapseButton.classList).toContain("text-subtle-foreground/75"); + fireEvent.click(collapseButton); expect(onCollapse).toHaveBeenCalledOnce(); expect(document.activeElement).not.toBe(getPromptEditorElement()); diff --git a/apps/app/src/components/promptbox/PromptBoxInternal.tsx b/apps/app/src/components/promptbox/PromptBoxInternal.tsx index 940d37723f..daef24a565 100644 --- a/apps/app/src/components/promptbox/PromptBoxInternal.tsx +++ b/apps/app/src/components/promptbox/PromptBoxInternal.tsx @@ -68,6 +68,7 @@ import { COARSE_POINTER_PROMPT_ACTION_BUTTON_CLASS, COARSE_POINTER_PROMPT_ICON_ACTION_BUTTON_CLASS, } from "@bb/shared-ui/coarse-pointer-sizing"; +import { CHROME_SUBTLE_ICON_BUTTON_FOREGROUND_CLASS } from "@bb/shared-ui/chrome-style-tokens"; import { usePointerCoarse } from "@bb/shared-ui/hooks/use-pointer-coarse"; import { getMediaQuerySnapshot, @@ -3030,7 +3031,7 @@ export function PromptBoxInternal({ onClick={collapsePromptBox} aria-label="Collapse prompt box" className={cn( - "text-subtle-foreground hover:text-muted-foreground", + CHROME_SUBTLE_ICON_BUTTON_FOREGROUND_CLASS, COARSE_POINTER_PROMPT_ICON_ACTION_BUTTON_CLASS, )} >