summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/components/message-nav.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-15 13:32:15 -0600
committerAdam <[email protected]>2026-01-19 10:55:57 -0600
commit1f11a8a6ea46867e2ad199c987bf14696a1b91d8 (patch)
tree64a1a83c5d576a9592229d67815e76359b399a03 /packages/ui/src/components/message-nav.tsx
parentd5ae8e0bef991f2b2ad9766b9ae2f1c903badab3 (diff)
downloadopencode-1f11a8a6ea46867e2ad199c987bf14696a1b91d8.tar.gz
opencode-1f11a8a6ea46867e2ad199c987bf14696a1b91d8.zip
feat(app): improved session layout
Diffstat (limited to 'packages/ui/src/components/message-nav.tsx')
-rw-r--r--packages/ui/src/components/message-nav.tsx24
1 files changed, 19 insertions, 5 deletions
diff --git a/packages/ui/src/components/message-nav.tsx b/packages/ui/src/components/message-nav.tsx
index 7416cfd93..0dd7c42b0 100644
--- a/packages/ui/src/components/message-nav.tsx
+++ b/packages/ui/src/components/message-nav.tsx
@@ -9,9 +9,10 @@ export function MessageNav(
current?: UserMessage
size: "normal" | "compact"
onMessageSelect: (message: UserMessage) => void
+ getLabel?: (message: UserMessage) => string | undefined
},
) {
- const [local, others] = splitProps(props, ["messages", "current", "size", "onMessageSelect"])
+ const [local, others] = splitProps(props, ["messages", "current", "size", "onMessageSelect", "getLabel"])
const content = () => (
<ul role="list" data-component="message-nav" data-size={local.size} {...others}>
@@ -19,23 +20,36 @@ export function MessageNav(
{(message) => {
const handleClick = () => local.onMessageSelect(message)
+ const handleKeyPress = (event: KeyboardEvent) => {
+ if (event.key !== "Enter" && event.key !== " ") return
+ event.preventDefault()
+ local.onMessageSelect(message)
+ }
+
return (
<li data-slot="message-nav-item">
<Switch>
<Match when={local.size === "compact"}>
- <div data-slot="message-nav-tick-button" data-active={message.id === local.current?.id || undefined}>
+ <div
+ data-slot="message-nav-tick-button"
+ data-active={message.id === local.current?.id || undefined}
+ role="button"
+ tabindex={0}
+ onClick={handleClick}
+ onKeyDown={handleKeyPress}
+ >
<div data-slot="message-nav-tick-line" />
</div>
</Match>
<Match when={local.size === "normal"}>
- <button data-slot="message-nav-message-button" onClick={handleClick}>
+ <button data-slot="message-nav-message-button" onClick={handleClick} onKeyDown={handleKeyPress}>
<DiffChanges changes={message.summary?.diffs ?? []} variant="bars" />
<div
data-slot="message-nav-title-preview"
data-active={message.id === local.current?.id || undefined}
>
- <Show when={message.summary?.title} fallback="New message">
- {message.summary?.title}
+ <Show when={local.getLabel?.(message) ?? message.summary?.title} fallback="New message">
+ {local.getLabel?.(message) ?? message.summary?.title}
</Show>
</div>
</button>