From 766be00ded4f61a4e92c0622c15a64514a43adaa Mon Sep 17 00:00:00 2001 From: Shantur Rathore Date: Fri, 12 Dec 2025 12:00:19 +0000 Subject: [PATCH] Make message list bottom-first with append-only timeline --- .../ui/src/components/message-block-list.tsx | 80 +++----- packages/ui/src/components/message-block.tsx | 4 +- .../ui/src/components/message-preview.tsx | 7 +- .../ui/src/components/message-section.tsx | 186 +++++++++++++++--- 4 files changed, 189 insertions(+), 88 deletions(-) diff --git a/packages/ui/src/components/message-block-list.tsx b/packages/ui/src/components/message-block-list.tsx index 74278e38..3db083cc 100644 --- a/packages/ui/src/components/message-block-list.tsx +++ b/packages/ui/src/components/message-block-list.tsx @@ -1,4 +1,4 @@ -import { Index, createEffect, createSignal, type Accessor } from "solid-js" +import { Index, type Accessor } from "solid-js" import VirtualItem from "./virtual-item" import MessageBlock from "./message-block" import type { InstanceMessageStore } from "../stores/message-v2/instance-store" @@ -10,12 +10,10 @@ export function getMessageAnchorId(messageId: string) { const VIRTUAL_ITEM_MARGIN_PX = 800 interface MessageBlockListProps { - instanceId: string sessionId: string store: () => InstanceMessageStore messageIds: () => string[] - messageIndexMap: () => Map lastAssistantIndex: () => number showThinking: () => boolean thinkingDefaultExpanded: () => boolean @@ -27,62 +25,38 @@ interface MessageBlockListProps { onContentRendered?: () => void setBottomSentinel: (element: HTMLDivElement | null) => void suspendMeasurements?: () => boolean - onInitialRenderComplete?: () => void } export default function MessageBlockList(props: MessageBlockListProps) { - const totalMessages = () => props.messageIds().length - let renderedCount = 0 - let initialRenderReported = false - const handleBlockRendered = () => { - if (initialRenderReported) return - renderedCount += 1 - if (renderedCount >= totalMessages() && totalMessages() > 0) { - initialRenderReported = true - renderedCount = 0 - props.onInitialRenderComplete?.() - } - } - - createEffect(() => { - if (props.loading) { - renderedCount = 0 - initialRenderReported = false - } - }) - return ( <> - {(messageId) => { - return ( - !props.loading} - suspendMeasurements={props.suspendMeasurements} - onMeasured={handleBlockRendered} - > - - - ) - }} + {(messageId, index) => ( + !props.loading} + suspendMeasurements={props.suspendMeasurements} + > + + + )}