mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-12 04:15:25 +00:00
enh: text fade in effect
This commit is contained in:
parent
dcb1c0a146
commit
853cf82ed8
6 changed files with 45 additions and 3 deletions
|
|
@ -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) => {
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue