diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2025-05-13 18:01:19 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2025-05-13 21:10:58 -0400 |
| commit | 361623aaccf08063712500a213548a2756dd13c4 (patch) | |
| tree | 8583ad5baa28ee65657cd5d454c0ad02f0cf04b8 /ui/lib/components/MessageInput.svelte | |
| parent | 4061919ee5027ace8a592b47cbc0d92dcc8f8614 (diff) | |
Implement the disabled state:
* Suppress input (including paste) while the input is disabled.
* Style the input to make it visible that it's not accepting input.
Diffstat (limited to 'ui/lib/components/MessageInput.svelte')
| -rw-r--r-- | ui/lib/components/MessageInput.svelte | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/ui/lib/components/MessageInput.svelte b/ui/lib/components/MessageInput.svelte index 71b7b8f..848321d 100644 --- a/ui/lib/components/MessageInput.svelte +++ b/ui/lib/components/MessageInput.svelte @@ -3,8 +3,6 @@ let form = $state(null); let value = $state(''); - // This doesn't seem to work with a contenteditable two-way bound svelte - // thing: let disabled = $state(false); async function onsubmit(event) { @@ -19,21 +17,35 @@ } function onkeydown(event) { + if (disabled) { + event.preventDefault(); + return; + } + let modifier = event.shiftKey || event.altKey || event.ctrlKey || event.metaKey; if (!modifier && event.key === 'Enter') { event.preventDefault(); form?.requestSubmit?.(); } } + + function onpaste(event) { + if (disabled) { + event.preventDefault(); + } + } </script> <form {onsubmit} bind:this={form}> <div contenteditable="plaintext-only" - class="textarea" + class={{ + textarea: true, + disabled + }} bind:innerText={value} {onkeydown} - {disabled} + {onpaste} placeholder="Say something..." ></div> <button type="submit">»</button> |
