|
<script lang="ts"> |
|
import type { Message } from "$lib/types/Message"; |
|
import { snapScrollToBottom } from "$lib/actions/snapScrollToBottom"; |
|
import ScrollToBottomBtn from "$lib/components/ScrollToBottomBtn.svelte"; |
|
import ChatIntroduction from "./ChatIntroduction.svelte"; |
|
import ChatMessage from "./ChatMessage.svelte"; |
|
|
|
export let messages: Message[]; |
|
export let loading: boolean; |
|
export let pending: boolean; |
|
|
|
let chatContainer: HTMLElement; |
|
</script> |
|
|
|
<div class="overflow-y-auto h-full" use:snapScrollToBottom={messages} bind:this={chatContainer}> |
|
<div class="max-w-3xl xl:max-w-4xl mx-auto px-5 pt-6 flex flex-col gap-8 h-full"> |
|
{#each messages as message, i} |
|
<ChatMessage loading={loading && i === messages.length - 1} {message} /> |
|
{:else} |
|
<ChatIntroduction on:message /> |
|
{/each} |
|
{#if pending} |
|
<ChatMessage message={{ from: "assistant", content: "" }} /> |
|
{/if} |
|
<div class="h-32 flex-none" /> |
|
</div> |
|
<ScrollToBottomBtn class="bottom-10 right-12" scrollNode={chatContainer} /> |
|
</div> |
|
|