diff --git a/src/lib/components/HighlightedText.svelte b/src/lib/components/HighlightedText.svelte new file mode 100644 index 0000000..9e0c316 --- /dev/null +++ b/src/lib/components/HighlightedText.svelte @@ -0,0 +1,61 @@ + + + + {#each parts as part, index (index)} + {#if part.isMatch} + {part.text} + {:else} + {part.text} + {/if} + {/each} + diff --git a/src/lib/components/Terminal.svelte b/src/lib/components/Terminal.svelte index d8467ee..2ebf51a 100644 --- a/src/lib/components/Terminal.svelte +++ b/src/lib/components/Terminal.svelte @@ -3,6 +3,7 @@ import { afterUpdate } from "svelte"; import ConversationTabs from "./ConversationTabs.svelte"; import Markdown from "./Markdown.svelte"; + import HighlightedText from "./HighlightedText.svelte"; import { searchState, searchQuery } from "$lib/stores/search"; let terminalElement: HTMLDivElement; @@ -71,13 +72,6 @@ }); } - function highlightText(text: string, query: string): string { - if (!query) return text; - const escapedQuery = query.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); - const regex = new RegExp(`(${escapedQuery})`, "gi"); - return text.replace(regex, '$1'); - } - $: { if (currentSearchQuery && lines.length > 0) { const escapedQuery = currentSearchQuery.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); @@ -134,10 +128,7 @@ {#if line.type === "assistant"} {:else} - - {@html highlightText(line.content, currentSearchQuery)} + {/if} {/each}