Skip to content

Commit 8b9fcd5

Browse files
authored
🤖 fix: use container queries for responsive chat controls (#526)
Chat controls now compact based on actual available space instead of window size. ## Problem Responsive chat controls used viewport-based media queries (`max-[550px]`) which checked the entire window width. When dev tools were open, the window was still wide even though the component had less space, so controls didn't compact. ## Solution Use CSS container queries instead of viewport media queries: - Mark control bar as container context with `@container` - Replace `max-[550px]` with `[@container(max-width:550px)]` - Controls now respond to their actual container width ## Testing - ✅ `make typecheck` passes - ✅ `make lint` passes - ✅ `make test` passes (955/956 tests) - Manually verified controls compact correctly when dev tools open _Generated with `cmux`_
1 parent bdecff0 commit 8b9fcd5

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

src/components/ChatInput.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,7 @@ export const ChatInput: React.FC<ChatInputProps> = ({
836836
Editing message ({formatKeybind(KEYBINDS.CANCEL_EDIT)} to cancel)
837837
</div>
838838
)}
839-
<div className="flex flex-wrap items-center gap-x-3 gap-y-2">
839+
<div className="@container flex flex-wrap items-center gap-x-3 gap-y-2">
840840
{/* Model Selector - always visible */}
841841
<div className="flex items-center" data-component="ModelSelectorGroup">
842842
<ModelSelector
@@ -866,9 +866,9 @@ export const ChatInput: React.FC<ChatInputProps> = ({
866866
</TooltipWrapper>
867867
</div>
868868

869-
{/* Thinking Slider - slider hidden on narrow viewports, label always clickable */}
869+
{/* Thinking Slider - slider hidden on narrow containers, label always clickable */}
870870
<div
871-
className="flex items-center [&_.thinking-slider]:max-[550px]:hidden"
871+
className="flex items-center [&_.thinking-slider]:[@container(max-width:550px)]:hidden"
872872
data-component="ThinkingSliderGroup"
873873
>
874874
<ThinkingSliderComponent modelString={preferredModel} />
@@ -896,8 +896,8 @@ export const ChatInput: React.FC<ChatInputProps> = ({
896896
</div>
897897
)}
898898

899-
{/* Mode Switch - full version for wide viewports */}
900-
<div className="ml-auto flex items-center gap-1.5 max-[550px]:hidden">
899+
{/* Mode Switch - full version for wide containers */}
900+
<div className="ml-auto flex items-center gap-1.5 [@container(max-width:550px)]:hidden">
901901
<div
902902
className={cn(
903903
"flex gap-0 bg-toggle-bg rounded",
@@ -913,8 +913,8 @@ export const ChatInput: React.FC<ChatInputProps> = ({
913913
<ModeHelpTooltip />
914914
</div>
915915

916-
{/* Mode Switch - compact version for narrow viewports */}
917-
<div className="ml-auto hidden items-center gap-1.5 max-[550px]:flex">
916+
{/* Mode Switch - compact version for narrow containers */}
917+
<div className="ml-auto hidden items-center gap-1.5 [@container(max-width:550px)]:flex">
918918
<ToggleGroup<UIMode> options={MODE_OPTIONS} value={mode} onChange={setMode} compact />
919919
<ModeHelpTooltip />
920920
</div>

0 commit comments

Comments
 (0)