Skip to content

Commit bd3a8b6

Browse files
authored
Merge pull request microsoft#183517 from microsoft/joh/lovely-jackal
joh/lovely jackal
2 parents 0524ecc + dd1ec93 commit bd3a8b6

File tree

7 files changed

+100
-22
lines changed

7 files changed

+100
-22
lines changed

src/vs/platform/actions/browser/menuEntryActionViewItem.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,9 @@ export class MenuEntryActionViewItem extends ActionViewItem {
155155
super.render(container);
156156
container.classList.add('menu-entry');
157157

158-
this._updateItemClass(this._menuItemAction.item);
158+
if (this.options.icon) {
159+
this._updateItemClass(this._menuItemAction.item);
160+
}
159161

160162
let mouseOver = false;
161163

src/vs/workbench/contrib/interactiveEditor/browser/interactiveEditor.css

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,28 +90,43 @@
9090
/* status */
9191

9292
.monaco-editor .interactive-editor .status {
93-
padding: 6px 0px 2px 0px;
93+
margin-top: 3px;
9494
display: flex;
9595
justify-content: space-between;
9696
align-items: center;
9797
}
9898

99+
.monaco-editor .interactive-editor .status.actions {
100+
margin-top: 6px;
101+
}
102+
99103
.monaco-editor .interactive-editor .status .actions.hidden {
100104
display: none;
101105
}
102106

103107
.monaco-editor .interactive-editor .status .label {
104108
overflow: hidden;
105-
padding-left: 10px;
106-
padding-right: 4px;
107-
margin-left: auto;
108109
color: var(--vscode-descriptionForeground);
110+
font-size: 11px;
111+
align-self: baseline;
112+
display: flex;
109113
}
110114

111115
.monaco-editor .interactive-editor .status .label.hidden {
112116
display: none;
113117
}
114118

119+
.monaco-editor .interactive-editor .status .label.info {
120+
margin-right: auto;
121+
padding-left: 2px;
122+
}
123+
124+
.monaco-editor .interactive-editor .status .label.status {
125+
padding-left: 10px;
126+
padding-right: 4px;
127+
margin-left: auto;
128+
}
129+
115130
.monaco-editor .interactive-editor .markdownMessage {
116131
padding-top: 10px;
117132
}
@@ -161,6 +176,18 @@
161176
outline: 1px solid var(--vscode-inputOption-activeBorder);
162177
}
163178

179+
.monaco-editor .interactive-editor .status .monaco-toolbar .action-item.button-item .action-label {
180+
color: var(--vscode-button-foreground);
181+
background-color: var(--vscode-button-background);
182+
border-radius: 2px;
183+
padding: 4px 6px;
184+
}
185+
186+
.monaco-editor .interactive-editor .status .monaco-toolbar .action-item.button-item .action-label>.codicon {
187+
color: unset;
188+
font-size: 14px;
189+
}
190+
164191
/* preview */
165192

166193
.monaco-editor .interactive-editor .preview {

src/vs/workbench/contrib/interactiveEditor/browser/interactiveEditorActions.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { EditorAction2 } from 'vs/editor/browser/editorExtensions';
1010
import { EmbeddedCodeEditorWidget, EmbeddedDiffEditorWidget } from 'vs/editor/browser/widget/embeddedCodeEditorWidget';
1111
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
1212
import { InteractiveEditorController, InteractiveEditorRunOptions } from 'vs/workbench/contrib/interactiveEditor/browser/interactiveEditorController';
13-
import { CTX_INTERACTIVE_EDITOR_FOCUSED, CTX_INTERACTIVE_EDITOR_HAS_ACTIVE_REQUEST, CTX_INTERACTIVE_EDITOR_HAS_PROVIDER, CTX_INTERACTIVE_EDITOR_INNER_CURSOR_FIRST, CTX_INTERACTIVE_EDITOR_INNER_CURSOR_LAST, CTX_INTERACTIVE_EDITOR_EMPTY, CTX_INTERACTIVE_EDITOR_OUTER_CURSOR_POSITION, CTX_INTERACTIVE_EDITOR_VISIBLE, MENU_INTERACTIVE_EDITOR_WIDGET, MENU_INTERACTIVE_EDITOR_WIDGET_DISCARD, MENU_INTERACTIVE_EDITOR_WIDGET_STATUS, CTX_INTERACTIVE_EDITOR_LAST_FEEDBACK, CTX_INTERACTIVE_EDITOR_SHOWING_DIFF, CTX_INTERACTIVE_EDITOR_EDIT_MODE, EditMode, CTX_INTERACTIVE_EDITOR_LAST_RESPONSE_TYPE, MENU_INTERACTIVE_EDITOR_WIDGET_MARKDOWN_MESSAGE, CTX_INTERACTIVE_EDITOR_MESSAGE_CROP_STATE, CTX_INTERACTIVE_EDITOR_DOCUMENT_CHANGED, CTX_INTERACTIVE_EDITOR_DID_EDIT, CTX_INTERACTIVE_EDITOR_HAS_STASHED_SESSION } from 'vs/workbench/contrib/interactiveEditor/common/interactiveEditor';
13+
import { CTX_INTERACTIVE_EDITOR_FOCUSED, CTX_INTERACTIVE_EDITOR_HAS_ACTIVE_REQUEST, CTX_INTERACTIVE_EDITOR_HAS_PROVIDER, CTX_INTERACTIVE_EDITOR_INNER_CURSOR_FIRST, CTX_INTERACTIVE_EDITOR_INNER_CURSOR_LAST, CTX_INTERACTIVE_EDITOR_EMPTY, CTX_INTERACTIVE_EDITOR_OUTER_CURSOR_POSITION, CTX_INTERACTIVE_EDITOR_VISIBLE, MENU_INTERACTIVE_EDITOR_WIDGET, MENU_INTERACTIVE_EDITOR_WIDGET_DISCARD, MENU_INTERACTIVE_EDITOR_WIDGET_STATUS, CTX_INTERACTIVE_EDITOR_LAST_FEEDBACK, CTX_INTERACTIVE_EDITOR_SHOWING_DIFF, CTX_INTERACTIVE_EDITOR_EDIT_MODE, EditMode, CTX_INTERACTIVE_EDITOR_LAST_RESPONSE_TYPE, MENU_INTERACTIVE_EDITOR_WIDGET_MARKDOWN_MESSAGE, CTX_INTERACTIVE_EDITOR_MESSAGE_CROP_STATE, CTX_INTERACTIVE_EDITOR_DOCUMENT_CHANGED, CTX_INTERACTIVE_EDITOR_DID_EDIT, CTX_INTERACTIVE_EDITOR_HAS_STASHED_SESSION, MENU_INTERACTIVE_EDITOR_WIDGET_FEEDBACK, ACTION_ACCEPT_CHANGES } from 'vs/workbench/contrib/interactiveEditor/common/interactiveEditor';
1414
import { localize } from 'vs/nls';
1515
import { IAction2Options, MenuRegistry } from 'vs/platform/actions/common/actions';
1616
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
@@ -377,7 +377,7 @@ export class FeebackHelpfulCommand extends AbstractInteractiveEditorAction {
377377
precondition: CTX_INTERACTIVE_EDITOR_VISIBLE,
378378
toggled: CTX_INTERACTIVE_EDITOR_LAST_FEEDBACK.isEqualTo('helpful'),
379379
menu: {
380-
id: MENU_INTERACTIVE_EDITOR_WIDGET_STATUS,
380+
id: MENU_INTERACTIVE_EDITOR_WIDGET_FEEDBACK,
381381
when: CTX_INTERACTIVE_EDITOR_LAST_RESPONSE_TYPE.notEqualsTo(undefined),
382382
group: '2_feedback',
383383
order: 1
@@ -399,7 +399,7 @@ export class FeebackUnhelpfulCommand extends AbstractInteractiveEditorAction {
399399
precondition: CTX_INTERACTIVE_EDITOR_VISIBLE,
400400
toggled: CTX_INTERACTIVE_EDITOR_LAST_FEEDBACK.isEqualTo('unhelpful'),
401401
menu: {
402-
id: MENU_INTERACTIVE_EDITOR_WIDGET_STATUS,
402+
id: MENU_INTERACTIVE_EDITOR_WIDGET_FEEDBACK,
403403
when: CTX_INTERACTIVE_EDITOR_LAST_RESPONSE_TYPE.notEqualsTo(undefined),
404404
group: '2_feedback',
405405
order: 2
@@ -419,11 +419,11 @@ export class ToggleInlineDiff extends AbstractInteractiveEditorAction {
419419
id: 'interactiveEditor.toggleDiff',
420420
title: localize('toggleDiff', 'Toggle Diff'),
421421
icon: Codicon.diff,
422-
precondition: CTX_INTERACTIVE_EDITOR_VISIBLE,
422+
precondition: ContextKeyExpr.and(CTX_INTERACTIVE_EDITOR_VISIBLE, CTX_INTERACTIVE_EDITOR_DID_EDIT),
423423
toggled: CTX_INTERACTIVE_EDITOR_SHOWING_DIFF,
424424
menu: {
425425
id: MENU_INTERACTIVE_EDITOR_WIDGET_STATUS,
426-
when: ContextKeyExpr.and(CTX_INTERACTIVE_EDITOR_EDIT_MODE.notEqualsTo(EditMode.Preview), CTX_INTERACTIVE_EDITOR_DID_EDIT),
426+
when: CTX_INTERACTIVE_EDITOR_EDIT_MODE.notEqualsTo(EditMode.Preview),
427427
group: '0_main',
428428
order: 10
429429
}
@@ -439,8 +439,9 @@ export class ApplyPreviewEdits extends AbstractInteractiveEditorAction {
439439

440440
constructor() {
441441
super({
442-
id: 'interactiveEditor.applyEdits',
443-
title: localize('applyEdits', 'Apply Changes'),
442+
id: ACTION_ACCEPT_CHANGES,
443+
title: localize('apply1', 'Accept Changes'),
444+
shortTitle: localize('apply2', 'Accept'),
444445
icon: Codicon.check,
445446
precondition: ContextKeyExpr.and(CTX_INTERACTIVE_EDITOR_VISIBLE, ContextKeyExpr.or(CTX_INTERACTIVE_EDITOR_DOCUMENT_CHANGED.toNegated(), CTX_INTERACTIVE_EDITOR_EDIT_MODE.notEqualsTo(EditMode.Preview))),
446447
keybinding: [{

src/vs/workbench/contrib/interactiveEditor/browser/interactiveEditorController.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ export class InteractiveEditorController implements IEditorContribution {
257257

258258
this._zone.widget.updateSlashCommands(this._activeSession.session.slashCommands ?? []);
259259
this._zone.widget.placeholder = this._getPlaceholderText();
260-
this._zone.widget.updateStatus(this._activeSession.session.message ?? localize('welcome.1', "AI-generated code may be incorrect"));
260+
this._zone.widget.updateInfo(this._activeSession.session.message ?? localize('welcome.1', "AI-generated code may be incorrect"));
261261
this._zone.show(this._activeSession.wholeRange.getEndPosition());
262262

263263
this._sessionStore.add(this._editor.onDidChangeModel(() => {
@@ -443,6 +443,7 @@ export class InteractiveEditorController implements IEditorContribution {
443443
let reply: IInteractiveEditorResponse | null | undefined;
444444
try {
445445
this._zone.widget.updateProgress(true);
446+
this._zone.widget.updateInfo(!this._activeSession.lastExchange ? localize('thinking', "Thinking\u2026") : '');
446447
this._ctxHasActiveRequest.set(true);
447448
reply = await raceCancellationError(Promise.resolve(task), requestCts.token);
448449

@@ -460,6 +461,7 @@ export class InteractiveEditorController implements IEditorContribution {
460461
} finally {
461462
this._ctxHasActiveRequest.set(false);
462463
this._zone.widget.updateProgress(false);
464+
this._zone.widget.updateInfo('');
463465
this._logService.trace('[IE] request took', sw.elapsed(), this._activeSession.provider.debugName);
464466

465467
}

src/vs/workbench/contrib/interactiveEditor/browser/interactiveEditorStrategies.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -326,11 +326,11 @@ export class LiveStrategy extends EditModeStrategy {
326326
}
327327
let message: string;
328328
if (linesChanged === 0) {
329-
message = localize('lines.0', "Generated reply");
329+
message = localize('lines.0', "Nothing changed");
330330
} else if (linesChanged === 1) {
331-
message = localize('lines.1', "Generated reply and changed 1 line");
331+
message = localize('lines.1', "Changed 1 line");
332332
} else {
333-
message = localize('lines.N', "Generated reply and changed {0} lines", linesChanged);
333+
message = localize('lines.N', "Changed {0} lines", linesChanged);
334334
}
335335
this._widget.updateStatus(message);
336336
}

src/vs/workbench/contrib/interactiveEditor/browser/interactiveEditorWidget.ts

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { localize } from 'vs/nls';
1212
import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
1313
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
1414
import { ZoneWidget } from 'vs/editor/contrib/zoneWidget/browser/zoneWidget';
15-
import { CTX_INTERACTIVE_EDITOR_FOCUSED, CTX_INTERACTIVE_EDITOR_INNER_CURSOR_FIRST, CTX_INTERACTIVE_EDITOR_INNER_CURSOR_LAST, CTX_INTERACTIVE_EDITOR_EMPTY, CTX_INTERACTIVE_EDITOR_OUTER_CURSOR_POSITION, CTX_INTERACTIVE_EDITOR_VISIBLE, MENU_INTERACTIVE_EDITOR_WIDGET, MENU_INTERACTIVE_EDITOR_WIDGET_STATUS, MENU_INTERACTIVE_EDITOR_WIDGET_MARKDOWN_MESSAGE, CTX_INTERACTIVE_EDITOR_MESSAGE_CROP_STATE, IInteractiveEditorSlashCommand } from 'vs/workbench/contrib/interactiveEditor/common/interactiveEditor';
15+
import { CTX_INTERACTIVE_EDITOR_FOCUSED, CTX_INTERACTIVE_EDITOR_INNER_CURSOR_FIRST, CTX_INTERACTIVE_EDITOR_INNER_CURSOR_LAST, CTX_INTERACTIVE_EDITOR_EMPTY, CTX_INTERACTIVE_EDITOR_OUTER_CURSOR_POSITION, CTX_INTERACTIVE_EDITOR_VISIBLE, MENU_INTERACTIVE_EDITOR_WIDGET, MENU_INTERACTIVE_EDITOR_WIDGET_STATUS, MENU_INTERACTIVE_EDITOR_WIDGET_MARKDOWN_MESSAGE, CTX_INTERACTIVE_EDITOR_MESSAGE_CROP_STATE, IInteractiveEditorSlashCommand, MENU_INTERACTIVE_EDITOR_WIDGET_FEEDBACK, ACTION_ACCEPT_CHANGES } from 'vs/workbench/contrib/interactiveEditor/common/interactiveEditor';
1616
import { IModelDeltaDecoration, ITextModel } from 'vs/editor/common/model';
1717
import { Dimension, addDisposableListener, getTotalHeight, getTotalWidth, h, reset } from 'vs/base/browser/dom';
1818
import { Emitter, Event, MicrotaskEmitter } from 'vs/base/common/event';
@@ -28,7 +28,7 @@ import { ProgressBar } from 'vs/base/browser/ui/progressbar/progressbar';
2828
import { SuggestController } from 'vs/editor/contrib/suggest/browser/suggestController';
2929
import { IPosition, Position } from 'vs/editor/common/core/position';
3030
import { DEFAULT_FONT_FAMILY } from 'vs/workbench/browser/style';
31-
import { DropdownWithDefaultActionViewItem, createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';
31+
import { DropdownWithDefaultActionViewItem, IMenuEntryActionViewItemOptions, MenuEntryActionViewItem, createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';
3232
import { CompletionItem, CompletionItemInsertTextRule, CompletionItemKind, CompletionItemProvider, CompletionList, ProviderResult, TextEdit } from 'vs/editor/common/languages';
3333
import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation';
3434
import { ILanguageSelection, ILanguageService } from 'vs/editor/common/languages/language';
@@ -44,10 +44,12 @@ import { invertLineRange, lineRangeAsRange } from 'vs/workbench/contrib/interact
4444
import { ICodeEditorViewState, ScrollType } from 'vs/editor/common/editorCommon';
4545
import { LineRange } from 'vs/editor/common/core/lineRange';
4646
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
47-
import { SubmenuItemAction } from 'vs/platform/actions/common/actions';
47+
import { MenuItemAction, SubmenuItemAction } from 'vs/platform/actions/common/actions';
4848
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
4949
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
5050
import { AccessibilityVerbositySettingId } from 'vs/workbench/contrib/accessibility/browser/accessibilityContribution';
51+
import { assertType } from 'vs/base/common/types';
52+
import { renderLabelWithIcons } from 'vs/base/browser/ui/iconLabel/iconLabels';
5153

5254
const defaultAriaLabel = localize('aria-label', "Interactive Editor Input");
5355

@@ -136,8 +138,10 @@ export class InteractiveEditorWidget {
136138
h('div.previewCreateTitle.show-file-icons@previewCreateTitle'),
137139
h('div.previewCreate.hidden@previewCreate'),
138140
h('div.status@status', [
141+
h('div.label.info.hidden@infoLabel'),
139142
h('div.actions.hidden@statusToolbar'),
140-
h('div.label.hidden@statusLabel')
143+
h('div.label.status.hidden@statusLabel'),
144+
h('div.actions.hidden@feedbackToolbar'),
141145
]),
142146
h('div.markdownMessage.hidden@markdownMessage', [
143147
h('div.message@message'),
@@ -286,13 +290,42 @@ export class InteractiveEditorWidget {
286290
return this._instantiationService.createInstance(DropdownWithDefaultActionViewItem, action, { ...options, renderKeybindingWithDefaultActionLabel: true, persistLastActionId: false });
287291
}
288292

293+
if (action.id === ACTION_ACCEPT_CHANGES) {
294+
const ButtonLikeActionViewItem = class extends MenuEntryActionViewItem {
295+
296+
override render(container: HTMLElement): void {
297+
this.options.icon = false;
298+
super.render(container);
299+
assertType(this.element);
300+
this.element.classList.add('button-item');
301+
}
302+
303+
protected override updateLabel(): void {
304+
assertType(this.label);
305+
assertType(this.action instanceof MenuItemAction);
306+
const label = MenuItemAction.label(this.action.item, { renderShortTitle: true });
307+
const labelElements = renderLabelWithIcons(`$(check)${label}`);
308+
reset(this.label, ...labelElements);
309+
}
310+
311+
protected override updateClass(): void {
312+
// noop
313+
}
314+
};
315+
return this._instantiationService.createInstance(ButtonLikeActionViewItem, <MenuItemAction>action, <IMenuEntryActionViewItemOptions>options);
316+
}
317+
289318
return createActionViewItem(this._instantiationService, action, options);
290319
}
291320
};
292321
const statusToolbar = this._instantiationService.createInstance(MenuWorkbenchToolBar, this._elements.statusToolbar, MENU_INTERACTIVE_EDITOR_WIDGET_STATUS, { ...workbenchToolbarOptions, hiddenItemStrategy: HiddenItemStrategy.Ignore });
293322
this._store.add(statusToolbar.onDidChangeMenuItems(() => this._onDidChangeHeight.fire()));
294323
this._store.add(statusToolbar);
295324

325+
const feedbackToolbar = this._instantiationService.createInstance(MenuWorkbenchToolBar, this._elements.feedbackToolbar, MENU_INTERACTIVE_EDITOR_WIDGET_FEEDBACK, { ...workbenchToolbarOptions, hiddenItemStrategy: HiddenItemStrategy.Ignore });
326+
this._store.add(feedbackToolbar.onDidChangeMenuItems(() => this._onDidChangeHeight.fire()));
327+
this._store.add(feedbackToolbar);
328+
296329
// preview editors
297330
this._previewDiffEditor = this._store.add(_instantiationService.createInstance(EmbeddedDiffEditorWidget, this._elements.previewDiff, _previewEditorEditorOptions, { modifiedEditor: codeEditorWidgetOptions, originalEditor: codeEditorWidgetOptions }, parentEditor));
298331

@@ -389,6 +422,8 @@ export class InteractiveEditorWidget {
389422

390423
updateToolbar(show: boolean) {
391424
this._elements.statusToolbar.classList.toggle('hidden', !show);
425+
this._elements.feedbackToolbar.classList.toggle('hidden', !show);
426+
this._elements.status.classList.toggle('actions', show);
392427
this._onDidChangeHeight.fire();
393428
}
394429

@@ -409,6 +444,12 @@ export class InteractiveEditorWidget {
409444
this._onDidChangeHeight.fire();
410445
}
411446

447+
updateInfo(message: string): void {
448+
this._elements.infoLabel.classList.toggle('hidden', !message);
449+
this._elements.infoLabel.innerText = message;
450+
this._onDidChangeHeight.fire();
451+
}
452+
412453
updateStatus(message: string, ops: { classes?: string[]; resetAfter?: number; keepMessage?: boolean } = {}) {
413454
const isTempMessage = typeof ops.resetAfter === 'number';
414455
if (isTempMessage && !this._elements.statusLabel.dataset['state']) {
@@ -419,7 +460,7 @@ export class InteractiveEditorWidget {
419460
}, ops.resetAfter);
420461
}
421462
reset(this._elements.statusLabel, message);
422-
this._elements.statusLabel.className = `label ${(ops.classes ?? []).join(' ')}`;
463+
this._elements.statusLabel.className = `label status ${(ops.classes ?? []).join(' ')}`;
423464
this._elements.statusLabel.classList.toggle('hidden', !message);
424465
if (isTempMessage) {
425466
this._elements.statusLabel.dataset['state'] = 'temp';
@@ -437,6 +478,7 @@ export class InteractiveEditorWidget {
437478
reset(this._elements.statusLabel);
438479
this._elements.statusLabel.classList.toggle('hidden', true);
439480
this._elements.statusToolbar.classList.add('hidden');
481+
this._elements.feedbackToolbar.classList.add('hidden');
440482
this.hideCreatePreview();
441483
this.hideEditsPreview();
442484
this._onDidChangeHeight.fire();

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ export interface IInteractiveEditorService {
100100

101101
export const INTERACTIVE_EDITOR_ID = 'interactiveEditor';
102102

103-
104103
export const CTX_INTERACTIVE_EDITOR_HAS_PROVIDER = new RawContextKey<boolean>('interactiveEditorHasProvider', false, localize('interactiveEditorHasProvider', "Whether a provider for interactive editors exists"));
105104
export const CTX_INTERACTIVE_EDITOR_VISIBLE = new RawContextKey<boolean>('interactiveEditorVisible', false, localize('interactiveEditorVisible', "Whether the interactive editor input is visible"));
106105
export const CTX_INTERACTIVE_EDITOR_FOCUSED = new RawContextKey<boolean>('interactiveEditorFocused', false, localize('interactiveEditorFocused', "Whether the interactive editor input is focused"));
@@ -118,11 +117,16 @@ export const CTX_INTERACTIVE_EDITOR_LAST_FEEDBACK = new RawContextKey<'unhelpful
118117
export const CTX_INTERACTIVE_EDITOR_DOCUMENT_CHANGED = new RawContextKey<boolean>('interactiveEditorDocumentChanged', false, localize('interactiveEditorDocumentChanged', "Whether the document has changed concurrently"));
119118
export const CTX_INTERACTIVE_EDITOR_EDIT_MODE = new RawContextKey<EditMode>('config.interactiveEditor.editMode', EditMode.Live);
120119

120+
// --- (select) action identifier
121+
122+
export const ACTION_ACCEPT_CHANGES = 'interactive.acceptChanges';
123+
121124
// --- menus
122125

123126
export const MENU_INTERACTIVE_EDITOR_WIDGET = MenuId.for('interactiveEditorWidget');
124127
export const MENU_INTERACTIVE_EDITOR_WIDGET_MARKDOWN_MESSAGE = MenuId.for('interactiveEditorWidget.markdownMessage');
125128
export const MENU_INTERACTIVE_EDITOR_WIDGET_STATUS = MenuId.for('interactiveEditorWidget.status');
129+
export const MENU_INTERACTIVE_EDITOR_WIDGET_FEEDBACK = MenuId.for('interactiveEditorWidget.feedback');
126130
export const MENU_INTERACTIVE_EDITOR_WIDGET_DISCARD = MenuId.for('interactiveEditorWidget.undo');
127131

128132
// --- colors

0 commit comments

Comments
 (0)