enh: text fade in effect

This commit is contained in:
Timothy Jaeryang Baek 2025-07-18 16:38:43 +04:00
parent dcb1c0a146
commit 853cf82ed8
6 changed files with 45 additions and 3 deletions

View file

@ -20,6 +20,7 @@
export let history; export let history;
export let selectedModels = []; export let selectedModels = [];
export let done = true;
export let model = null; export let model = null;
export let sources = null; export let sources = null;
@ -133,6 +134,7 @@
{model} {model}
{save} {save}
{preview} {preview}
{done}
sourceIds={(sources ?? []).reduce((acc, s) => { sourceIds={(sources ?? []).reduce((acc, s) => {
let ids = []; let ids = [];
s.document.forEach((document, index) => { s.document.forEach((document, index) => {

View file

@ -10,6 +10,7 @@
export let id = ''; export let id = '';
export let content; export let content;
export let done = true;
export let model = null; export let model = null;
export let save = false; export let save = false;
export let preview = false; export let preview = false;
@ -47,6 +48,7 @@
<MarkdownTokens <MarkdownTokens
{tokens} {tokens}
{id} {id}
{done}
{save} {save}
{preview} {preview}
{onTaskClick} {onTaskClick}

View file

@ -14,8 +14,10 @@
import KatexRenderer from './KatexRenderer.svelte'; import KatexRenderer from './KatexRenderer.svelte';
import Source from './Source.svelte'; import Source from './Source.svelte';
import HtmlToken from './HTMLToken.svelte'; import HtmlToken from './HTMLToken.svelte';
import TextToken from './MarkdownInlineTokens/TextToken.svelte';
export let id: string; export let id: string;
export let done = true;
export let tokens: Token[]; export let tokens: Token[];
export let onSourceClick: Function = () => {}; export let onSourceClick: Function = () => {};
</script> </script>
@ -66,6 +68,6 @@
onload="this.style.height=(this.contentWindow.document.body.scrollHeight+20)+'px';" onload="this.style.height=(this.contentWindow.document.body.scrollHeight+20)+'px';"
></iframe> ></iframe>
{:else if token.type === 'text'} {:else if token.type === 'text'}
{token.raw} <TextToken {token} {done} />
{/if} {/if}
{/each} {/each}

View file

@ -0,0 +1,19 @@
<script lang="ts">
import { fade } from 'svelte/transition';
export let token;
export let done = true;
let texts = [];
$: texts = (token?.raw ?? '').split(' ');
</script>
{#if done}
{token?.raw}
{:else}
{#each texts as text}
<span class="" transition:fade>
{text}
</span>
{/each}
{/if}

View file

@ -28,6 +28,8 @@
export let top = true; export let top = true;
export let attributes = {}; export let attributes = {};
export let done = true;
export let save = false; export let save = false;
export let preview = false; export let preview = false;
@ -85,7 +87,12 @@
<hr class=" border-gray-100 dark:border-gray-850" /> <hr class=" border-gray-100 dark:border-gray-850" />
{:else if token.type === 'heading'} {:else if token.type === 'heading'}
<svelte:element this={headerComponent(token.depth)} dir="auto"> <svelte:element this={headerComponent(token.depth)} dir="auto">
<MarkdownInlineTokens id={`${id}-${tokenIdx}-h`} tokens={token.tokens} {onSourceClick} /> <MarkdownInlineTokens
id={`${id}-${tokenIdx}-h`}
tokens={token.tokens}
{done}
{onSourceClick}
/>
</svelte:element> </svelte:element>
{:else if token.type === 'code'} {:else if token.type === 'code'}
{#if token.raw.includes('```')} {#if token.raw.includes('```')}
@ -132,6 +139,7 @@
<MarkdownInlineTokens <MarkdownInlineTokens
id={`${id}-${tokenIdx}-header-${headerIdx}`} id={`${id}-${tokenIdx}-header-${headerIdx}`}
tokens={header.tokens} tokens={header.tokens}
{done}
{onSourceClick} {onSourceClick}
/> />
</div> </div>
@ -152,6 +160,7 @@
<MarkdownInlineTokens <MarkdownInlineTokens
id={`${id}-${tokenIdx}-row-${rowIdx}-${cellIdx}`} id={`${id}-${tokenIdx}-row-${rowIdx}-${cellIdx}`}
tokens={cell.tokens} tokens={cell.tokens}
{done}
{onSourceClick} {onSourceClick}
/> />
</div> </div>
@ -295,6 +304,7 @@
<MarkdownInlineTokens <MarkdownInlineTokens
id={`${id}-${tokenIdx}-p`} id={`${id}-${tokenIdx}-p`}
tokens={token.tokens ?? []} tokens={token.tokens ?? []}
{done}
{onSourceClick} {onSourceClick}
/> />
</p> </p>
@ -302,7 +312,12 @@
{#if top} {#if top}
<p> <p>
{#if token.tokens} {#if token.tokens}
<MarkdownInlineTokens id={`${id}-${tokenIdx}-t`} tokens={token.tokens} {onSourceClick} /> <MarkdownInlineTokens
id={`${id}-${tokenIdx}-t`}
tokens={token.tokens}
{done}
{onSourceClick}
/>
{:else} {:else}
{unescapeHtml(token.text)} {unescapeHtml(token.text)}
{/if} {/if}
@ -311,6 +326,7 @@
<MarkdownInlineTokens <MarkdownInlineTokens
id={`${id}-${tokenIdx}-p`} id={`${id}-${tokenIdx}-p`}
tokens={token.tokens ?? []} tokens={token.tokens ?? []}
{done}
{onSourceClick} {onSourceClick}
/> />
{:else} {:else}

View file

@ -804,6 +804,7 @@
floatingButtons={message?.done && !readOnly} floatingButtons={message?.done && !readOnly}
save={!readOnly} save={!readOnly}
preview={!readOnly} preview={!readOnly}
done={message?.done ?? false}
{model} {model}
onTaskClick={async (e) => { onTaskClick={async (e) => {
console.log(e); console.log(e);