summaryrefslogtreecommitdiff
path: root/ui/lib/components
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2025-05-13 18:01:19 -0400
committerOwen Jacobson <owen@grimoire.ca>2025-05-13 21:10:58 -0400
commit361623aaccf08063712500a213548a2756dd13c4 (patch)
tree8583ad5baa28ee65657cd5d454c0ad02f0cf04b8 /ui/lib/components
parent4061919ee5027ace8a592b47cbc0d92dcc8f8614 (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')
-rw-r--r--ui/lib/components/MessageInput.svelte20
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">&raquo;</button>