{#if Object.keys(history?.messages ?? {}).length == 0} { let text = p; if (p.includes('{{CLIPBOARD}}')) { const clipboardText = await navigator.clipboard.readText().catch((err) => { toast.error($i18n.t('Failed to read clipboard contents')); return '{{CLIPBOARD}}'; }); text = p.replaceAll('{{CLIPBOARD}}', clipboardText); } prompt = text; await tick(); const chatInputContainerElement = document.getElementById('chat-input-container'); if (chatInputContainerElement) { prompt = p; chatInputContainerElement.style.height = ''; chatInputContainerElement.style.height = Math.min(chatInputContainerElement.scrollHeight, 200) + 'px'; chatInputContainerElement.focus(); } await tick(); }} /> {:else}
{#key chatId}
{#if messages.at(0)?.parentId !== null} { console.log('visible'); if (!messagesLoading) { loadMoreMessages(); } }} >
Loading...
{/if} {#each messages as message, messageIdx (message.id)} { dispatch('submit', e.detail); }} on:action={async (e) => { if (typeof e.detail === 'string') { await chatActionHandler(chatId, e.detail, message.model, message.id); } else { const { id, event } = e.detail; await chatActionHandler(chatId, id, message.model, message.id, event); } }} on:update={() => { updateChatHistory(); }} on:scroll={() => { if (autoScroll) { const element = document.getElementById('messages-container'); autoScroll = element.scrollHeight - element.scrollTop <= element.clientHeight + 50; setTimeout(() => { scrollToBottom(); }, 100); } }} /> {/each}
{#if bottomPadding}
{/if} {/key}
{/if}