Skip to content

Commit 8d9429e

Browse files
committed
Refactor the ChatInput component by removing token count display, eliminating dedicated search and copy buttons, and integrating the edit format selector directly into the input footer
1 parent c275924 commit 8d9429e

10 files changed

Lines changed: 125 additions & 225 deletions

File tree

‎packages/ui/src/assets/icons/command.svg‎

Lines changed: 0 additions & 8 deletions
This file was deleted.

‎packages/ui/src/components/editor/common/Icon/Icon.tsx‎

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@ import ChatGPT from '../../../../assets/icons/openai.svg'
66
import Claude from '../../../../assets/icons/claude.svg'
77
import CodeWebChatLogo from '../../../../assets/icons/code-web-chat-logo.svg'
88
import CodeWebChatText from '../../../../assets/icons/code-web-chat-text.svg'
9-
import Command from '../../../../assets/icons/command.svg'
109
import Copilot from '../../../../assets/icons/copilot.svg'
1110
import CurlyBraces from '../../../../assets/icons/curly-braces.svg'
1211
import GithubCopilot from '../../../../assets/icons/github-copilot.svg'
1312
import DeepSeek from '../../../../assets/icons/deepseek.svg'
1413
import Discord from '../../../../assets/icons/discord.svg'
1514
import Doubao from '../../../../assets/icons/doubao.svg'
16-
import Enter from '../../../../assets/icons/enter.svg'
1715
import Gemini from '../../../../assets/icons/gemini.svg'
1816
import Grok from '../../../../assets/icons/grok.svg'
1917
import HashSign from '../../../../assets/icons/hash-sign.svg'
@@ -41,13 +39,11 @@ export namespace Icon {
4139
| 'CLAUDE'
4240
| 'CODE_WEB_CHAT_LOGO'
4341
| 'CODE_WEB_CHAT_TEXT'
44-
| 'COMMAND'
4542
| 'COPILOT'
4643
| 'CURLY_BRACES'
4744
| 'DEEPSEEK'
4845
| 'DISCORD'
4946
| 'DOUBAO'
50-
| 'ENTER'
5147
| 'GEMINI'
5248
| 'GITHUB_COPILOT'
5349
| 'GROK'
@@ -99,9 +95,6 @@ export const Icon: React.FC<Icon.Props> = ({ variant }) => {
9995
case 'CODE_WEB_CHAT_TEXT':
10096
icon = <CodeWebChatText />
10197
break
102-
case 'COMMAND':
103-
icon = <Command />
104-
break
10598
case 'COPILOT':
10699
icon = <Copilot />
107100
break
@@ -117,9 +110,6 @@ export const Icon: React.FC<Icon.Props> = ({ variant }) => {
117110
case 'DOUBAO':
118111
icon = <Doubao />
119112
break
120-
case 'ENTER':
121-
icon = <Enter />
122-
break
123113
case 'GEMINI':
124114
icon = <Gemini />
125115
break

‎packages/ui/src/components/editor/panel/ChatInput/ChatInput.module.scss‎

Lines changed: 28 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
.container {
2-
--padding: var(--padding-4px) var(--padding-20px) var(--padding-4px)
3-
var(--padding-7px);
2+
--padding: var(--padding-5px) var(--padding-7px);
43
position: relative;
54

65
&__inner {
@@ -20,57 +19,6 @@
2019
border-color: var(--vscode-focusBorder);
2120
}
2221

23-
&__search-button {
24-
display: flex;
25-
position: absolute;
26-
z-index: 1;
27-
top: 0;
28-
right: 0;
29-
padding: var(--padding-1px) var(--padding-3px) var(--padding-5px)
30-
var(--padding-3px);
31-
color: var(--vscode-icon-foreground);
32-
cursor: pointer;
33-
opacity: 0.7;
34-
35-
&::before {
36-
font-size: var(--font-size-13px);
37-
}
38-
39-
&:hover {
40-
opacity: 1;
41-
}
42-
43-
&:first-of-type {
44-
z-index: 2;
45-
}
46-
}
47-
48-
&__copy-button {
49-
display: flex;
50-
position: absolute;
51-
z-index: 1;
52-
top: 18px;
53-
right: 0;
54-
padding: var(--padding-1px) var(--padding-3px) var(--padding-6px)
55-
var(--padding-3px);
56-
color: var(--vscode-icon-foreground);
57-
cursor: pointer;
58-
opacity: 0.8;
59-
60-
&::before {
61-
font-size: var(--font-size-13px);
62-
}
63-
64-
&:hover:enabled {
65-
opacity: 1;
66-
}
67-
68-
&:disabled {
69-
opacity: 0.35;
70-
cursor: default;
71-
}
72-
}
73-
7422
&--disabled {
7523
pointer-events: none;
7624
> * {
@@ -165,7 +113,8 @@
165113
display: flex;
166114
bottom: 0;
167115
right: 0;
168-
padding: var(--padding-6px);
116+
padding: var(--padding-6px) var(--padding-8px) var(--padding-6px)
117+
var(--padding-6px);
169118
justify-content: space-between;
170119
overflow: hidden;
171120

@@ -201,13 +150,27 @@
201150
flex-shrink: 0;
202151
display: flex;
203152
align-items: center;
204-
gap: var(--padding-4px);
153+
gap: var(--padding-8px);
205154
pointer-events: none;
206155

207-
&__count {
208-
font-size: 0.9em;
209-
color: var(--vscode-descriptionForeground);
210-
margin-right: 3px;
156+
&__edit-format {
157+
display: flex;
158+
align-items: center;
159+
gap: var(--padding-6px);
160+
161+
&__button {
162+
font-size: var(--font-size-11px);
163+
opacity: 0.5;
164+
pointer-events: all;
165+
166+
&:hover {
167+
opacity: 1;
168+
}
169+
170+
&--selected {
171+
opacity: 1;
172+
}
173+
}
211174
}
212175

213176
&__button {
@@ -216,26 +179,22 @@
216179
justify-content: center;
217180
gap: 3px;
218181
height: 20px;
219-
padding: 0 4px;
220-
border-radius: 5px;
182+
padding: 0 var(--padding-2px);
183+
border-radius: var(--border-radius-5px);
221184
color: var(--vscode-foreground);
222-
border: 1px solid var(--vscode-commandCenter-inactiveBorder);
223-
font-size: 12px;
224185
pointer-events: all;
225186

226187
> svg {
227188
width: 10px;
228189
fill: var(--vscode-icon-foreground);
229190
}
230191

231-
&:hover:enabled {
232-
background-color: var(--vscode-toolbar-hoverBackground);
233-
border-color: var(--vscode-commandCenter-activeBorder);
192+
&.codicon::before {
193+
font-size: 16px;
234194
}
235195

236-
&__ctrl {
237-
color: var(--vscode-icon-foreground);
238-
letter-spacing: -0.6px;
196+
&:hover:enabled {
197+
background-color: var(--vscode-toolbar-hoverBackground);
239198
}
240199

241200
&:disabled {
@@ -246,14 +205,6 @@
246205
background-color: none;
247206
}
248207
}
249-
250-
&--secondary {
251-
@media (max-width: 360px) {
252-
> span {
253-
display: none;
254-
}
255-
}
256-
}
257208
}
258209
}
259210
}

‎packages/ui/src/components/editor/panel/ChatInput/ChatInput.stories.tsx‎

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { ChatInput } from './ChatInput'
1+
import { useState } from 'react'
2+
import { ChatInput, type EditFormat } from './ChatInput'
23

34
export default {
45
component: ChatInput
@@ -28,7 +29,6 @@ export const Empty = () => (
2829
export const WithText = () => (
2930
<ChatInput
3031
value="Hello, this is a sample message"
31-
token_count={6}
3232
chat_history={[]}
3333
on_change={(value) => console.log('Changed:', value)}
3434
on_submit={() => console.log('Submitted')}
@@ -49,8 +49,7 @@ export const WithText = () => (
4949

5050
export const LongText = () => (
5151
<ChatInput
52-
value="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
53-
token_count={100}
52+
value="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
5453
chat_history={[]}
5554
on_change={(value) => console.log('Changed:', value)}
5655
on_submit={() => console.log('Submitted')}
@@ -110,3 +109,35 @@ export const WithPlaceholderSelection = () => (
110109
on_curly_braces_click={() => {}}
111110
/>
112111
)
112+
113+
export const WithEditFormatSelector = () => {
114+
const [edit_format, set_edit_format] = useState<EditFormat>('diff')
115+
return (
116+
<ChatInput
117+
value="Hello, this is a sample message"
118+
chat_history={[]}
119+
on_change={(value) => console.log('Changed:', value)}
120+
on_submit={() => console.log('Submitted')}
121+
on_copy={() => console.log('Copied')}
122+
is_connected={true}
123+
is_in_code_completions_mode={false}
124+
has_active_selection={false}
125+
has_active_editor={true}
126+
on_caret_position_change={(pos) => console.log('Caret position:', pos)}
127+
is_web_mode={false}
128+
on_at_sign_click={() => console.log('@ clicked')}
129+
on_hash_sign_click={() => console.log('# clicked')}
130+
on_search_click={() => console.log('Search clicked')}
131+
on_submit_with_control={() => {}}
132+
on_curly_braces_click={() => {}}
133+
show_edit_format_selector={true}
134+
edit_format={edit_format}
135+
on_edit_format_change={set_edit_format}
136+
edit_format_instructions={{
137+
whole: 'Use the whole...',
138+
truncated: 'Use truncated...',
139+
diff: 'Use diff...'
140+
}}
141+
/>
142+
)
143+
}

0 commit comments

Comments
 (0)