From 61afd87113643ee8673f1dd175facb090857ce7e Mon Sep 17 00:00:00 2001 From: skkim Date: Sat, 10 Jan 2026 04:06:18 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20chat=20assistant=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=9D=B4=EB=A0=A5=EC=84=9C=20height=20=EC=A1=B0?= =?UTF-8?q?=EC=A0=88,=20=EC=9E=85=EB=A0=A5=EC=B0=BD=20=EC=A1=B0=EC=A0=88(?= =?UTF-8?q?=EC=A4=84=EB=B0=94=EA=BF=88=20=EB=B3=B4=EC=9D=B4=EB=8F=84?= =?UTF-8?q?=EB=A1=9D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/app/editor/page.tsx | 36 ++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/editor/page.tsx b/frontend/src/app/editor/page.tsx index 766fc1b..64a1dee 100644 --- a/frontend/src/app/editor/page.tsx +++ b/frontend/src/app/editor/page.tsx @@ -155,6 +155,7 @@ const EditorPage = () => { return defaultResumeSummary; }); const listRef = useRef(null); + const chatInputRef = useRef(null); useEffect(() => { if (typeof window === "undefined") return; @@ -240,6 +241,9 @@ const EditorPage = () => { setMessages((prev) => [...prev, userMessage, typingMessage]); setDraftMessage(""); + if (chatInputRef.current) { + chatInputRef.current.style.height = "auto"; + } // 첨부 표시를 즉시 비워 UI 칩을 빠르게 숨기고, 이미 조합한 메시지에는 포함된 상태를 유지합니다. setAttachments([]); @@ -307,6 +311,17 @@ const EditorPage = () => { } }; + useEffect(() => { + if (chatInputRef.current) { + resizeChatInput(chatInputRef.current); + } + }, []); + + const resizeChatInput = (target: HTMLTextAreaElement) => { + target.style.height = "auto"; + target.style.height = `${Math.min(target.scrollHeight, 240)}px`; + }; + return (
@@ -317,6 +332,7 @@ const EditorPage = () => { { // setAttachments((prev) => { // const exists = prev.find((p) => p.id === item.id); @@ -428,12 +444,16 @@ const EditorPage = () => {
- setDraftMessage(event.target.value)} + onChange={(event) => { + setDraftMessage(event.target.value); + resizeChatInput(event.target); + }} placeholder="입력하세요." - className="flex-1 border-0 bg-transparent text-sm focus:outline-none" + className="flex-1 resize-none border-0 bg-transparent py-1 text-sm leading-5 focus:outline-none" onCompositionStart={() => setIsComposing(true)} onCompositionEnd={() => setIsComposing(false)} onKeyDown={(event) => { @@ -441,6 +461,14 @@ const EditorPage = () => { if (event.key === "Enter" && !event.shiftKey) { event.preventDefault(); handleSendMessage(); + return; + } + if (event.key === "Enter" && event.shiftKey) { + requestAnimationFrame(() => { + if (event.currentTarget) { + resizeChatInput(event.currentTarget); + } + }); } }} />