refac/enh: mention token rendering

This commit is contained in:
Timothy Jaeryang Baek
2025-09-14 18:49:01 -04:00
parent 22e11760a1
commit 098f34f400
7 changed files with 108 additions and 6 deletions
@@ -15,7 +15,8 @@
const select = (index: number) => {
const item = filteredItems[index];
if (item) command({ id: item.id, label: item.name });
// Add the "A:" prefix to the id to indicate it's an assistant model
if (item) command({ id: `A:${item.id}|${item.name}`, label: item.name });
};
const onKeyDown = (event: KeyboardEvent) => {
@@ -5,6 +5,7 @@
import markedExtension from '$lib/utils/marked/extension';
import markedKatexExtension from '$lib/utils/marked/katex-extension';
import { mentionExtension } from '$lib/utils/marked/mention-extension';
import MarkdownTokens from './Markdown/MarkdownTokens.svelte';
@@ -37,6 +38,7 @@
marked.use(markedKatexExtension(options));
marked.use(markedExtension(options));
marked.use({ extensions: [mentionExtension({ triggerChar: '@' })] });
$: (async () => {
if (content) {
@@ -16,6 +16,7 @@
import HtmlToken from './HTMLToken.svelte';
import TextToken from './MarkdownInlineTokens/TextToken.svelte';
import CodespanToken from './MarkdownInlineTokens/CodespanToken.svelte';
import MentionToken from './MarkdownInlineTokens/MentionToken.svelte';
export let id: string;
export let done = true;
@@ -60,6 +61,8 @@
frameborder="0"
onload="this.style.height=(this.contentWindow.document.body.scrollHeight+20)+'px';"
></iframe>
{:else if token.type === 'mention'}
<MentionToken {token} />
{:else if token.type === 'text'}
<TextToken {token} {done} />
{/if}
@@ -0,0 +1,10 @@
<script lang="ts">
import Tooltip from '$lib/components/common/Tooltip.svelte';
import type { Token } from 'marked';
export let token: Token;
</script>
<Tooltip as="span" className="mention" content={token.id} placement="top">
{token.triggerChar}{token.label}
</Tooltip>
+5 -3
View File
@@ -7,10 +7,12 @@
export let elementId = '';
export let as = 'div';
export let className = 'flex';
export let placement = 'top';
export let content = `I'm a tooltip!`;
export let touch = true;
export let className = 'flex';
export let theme = '';
export let offset = [0, 4];
export let allowHTML = true;
@@ -59,8 +61,8 @@
});
</script>
<div bind:this={tooltipElement} class={className}>
<svelte:element this={as} bind:this={tooltipElement} class={className}>
<slot />
</div>
</svelte:element>
<slot name="tooltip"></slot>