From 8b7af65265b5773fd7ab5f87a265a28f380b4d8f Mon Sep 17 00:00:00 2001
From: Dustin Healy <54083382+dustinhealy@users.noreply.github.com>
Date: Tue, 25 Nov 2025 14:02:52 -0800
Subject: [PATCH] =?UTF-8?q?=F0=9F=AA=84=20style:=20Improved=20Input=20Coll?=
=?UTF-8?q?apse=20UI=20(#10659)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat: shift collapse chevron inside ChatForm input area
* feat: add soft gradient on bottom of collapsed text input so there isn't a hard cut off when text overflows
* feat: add better scroll bar behavior for main chat input
* fix: smooth out purple gradient for temporary chats
* feat: better colors for gradient
* feat: use blur instead of colors
* chore: address copilot comments
---
client/src/components/Chat/Input/ChatForm.tsx | 73 +++++++++++--------
client/src/style.css | 20 +++++
2 files changed, 63 insertions(+), 30 deletions(-)
diff --git a/client/src/components/Chat/Input/ChatForm.tsx b/client/src/components/Chat/Input/ChatForm.tsx
index 022cddd156..edd12bd3ac 100644
--- a/client/src/components/Chat/Input/ChatForm.tsx
+++ b/client/src/components/Chat/Input/ChatForm.tsx
@@ -260,37 +260,50 @@ const ChatForm = memo(({ index = 0 }: { index?: number }) => {
{endpoint && (
-
{
- ref(e);
- (textAreaRef as React.MutableRefObject).current = e;
- }}
- disabled={disableInputs || isNotAppendable}
- onPaste={handlePaste}
- onKeyDown={handleKeyDown}
- onKeyUp={handleKeyUp}
- onCompositionStart={handleCompositionStart}
- onCompositionEnd={handleCompositionEnd}
- id={mainTextareaId}
- tabIndex={0}
- data-testid="text-input"
- rows={1}
- onFocus={() => {
- handleFocusOrClick();
- setIsTextAreaFocused(true);
- }}
- onBlur={setIsTextAreaFocused.bind(null, false)}
- aria-label={localize('com_ui_message_input')}
- onClick={handleFocusOrClick}
- style={{ height: 44, overflowY: 'auto' }}
- className={cn(
- baseClasses,
- removeFocusRings,
- 'transition-[max-height] duration-200 disabled:cursor-not-allowed',
+
+
{
+ ref(e);
+ (textAreaRef as React.MutableRefObject).current =
+ e;
+ }}
+ disabled={disableInputs || isNotAppendable}
+ onPaste={handlePaste}
+ onKeyDown={handleKeyDown}
+ onKeyUp={handleKeyUp}
+ onCompositionStart={handleCompositionStart}
+ onCompositionEnd={handleCompositionEnd}
+ id={mainTextareaId}
+ tabIndex={0}
+ data-testid="text-input"
+ rows={1}
+ onFocus={() => {
+ handleFocusOrClick();
+ setIsTextAreaFocused(true);
+ }}
+ onBlur={setIsTextAreaFocused.bind(null, false)}
+ aria-label={localize('com_ui_message_input')}
+ onClick={handleFocusOrClick}
+ style={{ height: 44, overflowY: 'auto' }}
+ className={cn(
+ baseClasses,
+ removeFocusRings,
+ 'scrollbar-hover transition-[max-height] duration-200 disabled:cursor-not-allowed',
+ )}
+ />
+ {isCollapsed && (
+
)}
- />
-
+
+