diff options
| author | Adam <[email protected]> | 2026-01-15 13:32:15 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2026-01-19 10:55:57 -0600 |
| commit | 1f11a8a6ea46867e2ad199c987bf14696a1b91d8 (patch) | |
| tree | 64a1a83c5d576a9592229d67815e76359b399a03 /packages/ui/src/components/message-nav.tsx | |
| parent | d5ae8e0bef991f2b2ad9766b9ae2f1c903badab3 (diff) | |
| download | opencode-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.tsx | 24 |
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> |
