diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index d0c291b8569..20e143cd120 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -14,6 +14,7 @@ import { } from "solid-js" import { createStore, produce } from "solid-js/store" import { createFocusSignal } from "@solid-primitives/active-element" +import { createMediaQuery } from "@solid-primitives/media" import { useLocal } from "@/context/local" import { useFile, type FileSelection } from "@/context/file" import { @@ -130,6 +131,11 @@ export const PromptInput: Component = (props) => { const providers = useProviders() const command = useCommand() const permission = usePermission() + const isTouchDevice = createMemo(() => { + const isCoarsePointer = window.matchMedia("(pointer: coarse)").matches + const hasTouchSupport = "ontouchstart" in window || navigator.maxTouchPoints > 0 + return isCoarsePointer || hasTouchSupport + }) const language = useLanguage() let editorRef!: HTMLDivElement let fileInputRef!: HTMLInputElement @@ -1055,6 +1061,11 @@ export const PromptInput: Component = (props) => { // Note: Shift+Enter is handled earlier, before IME check if (event.key === "Enter" && !event.shiftKey) { + if (isTouchDevice()) { + addPart({ type: "text", content: "\n", start: 0, end: 0 }) + event.preventDefault() + return + } handleSubmit(event) } if (event.key === "Escape") {