fix: inline pills

This commit is contained in:
David Kaya
2026-03-25 21:40:40 +01:00
parent 29c054f47d
commit 7957928fc7
2 changed files with 53 additions and 31 deletions
+51 -29
View File
@@ -336,40 +336,62 @@ export function ChatPane({
</div>
)}
{/* Scratchpad config pills — inline above composer */}
{isScratchpad && primaryAgent && (
{/* Scratchpad pills — tools/approval left, model/reasoning right */}
{isScratchpad && (
<div className="mb-2 flex items-center gap-2">
<InlineModelPill
disabled={isComposerDisabled}
models={availableModels}
onChange={(modelId) => {
const nextModel = findModel(modelId, availableModels);
void handleScratchpadConfigChange({
model: modelId,
reasoningEffort: resolveReasoningEffort(nextModel, scratchpadReasoningEffort),
});
}}
value={primaryAgent.model}
/>
<InlineThinkingPill
disabled={isComposerDisabled}
onChange={(reasoningEffort) =>
void handleScratchpadConfigChange({
model: primaryAgent.model,
reasoningEffort,
})
}
supportedEfforts={supportedEfforts}
value={scratchpadReasoningEffort}
/>
{isUpdatingScratchpadConfig && (
<Loader2 className="size-3 animate-spin text-zinc-500" />
{hasConfigurableTools && onUpdateSessionTooling && (
<InlineToolsPill
disabled={isComposerDisabled}
lspProfiles={lspProfiles}
mcpServers={mcpServers}
onToggle={onUpdateSessionTooling}
selection={toolSelection}
/>
)}
{hasToolCallApproval && onUpdateSessionApprovalSettings && approvalTools.length > 0 && (
<InlineApprovalPill
approvalTools={approvalTools}
disabled={isComposerDisabled}
effectiveAutoApproved={effectiveAutoApproved}
isOverridden={isApprovalOverridden}
onUpdate={onUpdateSessionApprovalSettings}
/>
)}
{primaryAgent && (
<div className="ml-auto flex items-center gap-2">
<InlineModelPill
disabled={isComposerDisabled}
models={availableModels}
onChange={(modelId) => {
const nextModel = findModel(modelId, availableModels);
void handleScratchpadConfigChange({
model: modelId,
reasoningEffort: resolveReasoningEffort(nextModel, scratchpadReasoningEffort),
});
}}
value={primaryAgent.model}
/>
<InlineThinkingPill
disabled={isComposerDisabled}
onChange={(reasoningEffort) =>
void handleScratchpadConfigChange({
model: primaryAgent.model,
reasoningEffort,
})
}
supportedEfforts={supportedEfforts}
value={scratchpadReasoningEffort}
/>
{isUpdatingScratchpadConfig && (
<Loader2 className="size-3 animate-spin text-zinc-500" />
)}
</div>
)}
</div>
)}
{/* Session config pills — tool & approval controls */}
{(hasConfigurableTools || hasToolCallApproval) && (
{/* Session config pills — tool & approval controls (non-scratchpad) */}
{!isScratchpad && (hasConfigurableTools || hasToolCallApproval) && (
<div className="mb-2 flex items-center gap-2">
{hasConfigurableTools && onUpdateSessionTooling && (
<InlineToolsPill
+2 -2
View File
@@ -78,7 +78,7 @@ export function InlineModelPill({
</button>
{open && !disabled && (
<div className="absolute bottom-full left-0 z-40 mb-1.5 max-h-72 w-64 overflow-y-auto rounded-lg border border-zinc-700 bg-zinc-900 py-1 shadow-2xl" role="listbox">
<div className="absolute bottom-full right-0 z-40 mb-1.5 max-h-72 w-64 overflow-y-auto rounded-lg border border-zinc-700 bg-zinc-900 py-1 shadow-2xl" role="listbox">
{groupedModels.map((pg) => (
<div key={pg.id}>
<div className="flex items-center gap-2 px-3 pb-1 pt-2.5">
@@ -183,7 +183,7 @@ export function InlineThinkingPill({
</button>
{open && !disabled && (
<div className="absolute bottom-full left-0 z-40 mb-1.5 w-36 overflow-hidden rounded-lg border border-zinc-700 bg-zinc-900 py-1 shadow-2xl" role="listbox">
<div className="absolute bottom-full right-0 z-40 mb-1.5 w-36 overflow-hidden rounded-lg border border-zinc-700 bg-zinc-900 py-1 shadow-2xl" role="listbox">
{options.map((option) => (
<button
className={`flex w-full items-center gap-2 px-3 py-1.5 text-left text-[13px] transition hover:bg-zinc-800 ${