session-message-rail.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { UserMessage } from "@opencode-ai/sdk/v2"
  2. import { ComponentProps, Show, splitProps } from "solid-js"
  3. import { MessageNav } from "./message-nav"
  4. import "./session-message-rail.css"
  5. export interface SessionMessageRailProps extends ComponentProps<"div"> {
  6. messages: UserMessage[]
  7. current?: UserMessage
  8. wide?: boolean
  9. onMessageSelect: (message: UserMessage) => void
  10. }
  11. export function SessionMessageRail(props: SessionMessageRailProps) {
  12. const [local, others] = splitProps(props, ["messages", "current", "wide", "onMessageSelect", "class", "classList"])
  13. return (
  14. <Show when={(local.messages?.length ?? 0) > 1}>
  15. <div
  16. {...others}
  17. data-component="session-message-rail"
  18. data-wide={local.wide ? "" : undefined}
  19. classList={{
  20. ...(local.classList ?? {}),
  21. [local.class ?? ""]: !!local.class,
  22. }}
  23. >
  24. <div data-slot="session-message-rail-compact">
  25. <MessageNav
  26. messages={local.messages}
  27. current={local.current}
  28. onMessageSelect={local.onMessageSelect}
  29. size="compact"
  30. />
  31. </div>
  32. <div data-slot="session-message-rail-full">
  33. <MessageNav
  34. messages={local.messages}
  35. current={local.current}
  36. onMessageSelect={local.onMessageSelect}
  37. size={local.wide ? "normal" : "compact"}
  38. />
  39. </div>
  40. </div>
  41. </Show>
  42. )
  43. }