summaryrefslogtreecommitdiffhomepage
path: root/src/features/chat/ui/Composer.svelte
blob: 37623406bc34ee77995a1e21271c8e4ce4113a13 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<script lang="ts">
	let { onSend }: { onSend: (text: string) => void } = $props();

	let text = $state("");

	function handleSubmit(): void {
		const trimmed = text.trim();
		if (trimmed.length === 0) return;
		onSend(trimmed);
		text = "";
	}

	function handleKeydown(e: KeyboardEvent): void {
		if (e.key === "Enter" && !e.shiftKey) {
			e.preventDefault();
			handleSubmit();
		}
	}
</script>

<form class="flex gap-2 p-4" onsubmit={(e) => { e.preventDefault(); handleSubmit(); }}>
	<textarea
		class="textarea textarea-bordered flex-1"
		bind:value={text}
		onkeydown={handleKeydown}
		placeholder="Type a message..."
		rows="3"
		aria-label="Message input"
	></textarea>
	<button class="btn btn-primary" type="submit" disabled={text.trim().length === 0}>
		Send
	</button>
</form>