From 40d97dcd4577f99cb3c586dc8dff5d9ca8c95e9d Mon Sep 17 00:00:00 2001 From: juki Date: Thu, 23 Apr 2026 04:21:49 +0800 Subject: [PATCH] feat(desktop): expand prompt composer inline Signed-off-by: juki --- apps/desktop/src/renderer/src/App.tsx | 59 +++++---- .../src/components/chat/PromptInput.tsx | 115 ++++++++++++++++-- apps/desktop/src/renderer/src/store.ts | 7 ++ packages/i18n/src/locales/en.json | 2 + packages/i18n/src/locales/pt-BR.json | 2 + packages/i18n/src/locales/zh-CN.json | 2 + 6 files changed, 157 insertions(+), 30 deletions(-) diff --git a/apps/desktop/src/renderer/src/App.tsx b/apps/desktop/src/renderer/src/App.tsx index cf150087..85856da5 100644 --- a/apps/desktop/src/renderer/src/App.tsx +++ b/apps/desktop/src/renderer/src/App.tsx @@ -44,6 +44,8 @@ export function App() { const sidebarCollapsed = useCodesignStore((s) => s.sidebarCollapsed); const activeReportLocalId = useCodesignStore((s) => s.activeReportLocalId); const closeReportDialog = useCodesignStore((s) => s.closeReportDialog); + const isPromptExpanded = useCodesignStore((s) => s.isPromptExpanded); + const setPromptExpanded = useCodesignStore((s) => s.setPromptExpanded); const [prompt, setPrompt] = useState(''); const [sidebarWidth, setSidebarWidth] = useState(() => @@ -84,27 +86,32 @@ export function App() { if (view === 'workspace') setWorkspaceMounted(true); }, [view]); - const onResizeStart = useCallback((e: React.MouseEvent) => { - e.preventDefault(); - setIsResizing(true); - - const onMove = (ev: MouseEvent) => { + const onResizeStart = useCallback( + (e: React.MouseEvent) => { + e.preventDefault(); const maxW = Math.round(window.innerWidth * 0.55); - const clamped = Math.min(Math.max(ev.clientX, 280), maxW); - setSidebarWidth(clamped); - }; - const onUp = () => { - setIsResizing(false); - document.removeEventListener('mousemove', onMove); - document.removeEventListener('mouseup', onUp); - document.body.style.cursor = ''; - document.body.style.userSelect = ''; - }; - document.body.style.cursor = 'col-resize'; - document.body.style.userSelect = 'none'; - document.addEventListener('mousemove', onMove); - document.addEventListener('mouseup', onUp); - }, []); + setSidebarWidth(Math.min(Math.max(e.clientX, 280), maxW)); + setPromptExpanded(false); + setIsResizing(true); + + const onMove = (ev: MouseEvent) => { + const clamped = Math.min(Math.max(ev.clientX, 280), Math.round(window.innerWidth * 0.55)); + setSidebarWidth(clamped); + }; + const onUp = () => { + setIsResizing(false); + document.removeEventListener('mousemove', onMove); + document.removeEventListener('mouseup', onUp); + document.body.style.cursor = ''; + document.body.style.userSelect = ''; + }; + document.body.style.cursor = 'col-resize'; + document.body.style.userSelect = 'none'; + document.addEventListener('mousemove', onMove); + document.addEventListener('mouseup', onUp); + }, + [setPromptExpanded], + ); useEffect(() => { async function bootstrap(): Promise { @@ -236,7 +243,17 @@ export function App() {