From 3d0a5799ff1a029b9bf550c43c730fe7252fa90b Mon Sep 17 00:00:00 2001 From: sheetEasy AI Team Date: Fri, 27 Jun 2025 16:22:58 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=AC=ED=94=84=ED=8A=B8=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EC=B0=BD=EC=9D=84=20Univer=20=EC=9C=84=20?= =?UTF-8?q?=EC=98=A4=EB=B2=84=EB=A0=88=EC=9D=B4=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EB=B0=8F=20=EA=B8=B0=EB=B3=B8=EC=A0=81=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=ED=95=AD=EC=83=81=20=ED=91=9C=EC=8B=9C=EB=90=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EA=B0=9C=EC=84=A0\n\n-=20=ED=94=84?= =?UTF-8?q?=EB=A1=AC=ED=94=84=ED=8A=B8=20=EC=9E=85=EB=A0=A5=EC=B0=BD?= =?UTF-8?q?=EC=9D=84=20Univer=20=EC=8B=9C=ED=8A=B8=20=EC=9C=84=EC=97=90=20?= =?UTF-8?q?=EB=B0=98=ED=88=AC=EB=AA=85=20=EC=98=A4=EB=B2=84=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EB=A1=9C=20=EA=B5=AC=ED=98=84\n-=20=EC=9A=B0=ED=95=98?= =?UTF-8?q?=EB=8B=A8=20=ED=94=8C=EB=A1=9C=ED=8C=85=20=EB=B2=84=ED=8A=BC?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=ED=86=A0=EA=B8=80=20=EA=B0=80=EB=8A=A5=20?= =?UTF-8?q?(=EA=B8=B0=EB=B3=B8=EA=B0=92:=20=ED=95=AD=EC=83=81=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C)\n-=20=EC=9E=85=EB=A0=A5=EC=B0=BD=20=EB=94=94?= =?UTF-8?q?=EC=9E=90=EC=9D=B8=EC=9D=84=20=EC=BB=B4=ED=8C=A9=ED=8A=B8?= =?UTF-8?q?=ED=95=98=EA=B2=8C=20=EA=B0=9C=EC=84=A0,=20=EB=B0=98=EC=9D=91?= =?UTF-8?q?=ED=98=95=20=EC=98=A4=EB=B2=84=EB=A0=88=EC=9D=B4=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9\n-=20=EA=B8=B0=EC=A1=B4=20=ED=95=98=EB=8B=A8=20?= =?UTF-8?q?=EA=B3=A0=EC=A0=95=20=EB=B0=A9=EC=8B=9D=20=EC=A0=9C=EA=B1=B0,?= =?UTF-8?q?=20Univer=20=EC=A0=84=EC=B2=B4=20=ED=99=94=EB=A9=B4=20=ED=99=9C?= =?UTF-8?q?=EC=9A=A9\n-=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EA=B2=BD=ED=97=98?= =?UTF-8?q?=20=EB=B0=8F=20=EC=A0=91=EA=B7=BC=EC=84=B1=20=ED=96=A5=EC=83=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/sheet/EditSheetViewer.tsx | 478 +++++++++++++---------- src/components/sheet/PromptInput.tsx | 55 ++- 2 files changed, 291 insertions(+), 242 deletions(-) diff --git a/src/components/sheet/EditSheetViewer.tsx b/src/components/sheet/EditSheetViewer.tsx index abceae0..088684c 100644 --- a/src/components/sheet/EditSheetViewer.tsx +++ b/src/components/sheet/EditSheetViewer.tsx @@ -332,6 +332,7 @@ const TestSheetViewer: React.FC = () => { const [isProcessing, setIsProcessing] = useState(false); const [currentFile, setCurrentFile] = useState(null); const [prompt, setPrompt] = useState(""); + const [showPromptInput, setShowPromptInput] = useState(true); const appStore = useAppStore(); @@ -862,241 +863,290 @@ const TestSheetViewer: React.FC = () => { }, []); return ( -
- {/* 헀더 */} -
-
- {currentFile && ( - - πŸ“„ {currentFile.name} - - )} - +
+ {/* 헀더 - App.tsx와 λ™μΌν•œ μŠ€νƒ€μΌ 적용 */} +
+
+
+
+ {currentFile && ( + + πŸ“„ {currentFile.name} + + )} +
+
+ +
+
-
+ - {/* Univer μ»¨ν…Œμ΄λ„ˆ (항상 λ Œλ”λ§) */} -
- - {/* Univer와 μž…λ ₯μ°½ 사이 μ—¬λ°± */} -
- - {/* ν”„λ‘¬ν”„νŠΈ μž…λ ₯μ°½ - Univer ν•˜λ‹¨μ— μ΄μ–΄μ„œ */} - setPrompt(e.target.value)} - onExecute={handlePromptExecute} - onHistoryToggle={handleHistoryToggle} - historyCount={history.length} - disabled={isProcessing} - /> - - {/* νžˆμŠ€ν† λ¦¬ νŒ¨λ„ - 파일이 μ—…λ‘œλ“œλœ ν›„μ—λ§Œ ν‘œμ‹œ */} - {!showUploadOverlay && ( - setIsHistoryOpen(false)} - history={history} - onReapply={handleHistoryReapply} - onClear={handleHistoryClear} - /> - )} - - {/* 파일 μ—…λ‘œλ“œ μ˜€λ²„λ ˆμ΄ - λ ˆμ΄μ–΄ 뢄리 */} - {showUploadOverlay && ( - <> - {/* 1. Univer CE μ˜μ—­λ§Œ 흐리게 ν•˜λŠ” 반투λͺ… λ ˆμ΄μ–΄ */} + {/* 메인 μ½˜ν…μΈ  - App.tsx와 λ™μΌν•œ νŒ¨ν„΄ */} +
+
+ {/* Univer μ»¨ν…Œμ΄λ„ˆ - 전체 ν™”λ©΄ μ‚¬μš© */}
- {/* 2. Univer μ˜μ—­ μ€‘μ•™μ˜ μ—…λ‘œλ“œ UI */} -
-
+ {/* νžˆμŠ€ν† λ¦¬ νŒ¨λ„ - 파일이 μ—…λ‘œλ“œλœ ν›„μ—λ§Œ ν‘œμ‹œ */} + {!showUploadOverlay && ( + setIsHistoryOpen(false)} + history={history} + onReapply={handleHistoryReapply} + onClear={handleHistoryClear} + /> + )} + + {/* 파일 μ—…λ‘œλ“œ μ˜€λ²„λ ˆμ΄ - λ ˆμ΄μ–΄ 뢄리 */} + {showUploadOverlay && ( + <> + {/* 1. Univer CE μ˜μ—­λ§Œ 흐리게 ν•˜λŠ” 반투λͺ… λ ˆμ΄μ–΄ */}
+ + {/* 2. Univer μ˜μ—­ μ€‘μ•™μ˜ μ—…λ‘œλ“œ UI */} +
-
- {/* μ•„μ΄μ½˜ 및 제λͺ© */} -
-
- {isProcessing ? ( - - - - - ) : ( - - - - )} -
-

- {isProcessing - ? "파일 처리 쀑..." - : "Excel νŒŒμΌμ„ μ—…λ‘œλ“œν•˜μ„Έμš”"} -

-

- {isProcessing ? ( - - μž μ‹œλ§Œ κΈ°λ‹€λ €μ£Όμ„Έμš”... - - ) : ( - <> - - .xlsx - {" "} - νŒŒμΌμ„ λ“œλž˜κ·Έ μ•€ λ“œλ‘­ν•˜κ±°λ‚˜ ν΄λ¦­ν•˜μ—¬ μ—…λ‘œλ“œ - - )} -

-
- - {/* λ“œλž˜κ·Έ μ•€ λ“œλ‘­ μ˜μ—­ */} +
-
-
- {isDragOver ? "πŸ“‚" : "πŸ“„"} -
-
-

- {isDragOver - ? "νŒŒμΌμ„ 여기에 λ†“μœΌμ„Έμš”" - : "νŒŒμΌμ„ λ“œλž˜κ·Έν•˜κ±°λ‚˜ ν΄λ¦­ν•˜μ„Έμš”"} +

+ {/* μ•„μ΄μ½˜ 및 제λͺ© */} +
+
+ {isProcessing ? ( + + + + + ) : ( + + + + )} +
+

+ {isProcessing + ? "파일 처리 쀑..." + : "Excel νŒŒμΌμ„ μ—…λ‘œλ“œν•˜μ„Έμš”"} +

+

+ {isProcessing ? ( + + μž μ‹œλ§Œ κΈ°λ‹€λ €μ£Όμ„Έμš”... + + ) : ( + <> + + .xlsx + {" "} + νŒŒμΌμ„ λ“œλž˜κ·Έ μ•€ λ“œλ‘­ν•˜κ±°λ‚˜ ν΄λ¦­ν•˜μ—¬ μ—…λ‘œλ“œ + + )}

-

- μ΅œλŒ€ 50MBκΉŒμ§€ μ—…λ‘œλ“œ κ°€λŠ₯ +

+ + {/* λ“œλž˜κ·Έ μ•€ λ“œλ‘­ μ˜μ—­ */} +
+
+
+ {isDragOver ? "πŸ“‚" : "πŸ“„"} +
+
+

+ {isDragOver + ? "νŒŒμΌμ„ 여기에 λ†“μœΌμ„Έμš”" + : "νŒŒμΌμ„ λ“œλž˜κ·Έν•˜κ±°λ‚˜ ν΄λ¦­ν•˜μ„Έμš”"} +

+

+ μ΅œλŒ€ 50MBκΉŒμ§€ μ—…λ‘œλ“œ κ°€λŠ₯ +

+
+
+
+ + {/* μˆ¨κ²¨μ§„ 파일 μž…λ ₯ */} + + + {/* 지원 ν˜•μ‹ μ•ˆλ‚΄ */} +
+

지원 ν˜•μ‹: Excel (.xlsx)

+

μ΅œλŒ€ 파일 크기: 50MB

+

+ πŸ’‘ λΈŒλΌμš°μ € μ½˜μ†”μ—μ„œ window.__UNIVER_DEBUG__ 둜 디버깅 + κ°€λŠ₯

- - {/* μˆ¨κ²¨μ§„ 파일 μž…λ ₯ */} - - - {/* 지원 ν˜•μ‹ μ•ˆλ‚΄ */} -
-

지원 ν˜•μ‹: Excel (.xlsx)

-

μ΅œλŒ€ 파일 크기: 50MB

-

- πŸ’‘ λΈŒλΌμš°μ € μ½˜μ†”μ—μ„œ window.__UNIVER_DEBUG__ 둜 디버깅 - κ°€λŠ₯ -

-
+ + )} + + {/* ν”„λ‘¬ν”„νŠΈ μž…λ ₯μ°½ - Univer μœ„ μ˜€λ²„λ ˆμ΄ */} + {showPromptInput && ( +
+
+ setPrompt(e.target.value)} + onExecute={handlePromptExecute} + onHistoryToggle={handleHistoryToggle} + historyCount={history.length} + disabled={isProcessing} + /> +
-
- - )} + )} + + {/* AI ν”„λ‘¬ν”„νŠΈ ν† κΈ€ λ²„νŠΌ - ν”Œλ‘œνŒ… */} + {!showUploadOverlay && ( + + )} +
+
); }; diff --git a/src/components/sheet/PromptInput.tsx b/src/components/sheet/PromptInput.tsx index 3af9efd..89066e0 100644 --- a/src/components/sheet/PromptInput.tsx +++ b/src/components/sheet/PromptInput.tsx @@ -1,6 +1,7 @@ import React, { useEffect, useRef, useState } from "react"; import { useAppStore } from "../../stores/useAppStore"; import { aiProcessor } from "../../utils/aiProcessor"; +import { Button } from "../ui/button"; interface PromptInputProps { value: string; @@ -176,45 +177,43 @@ const PromptInput: React.FC = ({ }, [cellAddressToInsert, onChange, setCellAddressToInsert]); return ( -
-
+
+