Skip to content

Commit da06c08

Browse files
authored
Inline chat fixes and polish (microsoft#218398)
* react to changes of `inlineChat.experimental.textButtons` (no more window reload) microsoft#217845 * fix status label wrapping * remove unused toolbar * fix microsoft#218395
1 parent fdec5a0 commit da06c08

File tree

4 files changed

+61
-52
lines changed

4 files changed

+61
-52
lines changed

src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,15 @@ class MenuCopier implements IDisposable {
125125
updateMenu();
126126
}
127127
});
128+
const listener2 = configService.onDidChangeConfiguration(e => {
129+
if (e.affectsConfiguration(InlineChatConfigKeys.ExpTextButtons)) {
130+
updateMenu();
131+
}
132+
});
128133

129134
this.dispose = () => {
130135
listener.dispose();
136+
listener2.dispose();
131137
store.dispose();
132138
};
133139
}

src/vs/workbench/contrib/inlineChat/browser/inlineChatWidget.ts

Lines changed: 32 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,6 @@ export interface IInlineChatWidgetConstructionOptions {
6464
*/
6565
statusMenuId: MenuId | { menu: MenuId; options: IWorkbenchButtonBarOptions };
6666

67-
/**
68-
* The men that rendered in the lower right corner, use for feedback
69-
*/
70-
feedbackMenuId?: MenuId;
71-
7267
/**
7368
* The options for the chat widget
7469
*/
@@ -97,9 +92,9 @@ export class InlineChatWidget {
9792
h('div.accessibleViewer@accessibleViewer'),
9893
h('div.status@status', [
9994
h('div.label.info.hidden@infoLabel'),
100-
h('div.actions.hidden@statusToolbar'),
95+
h('div.actions.text-style.hidden@toolbar1'),
96+
h('div.actions.button-style.hidden@toolbar2'),
10197
h('div.label.status.hidden@statusLabel'),
102-
h('div.actions.hidden@feedbackToolbar'),
10398
]),
10499
]
105100
);
@@ -200,46 +195,34 @@ export class InlineChatWidget {
200195

201196
const statusMenuId = options.statusMenuId instanceof MenuId ? options.statusMenuId : options.statusMenuId.menu;
202197

203-
if (this._configurationService.getValue(InlineChatConfigKeys.ExpTextButtons)) {
204-
// TEXT-ONLY bar
205-
const statusToolbarMenu = scopedInstaService.createInstance(MenuWorkbenchToolBar, this._elements.statusToolbar, statusMenuId, {
206-
hiddenItemStrategy: HiddenItemStrategy.NoHide,
207-
telemetrySource: options.chatWidgetViewOptions?.menus?.telemetrySource,
208-
actionViewItemProvider: action => action instanceof MenuItemAction ? this._instantiationService.createInstance(TextOnlyMenuEntryActionViewItem, action, { conversational: true }) : undefined,
209-
toolbarOptions: { primaryGroup: '0_main' },
210-
menuOptions: { renderShortTitle: true },
211-
label: true,
212-
icon: false
213-
});
214-
this._store.add(statusToolbarMenu.onDidChangeMenuItems(() => this._onDidChangeHeight.fire()));
215-
this._store.add(statusToolbarMenu);
216-
217-
} else {
218-
// BUTTON bar
219-
const statusMenuOptions = options.statusMenuId instanceof MenuId ? undefined : options.statusMenuId.options;
220-
const statusButtonBar = scopedInstaService.createInstance(MenuWorkbenchButtonBar, this._elements.statusToolbar, statusMenuId, {
221-
toolbarOptions: { primaryGroup: '0_main' },
222-
telemetrySource: options.chatWidgetViewOptions?.menus?.telemetrySource,
223-
menuOptions: { renderShortTitle: true },
224-
...statusMenuOptions,
225-
});
226-
this._store.add(statusButtonBar.onDidChange(() => this._onDidChangeHeight.fire()));
227-
this._store.add(statusButtonBar);
228-
}
229-
230-
const workbenchToolbarOptions = {
198+
// TEXT-ONLY bar
199+
const statusToolbarMenu = scopedInstaService.createInstance(MenuWorkbenchToolBar, this._elements.toolbar1, statusMenuId, {
231200
hiddenItemStrategy: HiddenItemStrategy.NoHide,
232-
toolbarOptions: {
233-
primaryGroup: () => true,
234-
useSeparatorsInPrimaryActions: true
235-
}
236-
};
201+
telemetrySource: options.chatWidgetViewOptions?.menus?.telemetrySource,
202+
actionViewItemProvider: action => action instanceof MenuItemAction ? this._instantiationService.createInstance(TextOnlyMenuEntryActionViewItem, action, { conversational: true }) : undefined,
203+
toolbarOptions: { primaryGroup: '0_main' },
204+
menuOptions: { renderShortTitle: true },
205+
label: true,
206+
icon: false
207+
});
208+
this._store.add(statusToolbarMenu.onDidChangeMenuItems(() => this._onDidChangeHeight.fire()));
209+
this._store.add(statusToolbarMenu);
210+
211+
// BUTTON bar
212+
const statusMenuOptions = options.statusMenuId instanceof MenuId ? undefined : options.statusMenuId.options;
213+
const statusButtonBar = scopedInstaService.createInstance(MenuWorkbenchButtonBar, this._elements.toolbar2, statusMenuId, {
214+
toolbarOptions: { primaryGroup: '0_main' },
215+
telemetrySource: options.chatWidgetViewOptions?.menus?.telemetrySource,
216+
menuOptions: { renderShortTitle: true },
217+
...statusMenuOptions,
218+
});
219+
this._store.add(statusButtonBar.onDidChange(() => this._onDidChangeHeight.fire()));
220+
this._store.add(statusButtonBar);
221+
222+
const toggleToolbar = () => this._elements.status.classList.toggle('text', this._configurationService.getValue(InlineChatConfigKeys.ExpTextButtons));
223+
this._store.add(this._configurationService.onDidChangeConfiguration(e => e.affectsConfiguration(InlineChatConfigKeys.ExpTextButtons) && toggleToolbar()));
224+
toggleToolbar();
237225

238-
if (options.feedbackMenuId) {
239-
const feedbackToolbar = this._instantiationService.createInstance(MenuWorkbenchToolBar, this._elements.feedbackToolbar, options.feedbackMenuId, { ...workbenchToolbarOptions, hiddenItemStrategy: HiddenItemStrategy.Ignore });
240-
this._store.add(feedbackToolbar.onDidChangeMenuItems(() => this._onDidChangeHeight.fire()));
241-
this._store.add(feedbackToolbar);
242-
}
243226

244227
this._store.add(this._configurationService.onDidChangeConfiguration(e => {
245228
if (e.affectsConfiguration(AccessibilityVerbositySettingId.InlineChat)) {
@@ -402,8 +385,8 @@ export class InlineChatWidget {
402385

403386
updateToolbar(show: boolean) {
404387
this._elements.root.classList.toggle('toolbar', show);
405-
this._elements.statusToolbar.classList.toggle('hidden', !show);
406-
this._elements.feedbackToolbar.classList.toggle('hidden', !show);
388+
this._elements.toolbar1.classList.toggle('hidden', !show);
389+
this._elements.toolbar2.classList.toggle('hidden', !show);
407390
this._elements.status.classList.toggle('actions', show);
408391
this._elements.infoLabel.classList.toggle('hidden', show);
409392
this._onDidChangeHeight.fire();
@@ -533,8 +516,8 @@ export class InlineChatWidget {
533516

534517
reset(this._elements.statusLabel);
535518
this._elements.statusLabel.classList.toggle('hidden', true);
536-
this._elements.statusToolbar.classList.add('hidden');
537-
this._elements.feedbackToolbar.classList.add('hidden');
519+
this._elements.toolbar1.classList.add('hidden');
520+
this._elements.toolbar2.classList.add('hidden');
538521
this.updateInfo('');
539522

540523
this.chatWidget.setModel(this._defaultChatModel, {});

src/vs/workbench/contrib/inlineChat/browser/media/inlineChat.css

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
}
5959

6060
.monaco-workbench .inline-chat .chat-widget .interactive-session .interactive-list .interactive-item-container.minimal > .header {
61+
top: 5px;
6162
right: 10px;
6263
}
6364

@@ -89,7 +90,8 @@
8990
overflow: hidden;
9091
color: var(--vscode-descriptionForeground);
9192
font-size: 11px;
92-
display: inline-flex;
93+
display: flex;
94+
white-space: nowrap;
9395
}
9496

9597
.monaco-workbench .inline-chat .status .label.info {
@@ -114,7 +116,7 @@
114116
}
115117

116118
.monaco-workbench .inline-chat .status .label > .codicon {
117-
padding: 0 5px;
119+
padding: 0 3px;
118120
font-size: 12px;
119121
line-height: 18px;
120122
}
@@ -185,6 +187,24 @@
185187
}
186188
}
187189

190+
.monaco-workbench .inline-chat .status {
191+
.actions.text-style {
192+
display: none;
193+
}
194+
.actions.button-style {
195+
display: inherit;
196+
}
197+
}
198+
199+
.monaco-workbench .inline-chat .status.text {
200+
.actions.text-style {
201+
display: inherit;
202+
}
203+
.actions.button-style {
204+
display: none;
205+
}
206+
}
207+
188208
.monaco-workbench .inline-chat .status .actions > .monaco-button,
189209
.monaco-workbench .inline-chat .status .actions > .monaco-button-dropdown {
190210
margin-right: 4px;

src/vs/workbench/contrib/inlineChat/common/inlineChat.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ Registry.as<IConfigurationRegistry>(Extensions.Configuration).registerConfigurat
6767
],
6868
},
6969
[InlineChatConfigKeys.ExpTextButtons]: {
70-
description: localize('txtButtons', "Whether to use textual buttons (Requires restart)."),
70+
description: localize('txtButtons', "Whether to use textual buttons."),
7171
default: false,
7272
type: 'boolean',
7373
tags: ['experimental']

0 commit comments

Comments
 (0)