Commit f5d4d7541 for llama.cpp
commit f5d4d7541976327ddeca22abb44fb225d3ca9a9d
Author: Aleksander Grygier <aleksander.grygier@gmail.com>
Date: Thu Oct 29 09:15:54 2026 +0100
ui: show submit button when the chat input has content (#31324)
ChatFormActions gated the mic and stop buttons on a `canSubmit` prop that
ChatForm never passed, so it was always false and typing text did not swap
them for the submit button. Use `canSend` instead and also hide the
skip-reasoning button while there is content to send.
Assisted-by: Claude (Opus 5.5 Medium)
diff --git a/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte b/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte
index d78925141..c51ac72a1 100644
--- a/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte
+++ b/tools/ui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte
@@ -20,7 +20,6 @@
interface Props {
canSend?: boolean;
- canSubmit?: boolean;
class?: string;
disabled?: boolean;
isLoading?: boolean;
@@ -37,7 +36,6 @@
let {
canSend = false,
- canSubmit = false,
class: className = '',
disabled = false,
isLoading = false,
@@ -73,7 +71,7 @@
uploadedFiles.some((file) => getFileTypeCategory(file.type) === FileTypeCategory.AUDIO)
);
let shouldShowRecordButton = $derived(
- hasAudioModality && !canSubmit && !hasAudioAttachments && currentConfig.autoMicOnEmpty
+ hasAudioModality && !canSend && !hasAudioAttachments && currentConfig.autoMicOnEmpty
);
let selectorModelRef: ModelsSelector | undefined = $state(undefined);
@@ -176,7 +174,7 @@
{/if}
</div>
- {#if isReasoning}
+ {#if isReasoning && !canSend}
<Button
class="group h-8 w-8 rounded-full p-0 max-md:h-9 max-md:w-9"
onclick={() =>
@@ -193,7 +191,7 @@
</Button>
{/if}
- {#if isLoading && !canSubmit}
+ {#if isLoading && !canSend}
<Button
class="group h-8 w-8 rounded-full p-0 max-md:h-9 max-md:w-9 hover:bg-destructive/10!"
onclick={onStop}