Move LoadingGoose indicator inline with conversation flow

- Removed fixed positioning (absolute bottom-1 left-4) for LoadingGoose
- Added inline LoadingGoose below messages within ScrollArea for conversation flow
- LoadingGoose now appears below the most recent message instead of as overlay
- Separated loading states: chatState/compacting inline, loadingChat separate
- Added proper padding (px-6 py-2) to match message spacing
- LoadingGoose scrolls naturally with conversation content
- Creates more integrated, conversational loading experience
This commit is contained in:
spencrmartin
2025-11-12 12:00:28 -05:00
parent 71f880ee4e
commit 52ebf9683b
+24 -16
View File
@@ -494,6 +494,20 @@ function BaseChatContent({
</>
)}
{/* Inline loading indicator below messages */}
{(chatState !== ChatState.Idle || isCompacting) && (
<div className="px-6 py-2">
<LoadingGoose
message={
isCompacting
? 'goose is compacting the conversation...'
: undefined
}
chatState={chatState}
/>
</div>
)}
<div className="block h-8" />
</>
) : !recipeConfig && showPopularTopics ? (
@@ -502,25 +516,19 @@ function BaseChatContent({
) : null /* Show nothing when messages.length === 0 && suppressEmptyState === true */
}
{/* Loading indicator for initial chat loading */}
{loadingChat && (
<div className="px-6 py-4">
<LoadingGoose
message="loading conversation..."
chatState={ChatState.Idle}
/>
</div>
)}
{/* Custom content after messages */}
{renderAfterMessages && renderAfterMessages()}
</ScrollArea>
{/* Fixed loading indicator at bottom left of chat container */}
{(chatState !== ChatState.Idle || loadingChat || isCompacting) && (
<div className="absolute bottom-1 left-4 z-20 pointer-events-none">
<LoadingGoose
message={
loadingChat
? 'loading conversation...'
: isCompacting
? 'goose is compacting the conversation...'
: undefined
}
chatState={chatState}
/>
</div>
)}
</div>
<div