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 | |
| 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.
| -rw-r--r-- | ui/lib/components/MessageInput.svelte | 20 | ||||
| -rw-r--r-- | ui/styles/forms.css | 4 |
2 files changed, 20 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> diff --git a/ui/styles/forms.css b/ui/styles/forms.css index 59dda30..907f1bf 100644 --- a/ui/styles/forms.css +++ b/ui/styles/forms.css @@ -26,3 +26,7 @@ form.form > button { [contenteditable]:empty { color: var(--light-text); } + +.disabled { + color: var(--light-text); +} |
