| ... | ... | @@ -1159,6 +1159,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) |
| 1159 | 1159 | isSendBusy || |
| 1160 | 1160 | isConnecting || |
| 1161 | 1161 | projectSelectionRequired || |
| 1162 | environmentUnavailable !== null || |
| 1162 | 1163 | !composerSendState.hasSendableContent; |
| 1163 | 1164 | const collapsedComposerPrimaryActionLabel = "Send message"; |
| 1164 | 1165 | const showMobilePendingAnswerActions = |
| ... | ... | @@ -1697,7 +1698,9 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) |
| 1697 | 1698 | |
| 1698 | 1699 | const shouldBlurMobileComposerOnSubmit = useCallback(() => { |
| 1699 | 1700 | if (!isMobileViewport) return false; |
| 1700 | | if (isSendBusy || isConnecting || phase === "running") return false; |
| 1701 | if (isSendBusy || isConnecting || environmentUnavailable !== null || phase === "running") { |
| 1702 | return false; |
| 1703 | } |
| 1701 | 1704 | if (activePendingProgress) { |
| 1702 | 1705 | return activePendingProgress.isLastQuestion && Boolean(activePendingResolvedAnswers); |
| 1703 | 1706 | } |
| ... | ... | @@ -1706,6 +1709,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) |
| 1706 | 1709 | activePendingProgress, |
| 1707 | 1710 | activePendingResolvedAnswers, |
| 1708 | 1711 | composerSendState.hasSendableContent, |
| 1712 | environmentUnavailable, |
| 1709 | 1713 | isConnecting, |
| 1710 | 1714 | isMobileViewport, |
| 1711 | 1715 | isSendBusy, |
| ... | ... | @@ -1892,8 +1896,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) |
| 1892 | 1896 | isConnecting || |
| 1893 | 1897 | isComposerApprovalState || |
| 1894 | 1898 | pendingUserInputs.length > 0 || |
| 1895 | | projectSelectionRequired || |
| 1896 | | (environmentUnavailable !== null && activePendingProgress === null) |
| 1899 | projectSelectionRequired |
| 1897 | 1900 | ) { |
| 1898 | 1901 | return false; |
| 1899 | 1902 | } |
| ... | ... | @@ -2101,8 +2104,6 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) |
| 2101 | 2104 | isComposerApprovalState, |
| 2102 | 2105 | pendingUserInputs.length, |
| 2103 | 2106 | projectSelectionRequired, |
| 2104 | | environmentUnavailable, |
| 2105 | | activePendingProgress, |
| 2106 | 2107 | applyPromptReplacement, |
| 2107 | 2108 | isComposerModelPickerOpen, |
| 2108 | 2109 | readComposerSnapshot, |
| ... | ... | @@ -2144,7 +2145,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) |
| 2144 | 2145 | className={cn( |
| 2145 | 2146 | "chat-composer-glass rounded-[20px] border transition-[background-color] duration-200 has-focus-visible:border-ring/45", |
| 2146 | 2147 | isDragOverComposer ? "border-primary/70 bg-accent/45" : "border-border", |
| 2147 | | environmentUnavailable || projectSelectionRequired ? "opacity-75" : null, |
| 2148 | projectSelectionRequired ? "opacity-75" : null, |
| 2148 | 2149 | composerProviderState.composerSurfaceClassName, |
| 2149 | 2150 | )} |
| 2150 | 2151 | onFocusCapture={(event) => { |
| ... | ... | @@ -2502,12 +2503,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) |
| 2502 | 2503 | ? "Ask for follow-up changes or attach images" |
| 2503 | 2504 | : "Ask anything, @tag files/folders, $use skills, or / for commands" |
| 2504 | 2505 | } |
| 2505 | | disabled={ |
| 2506 | | isConnecting || |
| 2507 | | isComposerApprovalState || |
| 2508 | | projectSelectionRequired || |
| 2509 | | (environmentUnavailable !== null && activePendingProgress === null) |
| 2510 | | } |
| 2506 | disabled={isConnecting || isComposerApprovalState || projectSelectionRequired} |
| 2511 | 2507 | /> |
| 2512 | 2508 | {showMobilePendingAnswerActions ? ( |
| 2513 | 2509 | <div |