diff --git a/packages/dashboard/app/components/TaskChatTab.css b/packages/dashboard/app/components/TaskChatTab.css index 6b2076ce62..9f2efe2d0a 100644 --- a/packages/dashboard/app/components/TaskChatTab.css +++ b/packages/dashboard/app/components/TaskChatTab.css @@ -254,28 +254,37 @@ FN-7207 makes the right-side dock and narrow desktop detail hosts use the same r } } -.task-chat-tool-group, -.task-chat-thinking { +.task-chat-tool-group { box-sizing: border-box; min-width: 0; padding: var(--space-md); border: var(--btn-border-width) solid var(--border); border-radius: var(--radius-lg); + background: color-mix(in srgb, var(--surface) 35%, transparent); + color: var(--text); + overflow-wrap: anywhere; +} + +/* +FNXC:TaskChat 2026-07-15-11:00: +FN-8029 keeps collapsed thinking blocks compact like tool-call summaries by using smaller container and summary padding. Preserve tokenized inner-body padding so expanded reasoning remains comfortably readable. +*/ +.task-chat-thinking { + box-sizing: border-box; + min-width: 0; + padding: var(--space-sm); + border: var(--btn-border-width) solid var(--border); + border-radius: var(--radius-lg); background: var(--surface); color: var(--text); overflow-wrap: anywhere; } -.task-chat-tool-group { - background: color-mix(in srgb, var(--surface) 35%, transparent); -} - .task-chat-tool-group-summary, .task-chat-thinking-summary { display: flex; align-items: center; gap: var(--space-sm); - padding: var(--space-sm) var(--space-md); cursor: pointer; list-style: none; } @@ -348,7 +357,6 @@ FN-7240 raises the FN-7225 follow-up tool-call typography to the readable base s .task-chat-thinking-body { display: flex; flex-direction: column; - padding: 0 var(--space-md) var(--space-md); } .task-chat-tool-group-entries { @@ -356,6 +364,10 @@ FN-7240 raises the FN-7225 follow-up tool-call typography to the readable base s padding: 0 var(--space-xs) var(--space-xs); } +.task-chat-thinking-body { + padding: 0 var(--space-sm) var(--space-sm); +} + .task-chat-tool-entry { box-sizing: border-box; min-width: 0; @@ -378,6 +390,7 @@ FN-7240 raises the FN-7225 follow-up tool-call typography to the readable base s } .task-chat-thinking-summary { + padding: var(--space-xs); color: var(--color-warning); font-weight: 600; } @@ -604,11 +617,14 @@ FN-6660 corrects the repeated mobile sizing misses from FN-6507, FN-6604, and FN } .task-chat-entry, - .task-chat-tool-group, - .task-chat-thinking { + .task-chat-tool-group { padding: var(--space-sm); } + .task-chat-thinking { + padding: var(--space-xs); + } + .task-chat-tool-group-summary { align-items: center; flex-direction: row; diff --git a/packages/dashboard/app/components/__tests__/TaskChatTab.test.tsx b/packages/dashboard/app/components/__tests__/TaskChatTab.test.tsx index 551bdfaa71..faa6dd3901 100644 --- a/packages/dashboard/app/components/__tests__/TaskChatTab.test.tsx +++ b/packages/dashboard/app/components/__tests__/TaskChatTab.test.tsx @@ -2775,14 +2775,15 @@ describe("TaskChatTab", () => { const toolSummaryRule = getCssRuleBlock(getCssAfter(css, "FN-7215 aligns task-detail tool-call summaries"), ".task-chat-tool-group-summary"); const toolEntriesRule = getCssRuleBlock(getCssAfter(css, ".task-chat-tool-group-entries {\n gap"), ".task-chat-tool-group-entries"); const toolEntryRule = getCssRuleBlock(css, ".task-chat-tool-entry"); - const thinkingRule = getCssRuleBlock(css, ".task-chat-thinking"); - const thinkingBodyRule = getCssRuleBlock(css, ".task-chat-thinking-body"); + const thinkingBaseRule = getCssRuleBlock(css, ".task-chat-thinking"); + const compactThinkingCss = getCssAfter(css, "FN-8029 keeps collapsed thinking blocks compact"); + const thinkingRule = getCssRuleBlock(compactThinkingCss, ".task-chat-thinking"); + const thinkingSummaryRule = getCssRuleBlock(getCssAfter(css, ".task-chat-thinking {\n border-color"), ".task-chat-thinking-summary"); + const thinkingBodyRule = getCssRuleBlock(getCssAfter(css, ".task-chat-tool-group-entries {\n gap: var(--space-xs);\n padding: 0 var(--space-xs) var(--space-xs);\n}"), ".task-chat-thinking-body"); const toolDetailRule = getCssRuleBlock(getCssAfter(css, ".task-chat-tool-detail {"), ".task-chat-tool-detail"); const mobileCss = getCssAfter(css, "@media (max-width: 768px)"); - const mobileBlockPaddingCss = getCssAfter(mobileCss, ".task-chat-entry,\n .task-chat-tool-group,\n .task-chat-thinking"); - const mobileEntryRule = getCssRuleBlock(mobileBlockPaddingCss, ".task-chat-entry"); - const mobileToolGroupRule = getCssRuleBlock(mobileBlockPaddingCss, ".task-chat-tool-group"); - const mobileThinkingRule = getCssRuleBlock(mobileBlockPaddingCss, ".task-chat-thinking"); + const mobileStandardBlockRule = getCssRuleBlock(mobileCss, ".task-chat-entry,\n .task-chat-tool-group"); + const mobileThinkingRule = getCssRuleBlock(getCssAfter(mobileCss, ".task-chat-thinking {\n padding"), ".task-chat-thinking"); const mobileToolEntryRule = getCssRuleBlock(mobileCss, ".task-chat-tool-entry"); expect(entryRule).toContain("box-sizing: border-box"); @@ -2790,20 +2791,21 @@ describe("TaskChatTab", () => { expect(userRule).not.toContain("padding"); expect(toolGroupRule).toContain("box-sizing: border-box"); expect(toolGroupRule).toContain("padding: var(--space-md)"); - expect(thinkingRule).toContain("box-sizing: border-box"); - expect(thinkingRule).toContain("padding: var(--space-md)"); + expect(thinkingBaseRule).toContain("box-sizing: border-box"); + expect(thinkingRule).toContain("padding: var(--space-sm)"); + expect(thinkingRule).not.toContain("padding: var(--space-md)"); + expect(thinkingSummaryRule).toContain("padding: var(--space-xs)"); expect(toolSummaryRule).toContain("padding: var(--space-xs)"); expect(toolEntriesRule).toContain("padding: 0 var(--space-xs) var(--space-xs)"); - expect(thinkingBodyRule).toContain("padding: 0 var(--space-md) var(--space-md)"); + expect(thinkingBodyRule).toContain("padding: 0 var(--space-sm) var(--space-sm)"); expect(toolEntryRule).toContain("box-sizing: border-box"); expect(toolEntryRule).toContain("padding: var(--space-sm)"); expect(toolDetailRule).toContain("box-sizing: border-box"); expect(toolDetailRule).toContain("padding: var(--space-xs)"); - expect(mobileEntryRule).toContain("padding: var(--space-sm)"); - expect(mobileToolGroupRule).toContain("padding: var(--space-sm)"); - expect(mobileThinkingRule).toContain("padding: var(--space-sm)"); + expect(mobileStandardBlockRule).toContain("padding: var(--space-sm)"); + expect(mobileThinkingRule).toContain("padding: var(--space-xs)"); expect(mobileToolEntryRule).toContain("padding: var(--space-xs)"); - for (const rule of [entryRule, toolGroupRule, toolEntryRule, thinkingRule, toolDetailRule, mobileEntryRule]) { + for (const rule of [entryRule, toolGroupRule, toolEntryRule, thinkingBaseRule, thinkingRule, thinkingSummaryRule, toolDetailRule, mobileStandardBlockRule, mobileThinkingRule]) { expect(rule).not.toContain("px"); expect(rule).not.toContain("#"); }