From a822479535dbcebac3f143c36270a25ea2150868 Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 19 May 2026 23:10:30 +0200 Subject: [PATCH] docs(transcription): explain why @mention mirror uses \$state+\$effect The mirror effect on the dropdown's searchQuery looks like it should be \$derived but it cannot be: bind:value on the writes to the same state, so it must remain mutable. Felix #2 on PR #629. Co-Authored-By: Claude Opus 4.7 --- frontend/src/lib/shared/discussion/MentionDropdown.svelte | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/src/lib/shared/discussion/MentionDropdown.svelte b/frontend/src/lib/shared/discussion/MentionDropdown.svelte index 39b115cf..4191879d 100644 --- a/frontend/src/lib/shared/discussion/MentionDropdown.svelte +++ b/frontend/src/lib/shared/discussion/MentionDropdown.svelte @@ -34,6 +34,12 @@ let searchQuery = $state(untrack(() => editorQuery)); let userHasEdited = $state(false); // Mirror the editor's typed text until the user takes ownership. +// +// Why `$state + $effect` (not `$derived`): `searchQuery` is also written by +// `bind:value` on the below, so it needs to be a mutable `$state`. +// A `$derived` would be read-only and would clobber direct user edits on +// every editor keystroke. The `userHasEdited` latch pins ownership once the +// user types into the input. Felix #1 on PR #629. $effect(() => { if (!userHasEdited) { searchQuery = editorQuery;