From 97daae9b779e6d85b711f006b6ac9eb90f437ff6 Mon Sep 17 00:00:00 2001 From: Luke Parker <10430890+Hona@users.noreply.github.com> Date: Mon, 24 Aug 2026 20:14:40 +1000 Subject: [PATCH] feat(app): align context search rows with figma (#44654) --- .../src/components/message-part.css | 49 ++++++++++++++++++- .../src/storybook/current-session-fixtures.ts | 2 + .../session-ui/src/tools/tool-renderer.tsx | 20 +++++--- 3 files changed, 61 insertions(+), 10 deletions(-) diff --git a/packages/session-ui/src/components/message-part.css b/packages/session-ui/src/components/message-part.css index c7c6681690d..86a3b8534b9 100644 --- a/packages/session-ui/src/components/message-part.css +++ b/packages/session-ui/src/components/message-part.css @@ -674,14 +674,59 @@ } [data-component="context-tool-group-list"] { - padding: 0; + /* The 28px compact trigger centers a 16px line box, already leaving 6px above this list. */ + padding: 4px 0 0 12px; display: flex; flex-direction: column; - gap: 4px; + /* 16px line boxes with 13px gaps reproduce the design's 29px row pitch for 13px solid rows. */ + gap: 13px; [data-slot="context-tool-group-item"] { min-width: 0; padding: 0; + opacity: 0.8; + + [data-slot="basic-tool-tool-info-structured"] { + gap: 6px; + } + + [data-slot="basic-tool-tool-title"], + [data-slot="basic-tool-tool-subtitle"], + [data-slot="basic-tool-tool-arg"], + [data-slot="context-tool-group-matches"] { + font-family: var(--v2-font-family-sans); + font-size: 13px; + font-weight: 440; + line-height: var(--line-height-compact); + letter-spacing: -0.04px; + } + + [data-slot="basic-tool-tool-subtitle"] { + color: var(--v2-text-text-faint); + } + + [data-slot="context-tool-group-dot"] { + flex-shrink: 0; + width: 6px; + height: 6px; + display: inline-flex; + align-items: center; + justify-content: center; + + &::before { + content: ""; + width: 2.25px; + height: 2.25px; + border-radius: 50%; + background-color: var(--v2-icon-icon-muted); + } + } + + [data-slot="context-tool-group-matches"] { + flex-shrink: 0; + white-space: nowrap; + color: var(--v2-text-text-faint); + } } } diff --git a/packages/session-ui/src/storybook/current-session-fixtures.ts b/packages/session-ui/src/storybook/current-session-fixtures.ts index 11a9610ff4b..f1fe93a01cc 100644 --- a/packages/session-ui/src/storybook/current-session-fixtures.ts +++ b/packages/session-ui/src/storybook/current-session-fixtures.ts @@ -701,6 +701,7 @@ export const inspectAndExplainDocument = document([ args: { pattern: "src/timeline/**/*.{ts,tsx}", path: "packages/session-ui" }, output: "packages/session-ui/src/timeline/projection.ts\npackages/session-ui/src/timeline/session-timeline.tsx\npackages/session-ui/src/timeline/timeline-row.ts", + metadata: { count: 3 }, }), completedTool({ id: "tool_research_grep", @@ -709,6 +710,7 @@ export const inspectAndExplainDocument = document([ args: { pattern: "TimelineRow.key", path: "packages/session-ui/src/timeline", include: "*.ts*" }, output: "packages/session-ui/src/timeline/projection.ts:39\npackages/session-ui/src/timeline/session-timeline.tsx:332", + metadata: { matches: 2 }, }), completedTool({ id: "tool_research_read", diff --git a/packages/session-ui/src/tools/tool-renderer.tsx b/packages/session-ui/src/tools/tool-renderer.tsx index dfa01161420..ac3dcdeecfb 100644 --- a/packages/session-ui/src/tools/tool-renderer.tsx +++ b/packages/session-ui/src/tools/tool-renderer.tsx @@ -492,6 +492,7 @@ export function CurrentContextToolGroup(props: { icon="glasses" status={pending() ? "running" : "completed"} compact + rail={false} allowOpenWhilePending open={props.open} onOpenChange={change} @@ -545,6 +546,10 @@ export function CurrentContextToolGroup(props: { {(arg) => {arg}} + + + {trigger().matches} + @@ -644,23 +649,22 @@ function currentContextToolTrigger(tool: SessionMessageAssistantTool, i18n: Retu ...(typeof input.offset === "number" ? [`offset=${input.offset}`] : []), ...(typeof input.limit === "number" ? [`limit=${input.limit}`] : []), ] - return { title: i18n.t("ui.tool.read"), subtitle: getFilename(path), args } + return { title: i18n.t("ui.tool.read"), subtitle: getFilename(path), args, matches: undefined } } - if (tool.name === "list") return { title: i18n.t("ui.tool.list"), subtitle: displayDirectory(path), args: [] } + if (tool.name === "list") + return { title: i18n.t("ui.tool.list"), subtitle: displayDirectory(path), args: [], matches: undefined } if (tool.name === "glob") return { title: i18n.t("ui.tool.glob"), subtitle: displayDirectory(path), - args: [...(pattern ? [`pattern=${pattern}`] : []), ...(matches ? [matches] : [])], + args: pattern ? [`pattern=${pattern}`] : [], + matches, } return { title: i18n.t("ui.tool.grep"), subtitle: displayDirectory(path), - args: [ - ...(pattern ? [`pattern=${pattern}`] : []), - ...(include ? [`include=${include}`] : []), - ...(matches ? [matches] : []), - ], + args: [...(pattern ? [`pattern=${pattern}`] : []), ...(include ? [`include=${include}`] : [])], + matches, } }