Skip to content

Commit d5835af

Browse files
split message padding into user/assistant-specific fields
Replace generic messagePaddingTop/Bottom with separate controls for user and assistant messages. This enables visual separation by moving blank lines from highlighted user message area to unhighlighted assistant area. Changes: - Split messagePaddingTop/Bottom into user/assistant variants in LayoutConfig - Update default layout: move blank line from user bottom to assistant top - Update dense layout: minimal padding with visual separation preserved - Apply padding to TextPart component (was missing before) Result: Same total spacing but improved visual clarity - blank line between user→assistant messages no longer extends user message background color.
1 parent ccc72cf commit d5835af

4 files changed

Lines changed: 36 additions & 15 deletions

File tree

packages/opencode/src/cli/cmd/tui/context/layout.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ import denseLayoutText from "./layout/dense.jsonc" with { type: "text" }
1212

1313
export type LayoutConfig = {
1414
messageSeparation: number
15-
messagePaddingTop: number
16-
messagePaddingBottom: number
15+
userMessagePaddingTop: number
16+
userMessagePaddingBottom: number
17+
assistantMessagePaddingTop: number
18+
assistantMessagePaddingBottom: number
1719
containerPaddingTop: number
1820
containerPaddingBottom: number
1921
containerGap: number

packages/opencode/src/cli/cmd/tui/context/layout/default.jsonc

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@
66
// Vertical spacing between consecutive messages
77
"messageSeparation": 1,
88

9-
// Padding inside individual message containers
10-
"messagePaddingTop": 1,
11-
"messagePaddingBottom": 1,
9+
// Padding inside user message containers
10+
"userMessagePaddingTop": 1,
11+
"userMessagePaddingBottom": 0,
12+
13+
// Padding inside assistant message containers (tool outputs, text, etc.)
14+
"assistantMessagePaddingTop": 2,
15+
"assistantMessagePaddingBottom": 1,
16+
17+
// Left padding for message text (shared by user and assistant)
1218
"messagePaddingLeft": 2,
1319

1420
// Padding around the entire session container

packages/opencode/src/cli/cmd/tui/context/layout/dense.jsonc

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@
66
// Spacing between messages
77
"messageSeparation": 1,
88

9-
// Minimal padding inside message containers
10-
"messagePaddingTop": 0,
11-
"messagePaddingBottom": 1,
9+
// Minimal padding inside user message containers
10+
"userMessagePaddingTop": 0,
11+
"userMessagePaddingBottom": 0,
12+
13+
// Minimal padding inside assistant message containers
14+
"assistantMessagePaddingTop": 1,
15+
"assistantMessagePaddingBottom": 0,
16+
17+
// Left padding for message text
1218
"messagePaddingLeft": 1,
1319

1420
// Minimal container padding

packages/opencode/src/cli/cmd/tui/routes/session/index.tsx

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -958,8 +958,8 @@ function UserMessage(props: {
958958
setHover(false)
959959
}}
960960
onMouseUp={props.onMouseUp}
961-
paddingTop={ctx.layout().messagePaddingTop}
962-
paddingBottom={ctx.layout().messagePaddingBottom}
961+
paddingTop={ctx.layout().userMessagePaddingTop}
962+
paddingBottom={ctx.layout().userMessagePaddingBottom}
963963
paddingLeft={ctx.layout().messagePaddingLeft}
964964
backgroundColor={theme.backgroundElement}
965965
flexShrink={0}
@@ -1056,8 +1056,8 @@ function AssistantMessage(props: { message: AssistantMessage; parts: Part[]; las
10561056
return (
10571057
<box
10581058
border={["left"]}
1059-
paddingTop={ctx.layout().messagePaddingTop}
1060-
paddingBottom={ctx.layout().messagePaddingBottom}
1059+
paddingTop={ctx.layout().assistantMessagePaddingTop}
1060+
paddingBottom={ctx.layout().assistantMessagePaddingBottom}
10611061
paddingLeft={ctx.layout().messagePaddingLeft}
10621062
marginTop={ctx.layout().messageSeparation}
10631063
backgroundColor={theme.backgroundPanel}
@@ -1130,7 +1130,14 @@ function TextPart(props: { last: boolean; part: TextPart; message: AssistantMess
11301130
const { theme, syntax } = useTheme()
11311131
return (
11321132
<Show when={props.part.text.trim()}>
1133-
<box id={"text-" + props.part.id} paddingLeft={ctx.layout().textIndent} marginTop={ctx.layout().toolMarginTop} flexShrink={0}>
1133+
<box
1134+
id={"text-" + props.part.id}
1135+
paddingLeft={ctx.layout().textIndent}
1136+
paddingTop={ctx.layout().assistantMessagePaddingTop}
1137+
paddingBottom={ctx.layout().assistantMessagePaddingBottom}
1138+
marginTop={ctx.layout().toolMarginTop}
1139+
flexShrink={0}
1140+
>
11341141
<code
11351142
filetype="markdown"
11361143
drawUnstyledText={false}
@@ -1166,8 +1173,8 @@ function ToolPart(props: { last: boolean; part: ToolPart; message: AssistantMess
11661173
container === "block" || permission
11671174
? {
11681175
border: permissionIndex === 0 ? (["left", "right"] as const) : (["left"] as const),
1169-
paddingTop: ctx.layout().messagePaddingTop,
1170-
paddingBottom: ctx.layout().messagePaddingBottom,
1176+
paddingTop: ctx.layout().assistantMessagePaddingTop,
1177+
paddingBottom: ctx.layout().assistantMessagePaddingBottom,
11711178
paddingLeft: ctx.layout().toolIndent,
11721179
marginTop: ctx.layout().toolMarginTop,
11731180
gap: 1,

0 commit comments

Comments
 (0)