FN-8029: compact task live-log thinking blocks
Make task live-log thinking blocks more compact while retaining readable expanded reasoning. - Reduce desktop and mobile thinking container padding. - Tighten thinking summaries and bodies with tokenized spacing. - Update CSS regression assertions for compact thinking blocks. Files changed: packages/dashboard/app/components/TaskChatTab.css | 34 ++++++++++++++++------ .../app/components/__tests__/TaskChatTab.test.tsx | 28 +++++++++--------- 2 files changed, 40 insertions(+), 22 deletions(-) Fusion-Task-Id: FN-8029 Fusion-Task-Lineage: fd9a9443-3a01-48ce-b965-227104404a79 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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("#");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user