monaco-editor-core 0.56.0-dev-20251219 → 0.56.0-dev-20251220
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/nls.keys.json +1 -1
- package/esm/nls.messages.cs.js +2 -2
- package/esm/nls.messages.de.js +2 -2
- package/esm/nls.messages.es.js +2 -2
- package/esm/nls.messages.fr.js +2 -2
- package/esm/nls.messages.it.js +2 -2
- package/esm/nls.messages.ja.js +2 -2
- package/esm/nls.messages.js +1 -1
- package/esm/nls.messages.json +1 -1
- package/esm/nls.messages.ko.js +2 -2
- package/esm/nls.messages.pl.js +2 -2
- package/esm/nls.messages.pt-br.js +2 -2
- package/esm/nls.messages.ru.js +2 -2
- package/esm/nls.messages.tr.js +2 -2
- package/esm/nls.messages.zh-cn.js +2 -2
- package/esm/nls.messages.zh-tw.js +2 -2
- package/esm/nls.metadata.json +0 -2
- package/esm/vs/editor/common/core/editorColorRegistry.js +33 -34
- package/esm/vs/editor/common/core/editorColorRegistry.js.map +1 -1
- package/esm/vs/editor/common/editorContextKeys.js +47 -47
- package/esm/vs/editor/common/languages/modesRegistry.js +1 -1
- package/esm/vs/editor/common/languages.js +56 -56
- package/esm/vs/editor/common/model/editStack.js +1 -1
- package/esm/vs/editor/common/standaloneStrings.js +11 -11
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +2 -2
- package/esm/vs/editor/contrib/anchorSelect/browser/anchorSelect.js +6 -6
- package/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.js +9 -18
- package/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.js.map +1 -1
- package/esm/vs/editor/contrib/caretOperations/browser/caretOperations.js +2 -2
- package/esm/vs/editor/contrib/caretOperations/browser/transpose.js +1 -1
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +17 -17
- package/esm/vs/editor/contrib/codeAction/browser/codeAction.js +1 -1
- package/esm/vs/editor/contrib/codeAction/browser/codeActionCommands.js +29 -29
- package/esm/vs/editor/contrib/codeAction/browser/codeActionContributions.js +3 -3
- package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +3 -3
- package/esm/vs/editor/contrib/codeAction/browser/codeActionMenu.js +8 -8
- package/esm/vs/editor/contrib/codeAction/browser/lightBulbWidget.js +9 -9
- package/esm/vs/editor/contrib/codelens/browser/codelensController.js +2 -2
- package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.js +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.js +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.js +7 -7
- package/esm/vs/editor/contrib/comment/browser/comment.js +6 -6
- package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +10 -10
- package/esm/vs/editor/contrib/cursorUndo/browser/cursorUndo.js +2 -2
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +4 -4
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +9 -9
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +8 -8
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +3 -3
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js +2 -2
- package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js +1 -1
- package/esm/vs/editor/contrib/find/browser/findController.js +16 -16
- package/esm/vs/editor/contrib/find/browser/findWidget.js +26 -26
- package/esm/vs/editor/contrib/folding/browser/folding.js +20 -20
- package/esm/vs/editor/contrib/folding/browser/folding.js.map +1 -1
- package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +9 -9
- package/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +3 -3
- package/esm/vs/editor/contrib/format/browser/formatActions.js +2 -2
- package/esm/vs/editor/contrib/gotoError/browser/gotoError.js +8 -8
- package/esm/vs/editor/contrib/gotoError/browser/gotoErrorWidget.js +14 -14
- package/esm/vs/editor/contrib/gotoSymbol/browser/goToCommands.js +39 -39
- package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +1 -1
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js +3 -3
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.js +3 -3
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.js +3 -3
- package/esm/vs/editor/contrib/gotoSymbol/browser/referencesModel.js +8 -8
- package/esm/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.js +3 -3
- package/esm/vs/editor/contrib/gpu/browser/gpuActions.js +4 -4
- package/esm/vs/editor/contrib/hover/browser/hoverActionIds.js +2 -2
- package/esm/vs/editor/contrib/hover/browser/hoverActions.js +24 -24
- package/esm/vs/editor/contrib/hover/browser/hoverCopyButton.js +2 -2
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +9 -9
- package/esm/vs/editor/contrib/hover/browser/markerHoverParticipant.js +5 -5
- package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
- package/esm/vs/editor/contrib/indentation/browser/indentation.js +20 -20
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsHover.js +8 -8
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +21 -21
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +13 -13
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +5 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +2 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +2 -2
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +6 -6
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +7 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +13 -11
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js +5 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js +6 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js +6 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js +9 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js +14 -9
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js +12 -10
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js +5 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js +2 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +40 -21
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js.map +1 -1
- package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
- package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
- package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +31 -31
- package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +2 -2
- package/esm/vs/editor/contrib/links/browser/links.js +10 -10
- package/esm/vs/editor/contrib/message/browser/messageController.js +1 -1
- package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +22 -22
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +4 -4
- package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
- package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
- package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +11 -11
- package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
- package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +2 -2
- package/esm/vs/editor/contrib/rename/browser/rename.js +11 -11
- package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
- package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +4 -4
- package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +4 -4
- package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
- package/esm/vs/editor/contrib/suggest/browser/suggest.js +9 -9
- package/esm/vs/editor/contrib/suggest/browser/suggestController.js +11 -11
- package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +17 -17
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +2 -2
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
- package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
- package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
- package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
- package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +24 -24
- package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +5 -5
- package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
- package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +3 -3
- package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +3 -3
- package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +62 -62
- package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
- package/esm/vs/platform/actionWidget/browser/actionList.js +4 -4
- package/esm/vs/platform/actionWidget/browser/actionWidget.js +7 -7
- package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +5 -5
- package/esm/vs/platform/actions/browser/toolbar.js +2 -2
- package/esm/vs/platform/actions/common/menuService.js +2 -2
- package/esm/vs/platform/configuration/common/configurationRegistry.js +10 -10
- package/esm/vs/platform/contextkey/browser/contextKeyService.js +1 -1
- package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
- package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
- package/esm/vs/platform/contextkey/common/scanner.js +5 -5
- package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
- package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
- package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
- package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +4 -4
- package/esm/vs/platform/list/browser/listService.js +27 -27
- package/esm/vs/platform/markers/common/markerService.js +2 -2
- package/esm/vs/platform/markers/common/markers.js +6 -6
- package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
- package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
- package/esm/vs/platform/quickinput/browser/quickInput.js +13 -47
- package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
- package/esm/vs/platform/quickinput/browser/quickInputController.js +7 -6
- package/esm/vs/platform/quickinput/browser/quickInputController.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputList.js +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
- package/esm/vs/platform/quickinput/common/quickInput.js.map +1 -1
- package/esm/vs/platform/theme/common/colorUtils.js +2 -2
- package/esm/vs/platform/theme/common/colors/baseColors.js +18 -18
- package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
- package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
- package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
- package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
- package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
- package/esm/vs/platform/theme/common/colors/minimapColors.js +11 -11
- package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
- package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
- package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
- package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
- package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
- package/esm/vs/platform/workspace/common/workspace.js +1 -1
- package/package.json +2 -2
|
@@ -17,8 +17,7 @@ import { Emitter } from '../../../../../../../base/common/event.js';
|
|
|
17
17
|
import { Disposable } from '../../../../../../../base/common/lifecycle.js';
|
|
18
18
|
import { autorun, constObservable, derived, derivedObservableWithCache, observableFromEvent } from '../../../../../../../base/common/observable.js';
|
|
19
19
|
import { IInstantiationService } from '../../../../../../../platform/instantiation/common/instantiation.js';
|
|
20
|
-
import {
|
|
21
|
-
import { asCssVariable, asCssVariableWithDefault } from '../../../../../../../platform/theme/common/colorUtils.js';
|
|
20
|
+
import { asCssVariable } from '../../../../../../../platform/theme/common/colorUtils.js';
|
|
22
21
|
import { IThemeService } from '../../../../../../../platform/theme/common/themeService.js';
|
|
23
22
|
import { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';
|
|
24
23
|
import { Rect } from '../../../../../../common/core/2d/rect.js';
|
|
@@ -29,8 +28,9 @@ import { Range } from '../../../../../../common/core/range.js';
|
|
|
29
28
|
import { StickyScrollController } from '../../../../../stickyScroll/browser/stickyScrollController.js';
|
|
30
29
|
import { InlineCompletionContextKeys } from '../../../controller/inlineCompletionContextKeys.js';
|
|
31
30
|
import { InlineEditClickEvent } from '../inlineEditsViewInterface.js';
|
|
32
|
-
import { getEditorBlendedColor, getModifiedBorderColor, getOriginalBorderColor, INLINE_EDITS_BORDER_RADIUS, modifiedBackgroundColor, originalBackgroundColor } from '../theme.js';
|
|
31
|
+
import { getEditorBackgroundColor, getEditorBlendedColor, getModifiedBorderColor, getOriginalBorderColor, INLINE_EDITS_BORDER_RADIUS, modifiedBackgroundColor, originalBackgroundColor } from '../theme.js';
|
|
33
32
|
import { PathBuilder, getContentRenderWidth, getOffsetForPos, mapOutFalsy, maxContentWidthInRange, observeEditorBoundingClientRect } from '../utils/utils.js';
|
|
33
|
+
import { InlineCompletionEditorType } from '../../../model/provideInlineCompletions.js';
|
|
34
34
|
const HORIZONTAL_PADDING = 0;
|
|
35
35
|
const VERTICAL_PADDING = 0;
|
|
36
36
|
const ENABLE_OVERFLOW = false;
|
|
@@ -68,7 +68,7 @@ let InlineEditsSideBySideView = class InlineEditsSideBySideView extends Disposab
|
|
|
68
68
|
this._editorObs = observableCodeEditor(this._editor);
|
|
69
69
|
this._display = derived(this, reader => !!this._uiState.read(reader) ? 'block' : 'none');
|
|
70
70
|
this.previewRef = n.ref();
|
|
71
|
-
const separatorWidthObs = this._uiState.map(s => s?.
|
|
71
|
+
const separatorWidthObs = this._uiState.map(s => s?.editorType === InlineCompletionEditorType.DiffEditor ? WIDGET_SEPARATOR_DIFF_EDITOR_WIDTH : WIDGET_SEPARATOR_WIDTH);
|
|
72
72
|
this._editorContainer = n.div({
|
|
73
73
|
class: ['editorContainer'],
|
|
74
74
|
style: { position: 'absolute', overflow: 'hidden', cursor: 'pointer' },
|
|
@@ -307,6 +307,9 @@ let InlineEditsSideBySideView = class InlineEditsSideBySideView extends Disposab
|
|
|
307
307
|
this._originalBackgroundColor = observableFromEvent(this, this._themeService.onDidColorThemeChange, () => {
|
|
308
308
|
return this._themeService.getColorTheme().getColor(originalBackgroundColor) ?? Color.transparent;
|
|
309
309
|
});
|
|
310
|
+
this._editorBackgroundColor = this._uiState.map(s => {
|
|
311
|
+
return getEditorBackgroundColor(s?.editorType ?? InlineCompletionEditorType.TextEditor);
|
|
312
|
+
});
|
|
310
313
|
this._backgroundSvg = n.svg({
|
|
311
314
|
transform: 'translate(-0.5 -0.5)',
|
|
312
315
|
style: { overflow: 'visible', pointerEvents: 'none', position: 'absolute' },
|
|
@@ -330,7 +333,7 @@ let InlineEditsSideBySideView = class InlineEditsSideBySideView extends Disposab
|
|
|
330
333
|
.build();
|
|
331
334
|
}),
|
|
332
335
|
style: {
|
|
333
|
-
fill:
|
|
336
|
+
fill: this._editorBackgroundColor,
|
|
334
337
|
}
|
|
335
338
|
}),
|
|
336
339
|
]).keepUpdated(this._store);
|
|
@@ -341,9 +344,10 @@ let InlineEditsSideBySideView = class InlineEditsSideBySideView extends Disposab
|
|
|
341
344
|
if (!layoutInfoObs) {
|
|
342
345
|
return undefined;
|
|
343
346
|
}
|
|
347
|
+
const editorBackground = this._editorBackgroundColor.read(reader);
|
|
344
348
|
const separatorWidth = separatorWidthObs.read(reader);
|
|
345
349
|
const borderStyling = getOriginalBorderColor(this._tabAction).map(bc => `${BORDER_WIDTH}px solid ${asCssVariable(bc)}`);
|
|
346
|
-
const borderStylingSeparator = `${BORDER_WIDTH + separatorWidth}px solid ${
|
|
350
|
+
const borderStylingSeparator = `${BORDER_WIDTH + separatorWidth}px solid ${editorBackground}`;
|
|
347
351
|
const hasBorderLeft = layoutInfoObs.read(reader).codeScrollLeft !== 0;
|
|
348
352
|
const isModifiedLower = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.bottom < layoutInfo.editRect.bottom);
|
|
349
353
|
const transitionRectSize = BORDER_RADIUS * 2 + BORDER_WIDTH * 2;
|
|
@@ -401,7 +405,7 @@ let InlineEditsSideBySideView = class InlineEditsSideBySideView extends Disposab
|
|
|
401
405
|
borderTop: borderStyling,
|
|
402
406
|
borderRight: borderStyling,
|
|
403
407
|
borderRadius: `0 100% 0 0`,
|
|
404
|
-
backgroundColor:
|
|
408
|
+
backgroundColor: editorBackground
|
|
405
409
|
}
|
|
406
410
|
})
|
|
407
411
|
]),
|
|
@@ -409,7 +413,7 @@ let InlineEditsSideBySideView = class InlineEditsSideBySideView extends Disposab
|
|
|
409
413
|
class: 'originalOverlaySideBySideHider',
|
|
410
414
|
style: {
|
|
411
415
|
...overlayHider.toStyles(),
|
|
412
|
-
backgroundColor:
|
|
416
|
+
backgroundColor: editorBackground,
|
|
413
417
|
}
|
|
414
418
|
}),
|
|
415
419
|
];
|
|
@@ -422,10 +426,11 @@ let InlineEditsSideBySideView = class InlineEditsSideBySideView extends Disposab
|
|
|
422
426
|
return undefined;
|
|
423
427
|
}
|
|
424
428
|
const isModifiedLower = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.bottom < layoutInfo.editRect.bottom);
|
|
429
|
+
const editorBackground = this._editorBackgroundColor.read(reader);
|
|
425
430
|
const separatorWidth = separatorWidthObs.read(reader);
|
|
426
431
|
const borderRadius = isModifiedLower.map(isLower => `0 ${BORDER_RADIUS}px ${BORDER_RADIUS}px ${isLower ? BORDER_RADIUS : 0}px`);
|
|
427
432
|
const borderStyling = getEditorBlendedColor(getModifiedBorderColor(this._tabAction), this._themeService).map(c => `1px solid ${c.toString()}`);
|
|
428
|
-
const borderStylingSeparator = `${BORDER_WIDTH + separatorWidth}px solid ${
|
|
433
|
+
const borderStylingSeparator = `${BORDER_WIDTH + separatorWidth}px solid ${editorBackground}`;
|
|
429
434
|
const overlayRect = layoutInfoObs.map(layoutInfo => layoutInfo.editRect.withMargin(0, BORDER_WIDTH));
|
|
430
435
|
const separatorRect = overlayRect.map(overlayRect => overlayRect.withMargin(separatorWidth, separatorWidth, separatorWidth, 0));
|
|
431
436
|
const insertionRect = derived(this, reader => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.ts"],"names":[],"mappings":"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","file":"inlineEditsSideBySideView.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { $, getWindow, n } from '../../../../../../../base/browser/dom.js';\nimport { Color } from '../../../../../../../base/common/color.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { IObservable, IReader, autorun, constObservable, derived, derivedObservableWithCache, observableFromEvent } from '../../../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../../../platform/instantiation/common/instantiation.js';\nimport { editorBackground } from '../../../../../../../platform/theme/common/colorRegistry.js';\nimport { asCssVariable, asCssVariableWithDefault } from '../../../../../../../platform/theme/common/colorUtils.js';\nimport { IThemeService } from '../../../../../../../platform/theme/common/themeService.js';\nimport { ICodeEditor } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { EmbeddedCodeEditorWidget } from '../../../../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../../../common/core/position.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { ITextModel } from '../../../../../../common/model.js';\nimport { StickyScrollController } from '../../../../../stickyScroll/browser/stickyScrollController.js';\nimport { InlineCompletionContextKeys } from '../../../controller/inlineCompletionContextKeys.js';\nimport { IInlineEditsView, InlineEditClickEvent, InlineEditTabAction } from '../inlineEditsViewInterface.js';\nimport { InlineEditWithChanges } from '../inlineEditWithChanges.js';\nimport { getEditorBlendedColor, getModifiedBorderColor, getOriginalBorderColor, INLINE_EDITS_BORDER_RADIUS, modifiedBackgroundColor, originalBackgroundColor } from '../theme.js';\nimport { PathBuilder, getContentRenderWidth, getOffsetForPos, mapOutFalsy, maxContentWidthInRange, observeEditorBoundingClientRect } from '../utils/utils.js';\n\nconst HORIZONTAL_PADDING = 0;\nconst VERTICAL_PADDING = 0;\nconst ENABLE_OVERFLOW = false;\n\nconst BORDER_WIDTH = 1;\nconst WIDGET_SEPARATOR_WIDTH = 1;\nconst WIDGET_SEPARATOR_DIFF_EDITOR_WIDTH = 3;\nconst BORDER_RADIUS = INLINE_EDITS_BORDER_RADIUS;\nconst ORIGINAL_END_PADDING = 20;\nconst MODIFIED_END_PADDING = 12;\n\nexport class InlineEditsSideBySideView extends Disposable implements IInlineEditsView {\n\n\t// This is an approximation and should be improved by using the real parameters used bellow\n\tstatic fitsInsideViewport(editor: ICodeEditor, textModel: ITextModel, edit: InlineEditWithChanges, reader: IReader): boolean {\n\t\tconst editorObs = observableCodeEditor(editor);\n\t\tconst editorWidth = editorObs.layoutInfoWidth.read(reader);\n\t\tconst editorContentLeft = editorObs.layoutInfoContentLeft.read(reader);\n\t\tconst editorVerticalScrollbar = editor.getLayoutInfo().verticalScrollbarWidth;\n\t\tconst minimapWidth = editorObs.layoutInfoMinimap.read(reader).minimapLeft !== 0 ? editorObs.layoutInfoMinimap.read(reader).minimapWidth : 0;\n\n\t\tconst maxOriginalContent = maxContentWidthInRange(editorObs, edit.displayRange, undefined/* do not reconsider on each layout info change */);\n\t\tconst maxModifiedContent = edit.lineEdit.newLines.reduce((max, line) => Math.max(max, getContentRenderWidth(line, editor, textModel)), 0);\n\t\tconst originalPadding = ORIGINAL_END_PADDING; // padding after last line of original editor\n\t\tconst modifiedPadding = MODIFIED_END_PADDING + 2 * BORDER_WIDTH; // padding after last line of modified editor\n\n\t\treturn maxOriginalContent + maxModifiedContent + originalPadding + modifiedPadding < editorWidth - editorContentLeft - editorVerticalScrollbar - minimapWidth;\n\t}\n\n\tprivate readonly _editorObs;\n\n\tprivate readonly _onDidClick = this._register(new Emitter<InlineEditClickEvent>());\n\treadonly onDidClick = this._onDidClick.event;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _edit: IObservable<InlineEditWithChanges | undefined>,\n\t\tprivate readonly _previewTextModel: ITextModel,\n\t\tprivate readonly _uiState: IObservable<{\n\t\t\tnewTextLineCount: number;\n\t\t\tisInDiffEditor: boolean;\n\t\t} | undefined>,\n\t\tprivate readonly _tabAction: IObservable<InlineEditTabAction>,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t\t@IThemeService private readonly _themeService: IThemeService,\n\t) {\n\t\tsuper();\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\t\tthis._display = derived(this, reader => !!this._uiState.read(reader) ? 'block' : 'none');\n\t\tthis.previewRef = n.ref<HTMLDivElement>();\n\t\tconst separatorWidthObs = this._uiState.map(s => s?.isInDiffEditor ? WIDGET_SEPARATOR_DIFF_EDITOR_WIDTH : WIDGET_SEPARATOR_WIDTH);\n\t\tthis._editorContainer = n.div({\n\t\t\tclass: ['editorContainer'],\n\t\t\tstyle: { position: 'absolute', overflow: 'hidden', cursor: 'pointer' },\n\t\t\tonmousedown: e => {\n\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t},\n\t\t\tonclick: (e) => {\n\t\t\t\tthis._onDidClick.fire(InlineEditClickEvent.create(e));\n\t\t\t}\n\t\t}, [\n\t\t\tn.div({ class: 'preview', style: { pointerEvents: 'none' }, ref: this.previewRef }),\n\t\t]).keepUpdated(this._store);\n\t\tthis.isHovered = this._editorContainer.didMouseMoveDuringHover;\n\t\tthis.previewEditor = this._register(this._instantiationService.createInstance(\n\t\t\tEmbeddedCodeEditorWidget,\n\t\t\tthis.previewRef.element,\n\t\t\t{\n\t\t\t\tglyphMargin: false,\n\t\t\t\tlineNumbers: 'off',\n\t\t\t\tminimap: { enabled: false },\n\t\t\t\tguides: {\n\t\t\t\t\tindentation: false,\n\t\t\t\t\tbracketPairs: false,\n\t\t\t\t\tbracketPairsHorizontal: false,\n\t\t\t\t\thighlightActiveIndentation: false,\n\t\t\t\t},\n\t\t\t\teditContext: false, // is a bit faster\n\t\t\t\trulers: [],\n\t\t\t\tpadding: { top: 0, bottom: 0 },\n\t\t\t\tfolding: false,\n\t\t\t\tselectOnLineNumbers: false,\n\t\t\t\tselectionHighlight: false,\n\t\t\t\tcolumnSelection: false,\n\t\t\t\toverviewRulerBorder: false,\n\t\t\t\toverviewRulerLanes: 0,\n\t\t\t\tlineDecorationsWidth: 0,\n\t\t\t\tlineNumbersMinChars: 0,\n\t\t\t\trevealHorizontalRightPadding: 0,\n\t\t\t\tbracketPairColorization: { enabled: true, independentColorPoolPerBracketType: false },\n\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\tscrollbar: {\n\t\t\t\t\tvertical: 'hidden',\n\t\t\t\t\thorizontal: 'hidden',\n\t\t\t\t\thandleMouseWheel: false,\n\t\t\t\t},\n\t\t\t\treadOnly: true,\n\t\t\t\twordWrap: 'off',\n\t\t\t\twordWrapOverride1: 'off',\n\t\t\t\twordWrapOverride2: 'off',\n\t\t\t},\n\t\t\t{\n\t\t\t\tcontextKeyValues: {\n\t\t\t\t\t[InlineCompletionContextKeys.inInlineEditsPreviewEditor.key]: true,\n\t\t\t\t},\n\t\t\t\tcontributions: [],\n\t\t\t},\n\t\t\tthis._editor\n\t\t));\n\t\tthis._previewEditorObs = observableCodeEditor(this.previewEditor);\n\t\tthis._activeViewZones = [];\n\t\tthis._updatePreviewEditor = derived(this, reader => {\n\t\t\tthis._editorContainer.readEffect(reader);\n\t\t\tthis._previewEditorObs.model.read(reader); // update when the model is set\n\n\t\t\t// Setting this here explicitly to make sure that the preview editor is\n\t\t\t// visible when needed, we're also checking that these fields are defined\n\t\t\t// because of the auto run initial\n\t\t\t// Before removing these, verify with a non-monospace font family\n\t\t\tthis._display.read(reader);\n\t\t\tif (this._nonOverflowView) {\n\t\t\t\tthis._nonOverflowView.element.style.display = this._display.read(reader);\n\t\t\t}\n\n\t\t\tconst uiState = this._uiState.read(reader);\n\t\t\tconst edit = this._edit.read(reader);\n\t\t\tif (!uiState || !edit) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst range = edit.originalLineRange;\n\n\t\t\tconst hiddenAreas: Range[] = [];\n\t\t\tif (range.startLineNumber > 1) {\n\t\t\t\thiddenAreas.push(new Range(1, 1, range.startLineNumber - 1, 1));\n\t\t\t}\n\t\t\tif (range.startLineNumber + uiState.newTextLineCount < this._previewTextModel.getLineCount() + 1) {\n\t\t\t\thiddenAreas.push(new Range(range.startLineNumber + uiState.newTextLineCount, 1, this._previewTextModel.getLineCount() + 1, 1));\n\t\t\t}\n\n\t\t\tthis.previewEditor.setHiddenAreas(hiddenAreas, undefined, true);\n\n\t\t\t// TODO: is this the proper way to handle viewzones?\n\t\t\tconst previousViewZones = [...this._activeViewZones];\n\t\t\tthis._activeViewZones = [];\n\n\t\t\tconst reducedLinesCount = (range.endLineNumberExclusive - range.startLineNumber) - uiState.newTextLineCount;\n\t\t\tthis.previewEditor.changeViewZones((changeAccessor) => {\n\t\t\t\tpreviousViewZones.forEach(id => changeAccessor.removeZone(id));\n\n\t\t\t\tif (reducedLinesCount > 0) {\n\t\t\t\t\tthis._activeViewZones.push(changeAccessor.addZone({\n\t\t\t\t\t\tafterLineNumber: range.startLineNumber + uiState.newTextLineCount - 1,\n\t\t\t\t\t\theightInLines: reducedLinesCount,\n\t\t\t\t\t\tshowInHiddenAreas: true,\n\t\t\t\t\t\tdomNode: $('div.diagonal-fill.inline-edits-view-zone'),\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tthis._previewEditorWidth = derived(this, reader => {\n\t\t\tconst edit = this._edit.read(reader);\n\t\t\tif (!edit) { return 0; }\n\t\t\tthis._updatePreviewEditor.read(reader);\n\n\t\t\treturn maxContentWidthInRange(this._previewEditorObs, edit.modifiedLineRange, reader);\n\t\t});\n\t\tthis._cursorPosIfTouchesEdit = derived(this, reader => {\n\t\t\tconst cursorPos = this._editorObs.cursorPosition.read(reader);\n\t\t\tconst edit = this._edit.read(reader);\n\t\t\tif (!edit || !cursorPos) { return undefined; }\n\t\t\treturn edit.modifiedLineRange.contains(cursorPos.lineNumber) ? cursorPos : undefined;\n\t\t});\n\t\tthis._originalStartPosition = derived(this, (reader) => {\n\t\t\tconst inlineEdit = this._edit.read(reader);\n\t\t\treturn inlineEdit ? new Position(inlineEdit.originalLineRange.startLineNumber, 1) : null;\n\t\t});\n\t\tthis._originalEndPosition = derived(this, (reader) => {\n\t\t\tconst inlineEdit = this._edit.read(reader);\n\t\t\treturn inlineEdit ? new Position(inlineEdit.originalLineRange.endLineNumberExclusive, 1) : null;\n\t\t});\n\t\tthis._originalVerticalStartPosition = this._editorObs.observePosition(this._originalStartPosition, this._store).map(p => p?.y);\n\t\tthis._originalVerticalEndPosition = this._editorObs.observePosition(this._originalEndPosition, this._store).map(p => p?.y);\n\t\tthis._originalDisplayRange = this._edit.map(e => e?.displayRange);\n\t\tthis._editorMaxContentWidthInRange = derived(this, reader => {\n\t\t\tconst originalDisplayRange = this._originalDisplayRange.read(reader);\n\t\t\tif (!originalDisplayRange) {\n\t\t\t\treturn constObservable(0);\n\t\t\t}\n\t\t\tthis._editorObs.versionId.read(reader);\n\n\t\t\t// Take the max value that we observed.\n\t\t\t// Reset when either the edit changes or the editor text version.\n\t\t\treturn derivedObservableWithCache<number>(this, (reader, lastValue) => {\n\t\t\t\tconst maxWidth = maxContentWidthInRange(this._editorObs, originalDisplayRange, reader);\n\t\t\t\treturn Math.max(maxWidth, lastValue ?? 0);\n\t\t\t});\n\t\t}).map((v, r) => v.read(r));\n\n\t\tconst editorDomContentRect = observeEditorBoundingClientRect(this._editor, this._store);\n\n\t\tthis._previewEditorLayoutInfo = derived(this, (reader) => {\n\t\t\tconst inlineEdit = this._edit.read(reader);\n\t\t\tif (!inlineEdit) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst state = this._uiState.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst range = inlineEdit.originalLineRange;\n\n\t\t\tconst horizontalScrollOffset = this._editorObs.scrollLeft.read(reader);\n\n\t\t\tconst editorContentMaxWidthInRange = this._editorMaxContentWidthInRange.read(reader);\n\t\t\tconst editorLayout = this._editorObs.layoutInfo.read(reader);\n\t\t\tconst previewContentWidth = this._previewEditorWidth.read(reader);\n\t\t\tconst editorContentAreaWidth = editorLayout.contentWidth - editorLayout.verticalScrollbarWidth;\n\t\t\tconst editorBoundingClientRect = editorDomContentRect.read(reader);\n\t\t\tconst clientContentAreaRight = editorLayout.contentLeft + editorLayout.contentWidth + editorBoundingClientRect.left;\n\t\t\tconst remainingWidthRightOfContent = getWindow(this._editor.getContainerDomNode()).innerWidth - clientContentAreaRight;\n\t\t\tconst remainingWidthRightOfEditor = getWindow(this._editor.getContainerDomNode()).innerWidth - editorBoundingClientRect.right;\n\t\t\tconst desiredMinimumWidth = Math.min(editorLayout.contentWidth * 0.3, previewContentWidth, 100);\n\t\t\tconst IN_EDITOR_DISPLACEMENT = 0;\n\t\t\tconst maximumAvailableWidth = IN_EDITOR_DISPLACEMENT + remainingWidthRightOfContent;\n\n\t\t\tconst cursorPos = this._cursorPosIfTouchesEdit.read(reader);\n\n\t\t\tconst maxPreviewEditorLeft = Math.max(\n\t\t\t\t// We're starting from the content area right and moving it left by IN_EDITOR_DISPLACEMENT and also by an amount to ensure some minimum desired width\n\t\t\t\teditorContentAreaWidth + horizontalScrollOffset - IN_EDITOR_DISPLACEMENT - Math.max(0, desiredMinimumWidth - maximumAvailableWidth),\n\t\t\t\t// But we don't want that the moving left ends up covering the cursor, so this will push it to the right again\n\t\t\t\tMath.min(\n\t\t\t\t\tcursorPos ? getOffsetForPos(this._editorObs, cursorPos, reader) + 50 : 0,\n\t\t\t\t\teditorContentAreaWidth + horizontalScrollOffset\n\t\t\t\t)\n\t\t\t);\n\t\t\tconst previewEditorLeftInTextArea = Math.min(editorContentMaxWidthInRange + ORIGINAL_END_PADDING, maxPreviewEditorLeft);\n\n\t\t\tconst maxContentWidth = editorContentMaxWidthInRange + ORIGINAL_END_PADDING + previewContentWidth + 70;\n\n\t\t\tconst dist = maxPreviewEditorLeft - previewEditorLeftInTextArea;\n\n\t\t\tlet desiredPreviewEditorScrollLeft;\n\t\t\tlet codeRight;\n\t\t\tif (previewEditorLeftInTextArea > horizontalScrollOffset) {\n\t\t\t\tdesiredPreviewEditorScrollLeft = 0;\n\t\t\t\tcodeRight = editorLayout.contentLeft + previewEditorLeftInTextArea - horizontalScrollOffset;\n\t\t\t} else {\n\t\t\t\tdesiredPreviewEditorScrollLeft = horizontalScrollOffset - previewEditorLeftInTextArea;\n\t\t\t\tcodeRight = editorLayout.contentLeft;\n\t\t\t}\n\n\t\t\tconst selectionTop = this._originalVerticalStartPosition.read(reader) ?? this._editor.getTopForLineNumber(range.startLineNumber) - this._editorObs.scrollTop.read(reader);\n\t\t\tconst selectionBottom = this._originalVerticalEndPosition.read(reader) ?? this._editor.getBottomForLineNumber(range.endLineNumberExclusive - 1) - this._editorObs.scrollTop.read(reader);\n\n\t\t\t// TODO: const { prefixLeftOffset } = getPrefixTrim(inlineEdit.edit.edits.map(e => e.range), inlineEdit.originalLineRange, [], this._editor);\n\t\t\tconst codeLeft = editorLayout.contentLeft - horizontalScrollOffset;\n\n\t\t\tlet codeRect = Rect.fromLeftTopRightBottom(codeLeft, selectionTop, codeRight, selectionBottom);\n\t\t\tconst isInsertion = codeRect.height === 0;\n\t\t\tif (!isInsertion) {\n\t\t\t\tcodeRect = codeRect.withMargin(VERTICAL_PADDING, HORIZONTAL_PADDING);\n\t\t\t}\n\n\t\t\tconst previewLineHeights = this._previewEditorObs.observeLineHeightsForLineRange(inlineEdit.modifiedLineRange).read(reader);\n\t\t\tconst editHeight = previewLineHeights.reduce((acc, h) => acc + h, 0);\n\t\t\tconst codeHeight = selectionBottom - selectionTop;\n\t\t\tconst previewEditorHeight = Math.max(codeHeight, editHeight);\n\n\t\t\tconst clipped = dist === 0;\n\t\t\tconst codeEditDist = 0;\n\t\t\tconst previewEditorWidth = Math.min(previewContentWidth + MODIFIED_END_PADDING, remainingWidthRightOfEditor + editorLayout.width - editorLayout.contentLeft - codeEditDist);\n\n\t\t\tlet editRect = Rect.fromLeftTopWidthHeight(codeRect.right + codeEditDist, selectionTop, previewEditorWidth, previewEditorHeight);\n\t\t\tif (!isInsertion) {\n\t\t\t\teditRect = editRect.withMargin(VERTICAL_PADDING, HORIZONTAL_PADDING).translateX(HORIZONTAL_PADDING + BORDER_WIDTH);\n\t\t\t} else {\n\t\t\t\t// Align top of edit with insertion line\n\t\t\t\teditRect = editRect.withMargin(VERTICAL_PADDING, HORIZONTAL_PADDING).translateY(VERTICAL_PADDING);\n\t\t\t}\n\n\t\t\t// debugView(debugLogRects({ codeRect, editRect }, this._editor.getDomNode()!), reader);\n\n\t\t\treturn {\n\t\t\t\tcodeRect,\n\t\t\t\teditRect,\n\t\t\t\tcodeScrollLeft: horizontalScrollOffset,\n\t\t\t\tcontentLeft: editorLayout.contentLeft,\n\n\t\t\t\tisInsertion,\n\t\t\t\tmaxContentWidth,\n\t\t\t\tshouldShowShadow: clipped,\n\t\t\t\tdesiredPreviewEditorScrollLeft,\n\t\t\t\tpreviewEditorWidth,\n\t\t\t};\n\t\t});\n\t\tthis._stickyScrollController = StickyScrollController.get(this._editorObs.editor);\n\t\tthis._stickyScrollHeight = this._stickyScrollController ? observableFromEvent(this._stickyScrollController.onDidChangeStickyScrollHeight, () => this._stickyScrollController!.stickyScrollWidgetHeight) : constObservable(0);\n\t\tthis._shouldOverflow = derived(this, reader => {\n\t\t\tif (!ENABLE_OVERFLOW) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst range = this._edit.read(reader)?.originalLineRange;\n\t\t\tif (!range) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst stickyScrollHeight = this._stickyScrollHeight.read(reader);\n\t\t\tconst top = this._editor.getTopForLineNumber(range.startLineNumber) - this._editorObs.scrollTop.read(reader);\n\t\t\tif (top <= stickyScrollHeight) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst bottom = this._editor.getTopForLineNumber(range.endLineNumberExclusive) - this._editorObs.scrollTop.read(reader);\n\t\t\tif (bottom >= this._editorObs.layoutInfo.read(reader).height) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\tthis._originalBackgroundColor = observableFromEvent(this, this._themeService.onDidColorThemeChange, () => {\n\t\t\treturn this._themeService.getColorTheme().getColor(originalBackgroundColor) ?? Color.transparent;\n\t\t});\n\t\tthis._backgroundSvg = n.svg({\n\t\t\ttransform: 'translate(-0.5 -0.5)',\n\t\t\tstyle: { overflow: 'visible', pointerEvents: 'none', position: 'absolute' },\n\t\t}, [\n\t\t\tn.svgElem('path', {\n\t\t\t\tclass: 'rightOfModifiedBackgroundCoverUp',\n\t\t\t\td: derived(this, reader => {\n\t\t\t\t\tconst layoutInfo = this._previewEditorLayoutInfo.read(reader);\n\t\t\t\t\tif (!layoutInfo) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\tconst originalBackgroundColor = this._originalBackgroundColor.read(reader);\n\t\t\t\t\tif (originalBackgroundColor.isTransparent()) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn new PathBuilder()\n\t\t\t\t\t\t.moveTo(layoutInfo.codeRect.getRightTop())\n\t\t\t\t\t\t.lineTo(layoutInfo.codeRect.getRightTop().deltaX(1000))\n\t\t\t\t\t\t.lineTo(layoutInfo.codeRect.getRightBottom().deltaX(1000))\n\t\t\t\t\t\t.lineTo(layoutInfo.codeRect.getRightBottom())\n\t\t\t\t\t\t.build();\n\t\t\t\t}),\n\t\t\t\tstyle: {\n\t\t\t\t\tfill: asCssVariableWithDefault(editorBackground, 'transparent'),\n\t\t\t\t}\n\t\t\t}),\n\t\t]).keepUpdated(this._store);\n\t\tthis._originalOverlay = n.div({\n\t\t\tstyle: { pointerEvents: 'none', display: this._previewEditorLayoutInfo.map(layoutInfo => layoutInfo?.isInsertion ? 'none' : 'block') },\n\t\t}, derived(this, reader => {\n\t\t\tconst layoutInfoObs = mapOutFalsy(this._previewEditorLayoutInfo).read(reader);\n\t\t\tif (!layoutInfoObs) { return undefined; }\n\n\t\t\tconst separatorWidth = separatorWidthObs.read(reader);\n\t\t\tconst borderStyling = getOriginalBorderColor(this._tabAction).map(bc => `${BORDER_WIDTH}px solid ${asCssVariable(bc)}`);\n\t\t\tconst borderStylingSeparator = `${BORDER_WIDTH + separatorWidth}px solid ${asCssVariable(editorBackground)}`;\n\n\t\t\tconst hasBorderLeft = layoutInfoObs.read(reader).codeScrollLeft !== 0;\n\t\t\tconst isModifiedLower = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.bottom < layoutInfo.editRect.bottom);\n\t\t\tconst transitionRectSize = BORDER_RADIUS * 2 + BORDER_WIDTH * 2;\n\n\t\t\t// Create an overlay which hides the left hand side of the original overlay when it overflows to the left\n\t\t\t// such that there is a smooth transition at the edge of content left\n\t\t\tconst overlayHider = layoutInfoObs.map(layoutInfo => Rect.fromLeftTopRightBottom(\n\t\t\t\tlayoutInfo.contentLeft - BORDER_RADIUS - BORDER_WIDTH,\n\t\t\t\tlayoutInfo.codeRect.top,\n\t\t\t\tlayoutInfo.contentLeft,\n\t\t\t\tlayoutInfo.codeRect.bottom + transitionRectSize\n\t\t\t)).read(reader);\n\n\t\t\tconst intersectionLine = new OffsetRange(overlayHider.left, Number.MAX_SAFE_INTEGER);\n\t\t\tconst overlayRect = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.intersectHorizontal(intersectionLine));\n\t\t\tconst separatorRect = overlayRect.map(overlayRect => overlayRect.withMargin(separatorWidth, 0, separatorWidth, separatorWidth).intersectHorizontal(intersectionLine));\n\n\t\t\tconst transitionRect = overlayRect.map(overlayRect => Rect.fromLeftTopWidthHeight(overlayRect.right - transitionRectSize + BORDER_WIDTH, overlayRect.bottom - BORDER_WIDTH, transitionRectSize, transitionRectSize).intersectHorizontal(intersectionLine));\n\n\t\t\treturn [\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalSeparatorSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...separatorRect.read(reader).toStyles(),\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\tborderRadius: `${BORDER_RADIUS}px 0 0 ${BORDER_RADIUS}px`,\n\t\t\t\t\t\tborderTop: borderStylingSeparator,\n\t\t\t\t\t\tborderBottom: borderStylingSeparator,\n\t\t\t\t\t\tborderLeft: hasBorderLeft ? 'none' : borderStylingSeparator,\n\t\t\t\t\t}\n\t\t\t\t}),\n\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalOverlaySideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...overlayRect.read(reader).toStyles(),\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\tborderRadius: `${BORDER_RADIUS}px 0 0 ${BORDER_RADIUS}px`,\n\t\t\t\t\t\tborderTop: borderStyling,\n\t\t\t\t\t\tborderBottom: borderStyling,\n\t\t\t\t\t\tborderLeft: hasBorderLeft ? 'none' : borderStyling,\n\t\t\t\t\t\tbackgroundColor: asCssVariable(originalBackgroundColor),\n\t\t\t\t\t}\n\t\t\t\t}),\n\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalCornerCutoutSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\tdisplay: isModifiedLower.map(isLower => isLower ? 'block' : 'none'),\n\t\t\t\t\t\t...transitionRect.read(reader).toStyles(),\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'originalCornerCutoutBackground',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tposition: 'absolute', top: '0px', left: '0px', width: '100%', height: '100%',\n\t\t\t\t\t\t\tbackgroundColor: getEditorBlendedColor(originalBackgroundColor, this._themeService).map(c => c.toString()),\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'originalCornerCutoutBorder',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tposition: 'absolute', top: '0px', left: '0px', width: '100%', height: '100%',\n\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\tborderTop: borderStyling,\n\t\t\t\t\t\t\tborderRight: borderStyling,\n\t\t\t\t\t\t\tborderRadius: `0 100% 0 0`,\n\t\t\t\t\t\t\tbackgroundColor: asCssVariable(editorBackground)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t]),\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalOverlaySideBySideHider',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...overlayHider.toStyles(),\n\t\t\t\t\t\tbackgroundColor: asCssVariable(editorBackground),\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t];\n\t\t})).keepUpdated(this._store);\n\t\tthis._modifiedOverlay = n.div({\n\t\t\tstyle: { pointerEvents: 'none', }\n\t\t}, derived(this, reader => {\n\t\t\tconst layoutInfoObs = mapOutFalsy(this._previewEditorLayoutInfo).read(reader);\n\t\t\tif (!layoutInfoObs) { return undefined; }\n\n\t\t\tconst isModifiedLower = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.bottom < layoutInfo.editRect.bottom);\n\n\t\t\tconst separatorWidth = separatorWidthObs.read(reader);\n\t\t\tconst borderRadius = isModifiedLower.map(isLower => `0 ${BORDER_RADIUS}px ${BORDER_RADIUS}px ${isLower ? BORDER_RADIUS : 0}px`);\n\t\t\tconst borderStyling = getEditorBlendedColor(getModifiedBorderColor(this._tabAction), this._themeService).map(c => `1px solid ${c.toString()}`);\n\t\t\tconst borderStylingSeparator = `${BORDER_WIDTH + separatorWidth}px solid ${asCssVariable(editorBackground)}`;\n\n\t\t\tconst overlayRect = layoutInfoObs.map(layoutInfo => layoutInfo.editRect.withMargin(0, BORDER_WIDTH));\n\t\t\tconst separatorRect = overlayRect.map(overlayRect => overlayRect.withMargin(separatorWidth, separatorWidth, separatorWidth, 0));\n\n\t\t\tconst insertionRect = derived(this, reader => {\n\t\t\t\tconst overlay = overlayRect.read(reader);\n\t\t\t\tconst layoutinfo = layoutInfoObs.read(reader);\n\t\t\t\tif (!layoutinfo.isInsertion || layoutinfo.contentLeft >= overlay.left) {\n\t\t\t\t\treturn Rect.fromLeftTopWidthHeight(overlay.left, overlay.top, 0, 0);\n\t\t\t\t}\n\t\t\t\treturn new Rect(layoutinfo.contentLeft, overlay.top, overlay.left, overlay.top + BORDER_WIDTH * 2);\n\t\t\t});\n\n\t\t\treturn [\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'modifiedInsertionSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...insertionRect.read(reader).toStyles(),\n\t\t\t\t\t\tbackgroundColor: getModifiedBorderColor(this._tabAction).map(c => asCssVariable(c)),\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'modifiedSeparatorSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...separatorRect.read(reader).toStyles(),\n\t\t\t\t\t\tborderRadius,\n\t\t\t\t\t\tborderTop: borderStylingSeparator,\n\t\t\t\t\t\tborderBottom: borderStylingSeparator,\n\t\t\t\t\t\tborderRight: borderStylingSeparator,\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'modifiedOverlaySideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...overlayRect.read(reader).toStyles(),\n\t\t\t\t\t\tborderRadius,\n\t\t\t\t\t\tborder: borderStyling,\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\tbackgroundColor: asCssVariable(modifiedBackgroundColor),\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t];\n\t\t})).keepUpdated(this._store);\n\t\tthis._nonOverflowView = n.div({\n\t\t\tclass: 'inline-edits-view',\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\toverflow: 'visible',\n\t\t\t\ttop: '0px',\n\t\t\t\tleft: '0px',\n\t\t\t\tdisplay: this._display,\n\t\t\t},\n\t\t}, [\n\t\t\tthis._backgroundSvg,\n\t\t\tderived(this, reader => this._shouldOverflow.read(reader) ? [] : [this._editorContainer, this._originalOverlay, this._modifiedOverlay]),\n\t\t]).keepUpdated(this._store);\n\n\t\tthis._register(this._editorObs.createOverlayWidget({\n\t\t\tdomNode: this._nonOverflowView.element,\n\t\t\tposition: constObservable(null),\n\t\t\tallowEditorOverflow: false,\n\t\t\tminContentWidthInPx: derived(this, reader => {\n\t\t\t\tconst x = this._previewEditorLayoutInfo.read(reader)?.maxContentWidth;\n\t\t\t\tif (x === undefined) { return 0; }\n\t\t\t\treturn x;\n\t\t\t}),\n\t\t}));\n\n\t\tthis.previewEditor.setModel(this._previewTextModel);\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst layoutInfo = this._previewEditorLayoutInfo.read(reader);\n\t\t\tif (!layoutInfo) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst editorRect = layoutInfo.editRect.withMargin(-VERTICAL_PADDING, -HORIZONTAL_PADDING);\n\n\t\t\tthis.previewEditor.layout({ height: editorRect.height, width: layoutInfo.previewEditorWidth + 15 /* Make sure editor does not scroll horizontally */ });\n\t\t\tthis._editorContainer.element.style.top = `${editorRect.top}px`;\n\t\t\tthis._editorContainer.element.style.left = `${editorRect.left}px`;\n\t\t\tthis._editorContainer.element.style.width = `${layoutInfo.previewEditorWidth + HORIZONTAL_PADDING}px`; // Set width to clip view zone\n\t\t\t//this._editorContainer.element.style.borderRadius = `0 ${BORDER_RADIUS}px ${BORDER_RADIUS}px 0`;\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst layoutInfo = this._previewEditorLayoutInfo.read(reader);\n\t\t\tif (!layoutInfo) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._previewEditorObs.editor.setScrollLeft(layoutInfo.desiredPreviewEditorScrollLeft);\n\t\t}));\n\n\t\tthis._updatePreviewEditor.recomputeInitiallyAndOnChange(this._store);\n\t}\n\n\tprivate readonly _display;\n\n\tprivate readonly previewRef;\n\n\tprivate readonly _editorContainer;\n\n\tpublic readonly isHovered;\n\n\tpublic readonly previewEditor;\n\n\tprivate readonly _previewEditorObs;\n\n\tprivate _activeViewZones: string[];\n\tprivate readonly _updatePreviewEditor;\n\n\tprivate readonly _previewEditorWidth;\n\n\tprivate readonly _cursorPosIfTouchesEdit;\n\n\tprivate readonly _originalStartPosition;\n\n\tprivate readonly _originalEndPosition;\n\n\tprivate readonly _originalVerticalStartPosition;\n\tprivate readonly _originalVerticalEndPosition;\n\n\tprivate readonly _originalDisplayRange;\n\tprivate readonly _editorMaxContentWidthInRange;\n\n\tprivate readonly _previewEditorLayoutInfo;\n\n\tprivate _stickyScrollController;\n\tprivate readonly _stickyScrollHeight;\n\n\tprivate readonly _shouldOverflow;\n\n\tprivate readonly _originalBackgroundColor;\n\n\tprivate readonly _backgroundSvg;\n\n\tprivate readonly _originalOverlay;\n\n\tprivate readonly _modifiedOverlay;\n\n\tprivate readonly _nonOverflowView;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { $, getWindow, n } from '../../../../../../../base/browser/dom.js';\nimport { Color } from '../../../../../../../base/common/color.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { IObservable, IReader, autorun, constObservable, derived, derivedObservableWithCache, observableFromEvent } from '../../../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../../../platform/instantiation/common/instantiation.js';\nimport { editorBackground } from '../../../../../../../platform/theme/common/colorRegistry.js';\nimport { asCssVariable, asCssVariableWithDefault } from '../../../../../../../platform/theme/common/colorUtils.js';\nimport { IThemeService } from '../../../../../../../platform/theme/common/themeService.js';\nimport { ICodeEditor } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { EmbeddedCodeEditorWidget } from '../../../../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../../../common/core/position.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { ITextModel } from '../../../../../../common/model.js';\nimport { StickyScrollController } from '../../../../../stickyScroll/browser/stickyScrollController.js';\nimport { InlineCompletionContextKeys } from '../../../controller/inlineCompletionContextKeys.js';\nimport { IInlineEditsView, InlineEditClickEvent, InlineEditTabAction } from '../inlineEditsViewInterface.js';\nimport { InlineEditWithChanges } from '../inlineEditWithChanges.js';\nimport { getEditorBlendedColor, getModifiedBorderColor, getOriginalBorderColor, INLINE_EDITS_BORDER_RADIUS, modifiedBackgroundColor, originalBackgroundColor } from '../theme.js';\nimport { PathBuilder, getContentRenderWidth, getOffsetForPos, mapOutFalsy, maxContentWidthInRange, observeEditorBoundingClientRect } from '../utils/utils.js';\n\nconst HORIZONTAL_PADDING = 0;\nconst VERTICAL_PADDING = 0;\nconst ENABLE_OVERFLOW = false;\n\nconst BORDER_WIDTH = 1;\nconst WIDGET_SEPARATOR_WIDTH = 1;\nconst WIDGET_SEPARATOR_DIFF_EDITOR_WIDTH = 3;\nconst BORDER_RADIUS = INLINE_EDITS_BORDER_RADIUS;\nconst ORIGINAL_END_PADDING = 20;\nconst MODIFIED_END_PADDING = 12;\n\nexport class InlineEditsSideBySideView extends Disposable implements IInlineEditsView {\n\n\t// This is an approximation and should be improved by using the real parameters used bellow\n\tstatic fitsInsideViewport(editor: ICodeEditor, textModel: ITextModel, edit: InlineEditWithChanges, reader: IReader): boolean {\n\t\tconst editorObs = observableCodeEditor(editor);\n\t\tconst editorWidth = editorObs.layoutInfoWidth.read(reader);\n\t\tconst editorContentLeft = editorObs.layoutInfoContentLeft.read(reader);\n\t\tconst editorVerticalScrollbar = editor.getLayoutInfo().verticalScrollbarWidth;\n\t\tconst minimapWidth = editorObs.layoutInfoMinimap.read(reader).minimapLeft !== 0 ? editorObs.layoutInfoMinimap.read(reader).minimapWidth : 0;\n\n\t\tconst maxOriginalContent = maxContentWidthInRange(editorObs, edit.displayRange, undefined/* do not reconsider on each layout info change */);\n\t\tconst maxModifiedContent = edit.lineEdit.newLines.reduce((max, line) => Math.max(max, getContentRenderWidth(line, editor, textModel)), 0);\n\t\tconst originalPadding = ORIGINAL_END_PADDING; // padding after last line of original editor\n\t\tconst modifiedPadding = MODIFIED_END_PADDING + 2 * BORDER_WIDTH; // padding after last line of modified editor\n\n\t\treturn maxOriginalContent + maxModifiedContent + originalPadding + modifiedPadding < editorWidth - editorContentLeft - editorVerticalScrollbar - minimapWidth;\n\t}\n\n\tprivate readonly _editorObs;\n\n\tprivate readonly _onDidClick = this._register(new Emitter<InlineEditClickEvent>());\n\treadonly onDidClick = this._onDidClick.event;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _edit: IObservable<InlineEditWithChanges | undefined>,\n\t\tprivate readonly _previewTextModel: ITextModel,\n\t\tprivate readonly _uiState: IObservable<{\n\t\t\tnewTextLineCount: number;\n\t\t\tisInDiffEditor: boolean;\n\t\t} | undefined>,\n\t\tprivate readonly _tabAction: IObservable<InlineEditTabAction>,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t\t@IThemeService private readonly _themeService: IThemeService,\n\t) {\n\t\tsuper();\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\t\tthis._display = derived(this, reader => !!this._uiState.read(reader) ? 'block' : 'none');\n\t\tthis.previewRef = n.ref<HTMLDivElement>();\n\t\tconst separatorWidthObs = this._uiState.map(s => s?.isInDiffEditor ? WIDGET_SEPARATOR_DIFF_EDITOR_WIDTH : WIDGET_SEPARATOR_WIDTH);\n\t\tthis._editorContainer = n.div({\n\t\t\tclass: ['editorContainer'],\n\t\t\tstyle: { position: 'absolute', overflow: 'hidden', cursor: 'pointer' },\n\t\t\tonmousedown: e => {\n\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t},\n\t\t\tonclick: (e) => {\n\t\t\t\tthis._onDidClick.fire(InlineEditClickEvent.create(e));\n\t\t\t}\n\t\t}, [\n\t\t\tn.div({ class: 'preview', style: { pointerEvents: 'none' }, ref: this.previewRef }),\n\t\t]).keepUpdated(this._store);\n\t\tthis.isHovered = this._editorContainer.didMouseMoveDuringHover;\n\t\tthis.previewEditor = this._register(this._instantiationService.createInstance(\n\t\t\tEmbeddedCodeEditorWidget,\n\t\t\tthis.previewRef.element,\n\t\t\t{\n\t\t\t\tglyphMargin: false,\n\t\t\t\tlineNumbers: 'off',\n\t\t\t\tminimap: { enabled: false },\n\t\t\t\tguides: {\n\t\t\t\t\tindentation: false,\n\t\t\t\t\tbracketPairs: false,\n\t\t\t\t\tbracketPairsHorizontal: false,\n\t\t\t\t\thighlightActiveIndentation: false,\n\t\t\t\t},\n\t\t\t\teditContext: false, // is a bit faster\n\t\t\t\trulers: [],\n\t\t\t\tpadding: { top: 0, bottom: 0 },\n\t\t\t\tfolding: false,\n\t\t\t\tselectOnLineNumbers: false,\n\t\t\t\tselectionHighlight: false,\n\t\t\t\tcolumnSelection: false,\n\t\t\t\toverviewRulerBorder: false,\n\t\t\t\toverviewRulerLanes: 0,\n\t\t\t\tlineDecorationsWidth: 0,\n\t\t\t\tlineNumbersMinChars: 0,\n\t\t\t\trevealHorizontalRightPadding: 0,\n\t\t\t\tbracketPairColorization: { enabled: true, independentColorPoolPerBracketType: false },\n\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\tscrollbar: {\n\t\t\t\t\tvertical: 'hidden',\n\t\t\t\t\thorizontal: 'hidden',\n\t\t\t\t\thandleMouseWheel: false,\n\t\t\t\t},\n\t\t\t\treadOnly: true,\n\t\t\t\twordWrap: 'off',\n\t\t\t\twordWrapOverride1: 'off',\n\t\t\t\twordWrapOverride2: 'off',\n\t\t\t},\n\t\t\t{\n\t\t\t\tcontextKeyValues: {\n\t\t\t\t\t[InlineCompletionContextKeys.inInlineEditsPreviewEditor.key]: true,\n\t\t\t\t},\n\t\t\t\tcontributions: [],\n\t\t\t},\n\t\t\tthis._editor\n\t\t));\n\t\tthis._previewEditorObs = observableCodeEditor(this.previewEditor);\n\t\tthis._activeViewZones = [];\n\t\tthis._updatePreviewEditor = derived(this, reader => {\n\t\t\tthis._editorContainer.readEffect(reader);\n\t\t\tthis._previewEditorObs.model.read(reader); // update when the model is set\n\n\t\t\t// Setting this here explicitly to make sure that the preview editor is\n\t\t\t// visible when needed, we're also checking that these fields are defined\n\t\t\t// because of the auto run initial\n\t\t\t// Before removing these, verify with a non-monospace font family\n\t\t\tthis._display.read(reader);\n\t\t\tif (this._nonOverflowView) {\n\t\t\t\tthis._nonOverflowView.element.style.display = this._display.read(reader);\n\t\t\t}\n\n\t\t\tconst uiState = this._uiState.read(reader);\n\t\t\tconst edit = this._edit.read(reader);\n\t\t\tif (!uiState || !edit) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst range = edit.originalLineRange;\n\n\t\t\tconst hiddenAreas: Range[] = [];\n\t\t\tif (range.startLineNumber > 1) {\n\t\t\t\thiddenAreas.push(new Range(1, 1, range.startLineNumber - 1, 1));\n\t\t\t}\n\t\t\tif (range.startLineNumber + uiState.newTextLineCount < this._previewTextModel.getLineCount() + 1) {\n\t\t\t\thiddenAreas.push(new Range(range.startLineNumber + uiState.newTextLineCount, 1, this._previewTextModel.getLineCount() + 1, 1));\n\t\t\t}\n\n\t\t\tthis.previewEditor.setHiddenAreas(hiddenAreas, undefined, true);\n\n\t\t\t// TODO: is this the proper way to handle viewzones?\n\t\t\tconst previousViewZones = [...this._activeViewZones];\n\t\t\tthis._activeViewZones = [];\n\n\t\t\tconst reducedLinesCount = (range.endLineNumberExclusive - range.startLineNumber) - uiState.newTextLineCount;\n\t\t\tthis.previewEditor.changeViewZones((changeAccessor) => {\n\t\t\t\tpreviousViewZones.forEach(id => changeAccessor.removeZone(id));\n\n\t\t\t\tif (reducedLinesCount > 0) {\n\t\t\t\t\tthis._activeViewZones.push(changeAccessor.addZone({\n\t\t\t\t\t\tafterLineNumber: range.startLineNumber + uiState.newTextLineCount - 1,\n\t\t\t\t\t\theightInLines: reducedLinesCount,\n\t\t\t\t\t\tshowInHiddenAreas: true,\n\t\t\t\t\t\tdomNode: $('div.diagonal-fill.inline-edits-view-zone'),\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tthis._previewEditorWidth = derived(this, reader => {\n\t\t\tconst edit = this._edit.read(reader);\n\t\t\tif (!edit) { return 0; }\n\t\t\tthis._updatePreviewEditor.read(reader);\n\n\t\t\treturn maxContentWidthInRange(this._previewEditorObs, edit.modifiedLineRange, reader);\n\t\t});\n\t\tthis._cursorPosIfTouchesEdit = derived(this, reader => {\n\t\t\tconst cursorPos = this._editorObs.cursorPosition.read(reader);\n\t\t\tconst edit = this._edit.read(reader);\n\t\t\tif (!edit || !cursorPos) { return undefined; }\n\t\t\treturn edit.modifiedLineRange.contains(cursorPos.lineNumber) ? cursorPos : undefined;\n\t\t});\n\t\tthis._originalStartPosition = derived(this, (reader) => {\n\t\t\tconst inlineEdit = this._edit.read(reader);\n\t\t\treturn inlineEdit ? new Position(inlineEdit.originalLineRange.startLineNumber, 1) : null;\n\t\t});\n\t\tthis._originalEndPosition = derived(this, (reader) => {\n\t\t\tconst inlineEdit = this._edit.read(reader);\n\t\t\treturn inlineEdit ? new Position(inlineEdit.originalLineRange.endLineNumberExclusive, 1) : null;\n\t\t});\n\t\tthis._originalVerticalStartPosition = this._editorObs.observePosition(this._originalStartPosition, this._store).map(p => p?.y);\n\t\tthis._originalVerticalEndPosition = this._editorObs.observePosition(this._originalEndPosition, this._store).map(p => p?.y);\n\t\tthis._originalDisplayRange = this._edit.map(e => e?.displayRange);\n\t\tthis._editorMaxContentWidthInRange = derived(this, reader => {\n\t\t\tconst originalDisplayRange = this._originalDisplayRange.read(reader);\n\t\t\tif (!originalDisplayRange) {\n\t\t\t\treturn constObservable(0);\n\t\t\t}\n\t\t\tthis._editorObs.versionId.read(reader);\n\n\t\t\t// Take the max value that we observed.\n\t\t\t// Reset when either the edit changes or the editor text version.\n\t\t\treturn derivedObservableWithCache<number>(this, (reader, lastValue) => {\n\t\t\t\tconst maxWidth = maxContentWidthInRange(this._editorObs, originalDisplayRange, reader);\n\t\t\t\treturn Math.max(maxWidth, lastValue ?? 0);\n\t\t\t});\n\t\t}).map((v, r) => v.read(r));\n\n\t\tconst editorDomContentRect = observeEditorBoundingClientRect(this._editor, this._store);\n\n\t\tthis._previewEditorLayoutInfo = derived(this, (reader) => {\n\t\t\tconst inlineEdit = this._edit.read(reader);\n\t\t\tif (!inlineEdit) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst state = this._uiState.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst range = inlineEdit.originalLineRange;\n\n\t\t\tconst horizontalScrollOffset = this._editorObs.scrollLeft.read(reader);\n\n\t\t\tconst editorContentMaxWidthInRange = this._editorMaxContentWidthInRange.read(reader);\n\t\t\tconst editorLayout = this._editorObs.layoutInfo.read(reader);\n\t\t\tconst previewContentWidth = this._previewEditorWidth.read(reader);\n\t\t\tconst editorContentAreaWidth = editorLayout.contentWidth - editorLayout.verticalScrollbarWidth;\n\t\t\tconst editorBoundingClientRect = editorDomContentRect.read(reader);\n\t\t\tconst clientContentAreaRight = editorLayout.contentLeft + editorLayout.contentWidth + editorBoundingClientRect.left;\n\t\t\tconst remainingWidthRightOfContent = getWindow(this._editor.getContainerDomNode()).innerWidth - clientContentAreaRight;\n\t\t\tconst remainingWidthRightOfEditor = getWindow(this._editor.getContainerDomNode()).innerWidth - editorBoundingClientRect.right;\n\t\t\tconst desiredMinimumWidth = Math.min(editorLayout.contentWidth * 0.3, previewContentWidth, 100);\n\t\t\tconst IN_EDITOR_DISPLACEMENT = 0;\n\t\t\tconst maximumAvailableWidth = IN_EDITOR_DISPLACEMENT + remainingWidthRightOfContent;\n\n\t\t\tconst cursorPos = this._cursorPosIfTouchesEdit.read(reader);\n\n\t\t\tconst maxPreviewEditorLeft = Math.max(\n\t\t\t\t// We're starting from the content area right and moving it left by IN_EDITOR_DISPLACEMENT and also by an amount to ensure some minimum desired width\n\t\t\t\teditorContentAreaWidth + horizontalScrollOffset - IN_EDITOR_DISPLACEMENT - Math.max(0, desiredMinimumWidth - maximumAvailableWidth),\n\t\t\t\t// But we don't want that the moving left ends up covering the cursor, so this will push it to the right again\n\t\t\t\tMath.min(\n\t\t\t\t\tcursorPos ? getOffsetForPos(this._editorObs, cursorPos, reader) + 50 : 0,\n\t\t\t\t\teditorContentAreaWidth + horizontalScrollOffset\n\t\t\t\t)\n\t\t\t);\n\t\t\tconst previewEditorLeftInTextArea = Math.min(editorContentMaxWidthInRange + ORIGINAL_END_PADDING, maxPreviewEditorLeft);\n\n\t\t\tconst maxContentWidth = editorContentMaxWidthInRange + ORIGINAL_END_PADDING + previewContentWidth + 70;\n\n\t\t\tconst dist = maxPreviewEditorLeft - previewEditorLeftInTextArea;\n\n\t\t\tlet desiredPreviewEditorScrollLeft;\n\t\t\tlet codeRight;\n\t\t\tif (previewEditorLeftInTextArea > horizontalScrollOffset) {\n\t\t\t\tdesiredPreviewEditorScrollLeft = 0;\n\t\t\t\tcodeRight = editorLayout.contentLeft + previewEditorLeftInTextArea - horizontalScrollOffset;\n\t\t\t} else {\n\t\t\t\tdesiredPreviewEditorScrollLeft = horizontalScrollOffset - previewEditorLeftInTextArea;\n\t\t\t\tcodeRight = editorLayout.contentLeft;\n\t\t\t}\n\n\t\t\tconst selectionTop = this._originalVerticalStartPosition.read(reader) ?? this._editor.getTopForLineNumber(range.startLineNumber) - this._editorObs.scrollTop.read(reader);\n\t\t\tconst selectionBottom = this._originalVerticalEndPosition.read(reader) ?? this._editor.getBottomForLineNumber(range.endLineNumberExclusive - 1) - this._editorObs.scrollTop.read(reader);\n\n\t\t\t// TODO: const { prefixLeftOffset } = getPrefixTrim(inlineEdit.edit.edits.map(e => e.range), inlineEdit.originalLineRange, [], this._editor);\n\t\t\tconst codeLeft = editorLayout.contentLeft - horizontalScrollOffset;\n\n\t\t\tlet codeRect = Rect.fromLeftTopRightBottom(codeLeft, selectionTop, codeRight, selectionBottom);\n\t\t\tconst isInsertion = codeRect.height === 0;\n\t\t\tif (!isInsertion) {\n\t\t\t\tcodeRect = codeRect.withMargin(VERTICAL_PADDING, HORIZONTAL_PADDING);\n\t\t\t}\n\n\t\t\tconst previewLineHeights = this._previewEditorObs.observeLineHeightsForLineRange(inlineEdit.modifiedLineRange).read(reader);\n\t\t\tconst editHeight = previewLineHeights.reduce((acc, h) => acc + h, 0);\n\t\t\tconst codeHeight = selectionBottom - selectionTop;\n\t\t\tconst previewEditorHeight = Math.max(codeHeight, editHeight);\n\n\t\t\tconst clipped = dist === 0;\n\t\t\tconst codeEditDist = 0;\n\t\t\tconst previewEditorWidth = Math.min(previewContentWidth + MODIFIED_END_PADDING, remainingWidthRightOfEditor + editorLayout.width - editorLayout.contentLeft - codeEditDist);\n\n\t\t\tlet editRect = Rect.fromLeftTopWidthHeight(codeRect.right + codeEditDist, selectionTop, previewEditorWidth, previewEditorHeight);\n\t\t\tif (!isInsertion) {\n\t\t\t\teditRect = editRect.withMargin(VERTICAL_PADDING, HORIZONTAL_PADDING).translateX(HORIZONTAL_PADDING + BORDER_WIDTH);\n\t\t\t} else {\n\t\t\t\t// Align top of edit with insertion line\n\t\t\t\teditRect = editRect.withMargin(VERTICAL_PADDING, HORIZONTAL_PADDING).translateY(VERTICAL_PADDING);\n\t\t\t}\n\n\t\t\t// debugView(debugLogRects({ codeRect, editRect }, this._editor.getDomNode()!), reader);\n\n\t\t\treturn {\n\t\t\t\tcodeRect,\n\t\t\t\teditRect,\n\t\t\t\tcodeScrollLeft: horizontalScrollOffset,\n\t\t\t\tcontentLeft: editorLayout.contentLeft,\n\n\t\t\t\tisInsertion,\n\t\t\t\tmaxContentWidth,\n\t\t\t\tshouldShowShadow: clipped,\n\t\t\t\tdesiredPreviewEditorScrollLeft,\n\t\t\t\tpreviewEditorWidth,\n\t\t\t};\n\t\t});\n\t\tthis._stickyScrollController = StickyScrollController.get(this._editorObs.editor);\n\t\tthis._stickyScrollHeight = this._stickyScrollController ? observableFromEvent(this._stickyScrollController.onDidChangeStickyScrollHeight, () => this._stickyScrollController!.stickyScrollWidgetHeight) : constObservable(0);\n\t\tthis._shouldOverflow = derived(this, reader => {\n\t\t\tif (!ENABLE_OVERFLOW) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst range = this._edit.read(reader)?.originalLineRange;\n\t\t\tif (!range) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst stickyScrollHeight = this._stickyScrollHeight.read(reader);\n\t\t\tconst top = this._editor.getTopForLineNumber(range.startLineNumber) - this._editorObs.scrollTop.read(reader);\n\t\t\tif (top <= stickyScrollHeight) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst bottom = this._editor.getTopForLineNumber(range.endLineNumberExclusive) - this._editorObs.scrollTop.read(reader);\n\t\t\tif (bottom >= this._editorObs.layoutInfo.read(reader).height) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\tthis._originalBackgroundColor = observableFromEvent(this, this._themeService.onDidColorThemeChange, () => {\n\t\t\treturn this._themeService.getColorTheme().getColor(originalBackgroundColor) ?? Color.transparent;\n\t\t});\n\t\tthis._backgroundSvg = n.svg({\n\t\t\ttransform: 'translate(-0.5 -0.5)',\n\t\t\tstyle: { overflow: 'visible', pointerEvents: 'none', position: 'absolute' },\n\t\t}, [\n\t\t\tn.svgElem('path', {\n\t\t\t\tclass: 'rightOfModifiedBackgroundCoverUp',\n\t\t\t\td: derived(this, reader => {\n\t\t\t\t\tconst layoutInfo = this._previewEditorLayoutInfo.read(reader);\n\t\t\t\t\tif (!layoutInfo) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\tconst originalBackgroundColor = this._originalBackgroundColor.read(reader);\n\t\t\t\t\tif (originalBackgroundColor.isTransparent()) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn new PathBuilder()\n\t\t\t\t\t\t.moveTo(layoutInfo.codeRect.getRightTop())\n\t\t\t\t\t\t.lineTo(layoutInfo.codeRect.getRightTop().deltaX(1000))\n\t\t\t\t\t\t.lineTo(layoutInfo.codeRect.getRightBottom().deltaX(1000))\n\t\t\t\t\t\t.lineTo(layoutInfo.codeRect.getRightBottom())\n\t\t\t\t\t\t.build();\n\t\t\t\t}),\n\t\t\t\tstyle: {\n\t\t\t\t\tfill: asCssVariableWithDefault(editorBackground, 'transparent'),\n\t\t\t\t}\n\t\t\t}),\n\t\t]).keepUpdated(this._store);\n\t\tthis._originalOverlay = n.div({\n\t\t\tstyle: { pointerEvents: 'none', display: this._previewEditorLayoutInfo.map(layoutInfo => layoutInfo?.isInsertion ? 'none' : 'block') },\n\t\t}, derived(this, reader => {\n\t\t\tconst layoutInfoObs = mapOutFalsy(this._previewEditorLayoutInfo).read(reader);\n\t\t\tif (!layoutInfoObs) { return undefined; }\n\n\t\t\tconst separatorWidth = separatorWidthObs.read(reader);\n\t\t\tconst borderStyling = getOriginalBorderColor(this._tabAction).map(bc => `${BORDER_WIDTH}px solid ${asCssVariable(bc)}`);\n\t\t\tconst borderStylingSeparator = `${BORDER_WIDTH + separatorWidth}px solid ${asCssVariable(editorBackground)}`;\n\n\t\t\tconst hasBorderLeft = layoutInfoObs.read(reader).codeScrollLeft !== 0;\n\t\t\tconst isModifiedLower = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.bottom < layoutInfo.editRect.bottom);\n\t\t\tconst transitionRectSize = BORDER_RADIUS * 2 + BORDER_WIDTH * 2;\n\n\t\t\t// Create an overlay which hides the left hand side of the original overlay when it overflows to the left\n\t\t\t// such that there is a smooth transition at the edge of content left\n\t\t\tconst overlayHider = layoutInfoObs.map(layoutInfo => Rect.fromLeftTopRightBottom(\n\t\t\t\tlayoutInfo.contentLeft - BORDER_RADIUS - BORDER_WIDTH,\n\t\t\t\tlayoutInfo.codeRect.top,\n\t\t\t\tlayoutInfo.contentLeft,\n\t\t\t\tlayoutInfo.codeRect.bottom + transitionRectSize\n\t\t\t)).read(reader);\n\n\t\t\tconst intersectionLine = new OffsetRange(overlayHider.left, Number.MAX_SAFE_INTEGER);\n\t\t\tconst overlayRect = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.intersectHorizontal(intersectionLine));\n\t\t\tconst separatorRect = overlayRect.map(overlayRect => overlayRect.withMargin(separatorWidth, 0, separatorWidth, separatorWidth).intersectHorizontal(intersectionLine));\n\n\t\t\tconst transitionRect = overlayRect.map(overlayRect => Rect.fromLeftTopWidthHeight(overlayRect.right - transitionRectSize + BORDER_WIDTH, overlayRect.bottom - BORDER_WIDTH, transitionRectSize, transitionRectSize).intersectHorizontal(intersectionLine));\n\n\t\t\treturn [\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalSeparatorSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...separatorRect.read(reader).toStyles(),\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\tborderRadius: `${BORDER_RADIUS}px 0 0 ${BORDER_RADIUS}px`,\n\t\t\t\t\t\tborderTop: borderStylingSeparator,\n\t\t\t\t\t\tborderBottom: borderStylingSeparator,\n\t\t\t\t\t\tborderLeft: hasBorderLeft ? 'none' : borderStylingSeparator,\n\t\t\t\t\t}\n\t\t\t\t}),\n\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalOverlaySideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...overlayRect.read(reader).toStyles(),\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\tborderRadius: `${BORDER_RADIUS}px 0 0 ${BORDER_RADIUS}px`,\n\t\t\t\t\t\tborderTop: borderStyling,\n\t\t\t\t\t\tborderBottom: borderStyling,\n\t\t\t\t\t\tborderLeft: hasBorderLeft ? 'none' : borderStyling,\n\t\t\t\t\t\tbackgroundColor: asCssVariable(originalBackgroundColor),\n\t\t\t\t\t}\n\t\t\t\t}),\n\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalCornerCutoutSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\tdisplay: isModifiedLower.map(isLower => isLower ? 'block' : 'none'),\n\t\t\t\t\t\t...transitionRect.read(reader).toStyles(),\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'originalCornerCutoutBackground',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tposition: 'absolute', top: '0px', left: '0px', width: '100%', height: '100%',\n\t\t\t\t\t\t\tbackgroundColor: getEditorBlendedColor(originalBackgroundColor, this._themeService).map(c => c.toString()),\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'originalCornerCutoutBorder',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tposition: 'absolute', top: '0px', left: '0px', width: '100%', height: '100%',\n\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\tborderTop: borderStyling,\n\t\t\t\t\t\t\tborderRight: borderStyling,\n\t\t\t\t\t\t\tborderRadius: `0 100% 0 0`,\n\t\t\t\t\t\t\tbackgroundColor: asCssVariable(editorBackground)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t]),\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalOverlaySideBySideHider',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...overlayHider.toStyles(),\n\t\t\t\t\t\tbackgroundColor: asCssVariable(editorBackground),\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t];\n\t\t})).keepUpdated(this._store);\n\t\tthis._modifiedOverlay = n.div({\n\t\t\tstyle: { pointerEvents: 'none', }\n\t\t}, derived(this, reader => {\n\t\t\tconst layoutInfoObs = mapOutFalsy(this._previewEditorLayoutInfo).read(reader);\n\t\t\tif (!layoutInfoObs) { return undefined; }\n\n\t\t\tconst isModifiedLower = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.bottom < layoutInfo.editRect.bottom);\n\n\t\t\tconst separatorWidth = separatorWidthObs.read(reader);\n\t\t\tconst borderRadius = isModifiedLower.map(isLower => `0 ${BORDER_RADIUS}px ${BORDER_RADIUS}px ${isLower ? BORDER_RADIUS : 0}px`);\n\t\t\tconst borderStyling = getEditorBlendedColor(getModifiedBorderColor(this._tabAction), this._themeService).map(c => `1px solid ${c.toString()}`);\n\t\t\tconst borderStylingSeparator = `${BORDER_WIDTH + separatorWidth}px solid ${asCssVariable(editorBackground)}`;\n\n\t\t\tconst overlayRect = layoutInfoObs.map(layoutInfo => layoutInfo.editRect.withMargin(0, BORDER_WIDTH));\n\t\t\tconst separatorRect = overlayRect.map(overlayRect => overlayRect.withMargin(separatorWidth, separatorWidth, separatorWidth, 0));\n\n\t\t\tconst insertionRect = derived(this, reader => {\n\t\t\t\tconst overlay = overlayRect.read(reader);\n\t\t\t\tconst layoutinfo = layoutInfoObs.read(reader);\n\t\t\t\tif (!layoutinfo.isInsertion || layoutinfo.contentLeft >= overlay.left) {\n\t\t\t\t\treturn Rect.fromLeftTopWidthHeight(overlay.left, overlay.top, 0, 0);\n\t\t\t\t}\n\t\t\t\treturn new Rect(layoutinfo.contentLeft, overlay.top, overlay.left, overlay.top + BORDER_WIDTH * 2);\n\t\t\t});\n\n\t\t\treturn [\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'modifiedInsertionSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...insertionRect.read(reader).toStyles(),\n\t\t\t\t\t\tbackgroundColor: getModifiedBorderColor(this._tabAction).map(c => asCssVariable(c)),\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'modifiedSeparatorSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...separatorRect.read(reader).toStyles(),\n\t\t\t\t\t\tborderRadius,\n\t\t\t\t\t\tborderTop: borderStylingSeparator,\n\t\t\t\t\t\tborderBottom: borderStylingSeparator,\n\t\t\t\t\t\tborderRight: borderStylingSeparator,\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'modifiedOverlaySideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...overlayRect.read(reader).toStyles(),\n\t\t\t\t\t\tborderRadius,\n\t\t\t\t\t\tborder: borderStyling,\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\tbackgroundColor: asCssVariable(modifiedBackgroundColor),\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t];\n\t\t})).keepUpdated(this._store);\n\t\tthis._nonOverflowView = n.div({\n\t\t\tclass: 'inline-edits-view',\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\toverflow: 'visible',\n\t\t\t\ttop: '0px',\n\t\t\t\tleft: '0px',\n\t\t\t\tdisplay: this._display,\n\t\t\t},\n\t\t}, [\n\t\t\tthis._backgroundSvg,\n\t\t\tderived(this, reader => this._shouldOverflow.read(reader) ? [] : [this._editorContainer, this._originalOverlay, this._modifiedOverlay]),\n\t\t]).keepUpdated(this._store);\n\n\t\tthis._register(this._editorObs.createOverlayWidget({\n\t\t\tdomNode: this._nonOverflowView.element,\n\t\t\tposition: constObservable(null),\n\t\t\tallowEditorOverflow: false,\n\t\t\tminContentWidthInPx: derived(this, reader => {\n\t\t\t\tconst x = this._previewEditorLayoutInfo.read(reader)?.maxContentWidth;\n\t\t\t\tif (x === undefined) { return 0; }\n\t\t\t\treturn x;\n\t\t\t}),\n\t\t}));\n\n\t\tthis.previewEditor.setModel(this._previewTextModel);\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst layoutInfo = this._previewEditorLayoutInfo.read(reader);\n\t\t\tif (!layoutInfo) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst editorRect = layoutInfo.editRect.withMargin(-VERTICAL_PADDING, -HORIZONTAL_PADDING);\n\n\t\t\tthis.previewEditor.layout({ height: editorRect.height, width: layoutInfo.previewEditorWidth + 15 /* Make sure editor does not scroll horizontally */ });\n\t\t\tthis._editorContainer.element.style.top = `${editorRect.top}px`;\n\t\t\tthis._editorContainer.element.style.left = `${editorRect.left}px`;\n\t\t\tthis._editorContainer.element.style.width = `${layoutInfo.previewEditorWidth + HORIZONTAL_PADDING}px`; // Set width to clip view zone\n\t\t\t//this._editorContainer.element.style.borderRadius = `0 ${BORDER_RADIUS}px ${BORDER_RADIUS}px 0`;\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst layoutInfo = this._previewEditorLayoutInfo.read(reader);\n\t\t\tif (!layoutInfo) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._previewEditorObs.editor.setScrollLeft(layoutInfo.desiredPreviewEditorScrollLeft);\n\t\t}));\n\n\t\tthis._updatePreviewEditor.recomputeInitiallyAndOnChange(this._store);\n\t}\n\n\tprivate readonly _display;\n\n\tprivate readonly previewRef;\n\n\tprivate readonly _editorContainer;\n\n\tpublic readonly isHovered;\n\n\tpublic readonly previewEditor;\n\n\tprivate readonly _previewEditorObs;\n\n\tprivate _activeViewZones: string[];\n\tprivate readonly _updatePreviewEditor;\n\n\tprivate readonly _previewEditorWidth;\n\n\tprivate readonly _cursorPosIfTouchesEdit;\n\n\tprivate readonly _originalStartPosition;\n\n\tprivate readonly _originalEndPosition;\n\n\tprivate readonly _originalVerticalStartPosition;\n\tprivate readonly _originalVerticalEndPosition;\n\n\tprivate readonly _originalDisplayRange;\n\tprivate readonly _editorMaxContentWidthInRange;\n\n\tprivate readonly _previewEditorLayoutInfo;\n\n\tprivate _stickyScrollController;\n\tprivate readonly _stickyScrollHeight;\n\n\tprivate readonly _shouldOverflow;\n\n\tprivate readonly _originalBackgroundColor;\n\n\tprivate readonly _backgroundSvg;\n\n\tprivate readonly _originalOverlay;\n\n\tprivate readonly _modifiedOverlay;\n\n\tprivate readonly _nonOverflowView;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.ts"],"names":[],"mappings":"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","file":"inlineEditsSideBySideView.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { $, getWindow, n } from '../../../../../../../base/browser/dom.js';\nimport { Color } from '../../../../../../../base/common/color.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { IObservable, IReader, autorun, constObservable, derived, derivedObservableWithCache, observableFromEvent } from '../../../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../../../platform/instantiation/common/instantiation.js';\nimport { asCssVariable } from '../../../../../../../platform/theme/common/colorUtils.js';\nimport { IThemeService } from '../../../../../../../platform/theme/common/themeService.js';\nimport { ICodeEditor } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { EmbeddedCodeEditorWidget } from '../../../../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../../../common/core/position.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { ITextModel } from '../../../../../../common/model.js';\nimport { StickyScrollController } from '../../../../../stickyScroll/browser/stickyScrollController.js';\nimport { InlineCompletionContextKeys } from '../../../controller/inlineCompletionContextKeys.js';\nimport { IInlineEditsView, InlineEditClickEvent, InlineEditTabAction } from '../inlineEditsViewInterface.js';\nimport { InlineEditWithChanges } from '../inlineEditWithChanges.js';\nimport { getEditorBackgroundColor, getEditorBlendedColor, getModifiedBorderColor, getOriginalBorderColor, INLINE_EDITS_BORDER_RADIUS, modifiedBackgroundColor, originalBackgroundColor } from '../theme.js';\nimport { PathBuilder, getContentRenderWidth, getOffsetForPos, mapOutFalsy, maxContentWidthInRange, observeEditorBoundingClientRect } from '../utils/utils.js';\nimport { InlineCompletionEditorType } from '../../../model/provideInlineCompletions.js';\n\nconst HORIZONTAL_PADDING = 0;\nconst VERTICAL_PADDING = 0;\nconst ENABLE_OVERFLOW = false;\n\nconst BORDER_WIDTH = 1;\nconst WIDGET_SEPARATOR_WIDTH = 1;\nconst WIDGET_SEPARATOR_DIFF_EDITOR_WIDTH = 3;\nconst BORDER_RADIUS = INLINE_EDITS_BORDER_RADIUS;\nconst ORIGINAL_END_PADDING = 20;\nconst MODIFIED_END_PADDING = 12;\n\nexport class InlineEditsSideBySideView extends Disposable implements IInlineEditsView {\n\n\t// This is an approximation and should be improved by using the real parameters used bellow\n\tstatic fitsInsideViewport(editor: ICodeEditor, textModel: ITextModel, edit: InlineEditWithChanges, reader: IReader): boolean {\n\t\tconst editorObs = observableCodeEditor(editor);\n\t\tconst editorWidth = editorObs.layoutInfoWidth.read(reader);\n\t\tconst editorContentLeft = editorObs.layoutInfoContentLeft.read(reader);\n\t\tconst editorVerticalScrollbar = editor.getLayoutInfo().verticalScrollbarWidth;\n\t\tconst minimapWidth = editorObs.layoutInfoMinimap.read(reader).minimapLeft !== 0 ? editorObs.layoutInfoMinimap.read(reader).minimapWidth : 0;\n\n\t\tconst maxOriginalContent = maxContentWidthInRange(editorObs, edit.displayRange, undefined/* do not reconsider on each layout info change */);\n\t\tconst maxModifiedContent = edit.lineEdit.newLines.reduce((max, line) => Math.max(max, getContentRenderWidth(line, editor, textModel)), 0);\n\t\tconst originalPadding = ORIGINAL_END_PADDING; // padding after last line of original editor\n\t\tconst modifiedPadding = MODIFIED_END_PADDING + 2 * BORDER_WIDTH; // padding after last line of modified editor\n\n\t\treturn maxOriginalContent + maxModifiedContent + originalPadding + modifiedPadding < editorWidth - editorContentLeft - editorVerticalScrollbar - minimapWidth;\n\t}\n\n\tprivate readonly _editorObs;\n\n\tprivate readonly _onDidClick = this._register(new Emitter<InlineEditClickEvent>());\n\treadonly onDidClick = this._onDidClick.event;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _edit: IObservable<InlineEditWithChanges | undefined>,\n\t\tprivate readonly _previewTextModel: ITextModel,\n\t\tprivate readonly _uiState: IObservable<{\n\t\t\tnewTextLineCount: number;\n\t\t\teditorType: InlineCompletionEditorType;\n\t\t} | undefined>,\n\t\tprivate readonly _tabAction: IObservable<InlineEditTabAction>,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t\t@IThemeService private readonly _themeService: IThemeService,\n\t) {\n\t\tsuper();\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\t\tthis._display = derived(this, reader => !!this._uiState.read(reader) ? 'block' : 'none');\n\t\tthis.previewRef = n.ref<HTMLDivElement>();\n\t\tconst separatorWidthObs = this._uiState.map(s => s?.editorType === InlineCompletionEditorType.DiffEditor ? WIDGET_SEPARATOR_DIFF_EDITOR_WIDTH : WIDGET_SEPARATOR_WIDTH);\n\t\tthis._editorContainer = n.div({\n\t\t\tclass: ['editorContainer'],\n\t\t\tstyle: { position: 'absolute', overflow: 'hidden', cursor: 'pointer' },\n\t\t\tonmousedown: e => {\n\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t},\n\t\t\tonclick: (e) => {\n\t\t\t\tthis._onDidClick.fire(InlineEditClickEvent.create(e));\n\t\t\t}\n\t\t}, [\n\t\t\tn.div({ class: 'preview', style: { pointerEvents: 'none' }, ref: this.previewRef }),\n\t\t]).keepUpdated(this._store);\n\t\tthis.isHovered = this._editorContainer.didMouseMoveDuringHover;\n\t\tthis.previewEditor = this._register(this._instantiationService.createInstance(\n\t\t\tEmbeddedCodeEditorWidget,\n\t\t\tthis.previewRef.element,\n\t\t\t{\n\t\t\t\tglyphMargin: false,\n\t\t\t\tlineNumbers: 'off',\n\t\t\t\tminimap: { enabled: false },\n\t\t\t\tguides: {\n\t\t\t\t\tindentation: false,\n\t\t\t\t\tbracketPairs: false,\n\t\t\t\t\tbracketPairsHorizontal: false,\n\t\t\t\t\thighlightActiveIndentation: false,\n\t\t\t\t},\n\t\t\t\teditContext: false, // is a bit faster\n\t\t\t\trulers: [],\n\t\t\t\tpadding: { top: 0, bottom: 0 },\n\t\t\t\tfolding: false,\n\t\t\t\tselectOnLineNumbers: false,\n\t\t\t\tselectionHighlight: false,\n\t\t\t\tcolumnSelection: false,\n\t\t\t\toverviewRulerBorder: false,\n\t\t\t\toverviewRulerLanes: 0,\n\t\t\t\tlineDecorationsWidth: 0,\n\t\t\t\tlineNumbersMinChars: 0,\n\t\t\t\trevealHorizontalRightPadding: 0,\n\t\t\t\tbracketPairColorization: { enabled: true, independentColorPoolPerBracketType: false },\n\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\tscrollbar: {\n\t\t\t\t\tvertical: 'hidden',\n\t\t\t\t\thorizontal: 'hidden',\n\t\t\t\t\thandleMouseWheel: false,\n\t\t\t\t},\n\t\t\t\treadOnly: true,\n\t\t\t\twordWrap: 'off',\n\t\t\t\twordWrapOverride1: 'off',\n\t\t\t\twordWrapOverride2: 'off',\n\t\t\t},\n\t\t\t{\n\t\t\t\tcontextKeyValues: {\n\t\t\t\t\t[InlineCompletionContextKeys.inInlineEditsPreviewEditor.key]: true,\n\t\t\t\t},\n\t\t\t\tcontributions: [],\n\t\t\t},\n\t\t\tthis._editor\n\t\t));\n\t\tthis._previewEditorObs = observableCodeEditor(this.previewEditor);\n\t\tthis._activeViewZones = [];\n\t\tthis._updatePreviewEditor = derived(this, reader => {\n\t\t\tthis._editorContainer.readEffect(reader);\n\t\t\tthis._previewEditorObs.model.read(reader); // update when the model is set\n\n\t\t\t// Setting this here explicitly to make sure that the preview editor is\n\t\t\t// visible when needed, we're also checking that these fields are defined\n\t\t\t// because of the auto run initial\n\t\t\t// Before removing these, verify with a non-monospace font family\n\t\t\tthis._display.read(reader);\n\t\t\tif (this._nonOverflowView) {\n\t\t\t\tthis._nonOverflowView.element.style.display = this._display.read(reader);\n\t\t\t}\n\n\t\t\tconst uiState = this._uiState.read(reader);\n\t\t\tconst edit = this._edit.read(reader);\n\t\t\tif (!uiState || !edit) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst range = edit.originalLineRange;\n\n\t\t\tconst hiddenAreas: Range[] = [];\n\t\t\tif (range.startLineNumber > 1) {\n\t\t\t\thiddenAreas.push(new Range(1, 1, range.startLineNumber - 1, 1));\n\t\t\t}\n\t\t\tif (range.startLineNumber + uiState.newTextLineCount < this._previewTextModel.getLineCount() + 1) {\n\t\t\t\thiddenAreas.push(new Range(range.startLineNumber + uiState.newTextLineCount, 1, this._previewTextModel.getLineCount() + 1, 1));\n\t\t\t}\n\n\t\t\tthis.previewEditor.setHiddenAreas(hiddenAreas, undefined, true);\n\n\t\t\t// TODO: is this the proper way to handle viewzones?\n\t\t\tconst previousViewZones = [...this._activeViewZones];\n\t\t\tthis._activeViewZones = [];\n\n\t\t\tconst reducedLinesCount = (range.endLineNumberExclusive - range.startLineNumber) - uiState.newTextLineCount;\n\t\t\tthis.previewEditor.changeViewZones((changeAccessor) => {\n\t\t\t\tpreviousViewZones.forEach(id => changeAccessor.removeZone(id));\n\n\t\t\t\tif (reducedLinesCount > 0) {\n\t\t\t\t\tthis._activeViewZones.push(changeAccessor.addZone({\n\t\t\t\t\t\tafterLineNumber: range.startLineNumber + uiState.newTextLineCount - 1,\n\t\t\t\t\t\theightInLines: reducedLinesCount,\n\t\t\t\t\t\tshowInHiddenAreas: true,\n\t\t\t\t\t\tdomNode: $('div.diagonal-fill.inline-edits-view-zone'),\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tthis._previewEditorWidth = derived(this, reader => {\n\t\t\tconst edit = this._edit.read(reader);\n\t\t\tif (!edit) { return 0; }\n\t\t\tthis._updatePreviewEditor.read(reader);\n\n\t\t\treturn maxContentWidthInRange(this._previewEditorObs, edit.modifiedLineRange, reader);\n\t\t});\n\t\tthis._cursorPosIfTouchesEdit = derived(this, reader => {\n\t\t\tconst cursorPos = this._editorObs.cursorPosition.read(reader);\n\t\t\tconst edit = this._edit.read(reader);\n\t\t\tif (!edit || !cursorPos) { return undefined; }\n\t\t\treturn edit.modifiedLineRange.contains(cursorPos.lineNumber) ? cursorPos : undefined;\n\t\t});\n\t\tthis._originalStartPosition = derived(this, (reader) => {\n\t\t\tconst inlineEdit = this._edit.read(reader);\n\t\t\treturn inlineEdit ? new Position(inlineEdit.originalLineRange.startLineNumber, 1) : null;\n\t\t});\n\t\tthis._originalEndPosition = derived(this, (reader) => {\n\t\t\tconst inlineEdit = this._edit.read(reader);\n\t\t\treturn inlineEdit ? new Position(inlineEdit.originalLineRange.endLineNumberExclusive, 1) : null;\n\t\t});\n\t\tthis._originalVerticalStartPosition = this._editorObs.observePosition(this._originalStartPosition, this._store).map(p => p?.y);\n\t\tthis._originalVerticalEndPosition = this._editorObs.observePosition(this._originalEndPosition, this._store).map(p => p?.y);\n\t\tthis._originalDisplayRange = this._edit.map(e => e?.displayRange);\n\t\tthis._editorMaxContentWidthInRange = derived(this, reader => {\n\t\t\tconst originalDisplayRange = this._originalDisplayRange.read(reader);\n\t\t\tif (!originalDisplayRange) {\n\t\t\t\treturn constObservable(0);\n\t\t\t}\n\t\t\tthis._editorObs.versionId.read(reader);\n\n\t\t\t// Take the max value that we observed.\n\t\t\t// Reset when either the edit changes or the editor text version.\n\t\t\treturn derivedObservableWithCache<number>(this, (reader, lastValue) => {\n\t\t\t\tconst maxWidth = maxContentWidthInRange(this._editorObs, originalDisplayRange, reader);\n\t\t\t\treturn Math.max(maxWidth, lastValue ?? 0);\n\t\t\t});\n\t\t}).map((v, r) => v.read(r));\n\n\t\tconst editorDomContentRect = observeEditorBoundingClientRect(this._editor, this._store);\n\n\t\tthis._previewEditorLayoutInfo = derived(this, (reader) => {\n\t\t\tconst inlineEdit = this._edit.read(reader);\n\t\t\tif (!inlineEdit) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst state = this._uiState.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst range = inlineEdit.originalLineRange;\n\n\t\t\tconst horizontalScrollOffset = this._editorObs.scrollLeft.read(reader);\n\n\t\t\tconst editorContentMaxWidthInRange = this._editorMaxContentWidthInRange.read(reader);\n\t\t\tconst editorLayout = this._editorObs.layoutInfo.read(reader);\n\t\t\tconst previewContentWidth = this._previewEditorWidth.read(reader);\n\t\t\tconst editorContentAreaWidth = editorLayout.contentWidth - editorLayout.verticalScrollbarWidth;\n\t\t\tconst editorBoundingClientRect = editorDomContentRect.read(reader);\n\t\t\tconst clientContentAreaRight = editorLayout.contentLeft + editorLayout.contentWidth + editorBoundingClientRect.left;\n\t\t\tconst remainingWidthRightOfContent = getWindow(this._editor.getContainerDomNode()).innerWidth - clientContentAreaRight;\n\t\t\tconst remainingWidthRightOfEditor = getWindow(this._editor.getContainerDomNode()).innerWidth - editorBoundingClientRect.right;\n\t\t\tconst desiredMinimumWidth = Math.min(editorLayout.contentWidth * 0.3, previewContentWidth, 100);\n\t\t\tconst IN_EDITOR_DISPLACEMENT = 0;\n\t\t\tconst maximumAvailableWidth = IN_EDITOR_DISPLACEMENT + remainingWidthRightOfContent;\n\n\t\t\tconst cursorPos = this._cursorPosIfTouchesEdit.read(reader);\n\n\t\t\tconst maxPreviewEditorLeft = Math.max(\n\t\t\t\t// We're starting from the content area right and moving it left by IN_EDITOR_DISPLACEMENT and also by an amount to ensure some minimum desired width\n\t\t\t\teditorContentAreaWidth + horizontalScrollOffset - IN_EDITOR_DISPLACEMENT - Math.max(0, desiredMinimumWidth - maximumAvailableWidth),\n\t\t\t\t// But we don't want that the moving left ends up covering the cursor, so this will push it to the right again\n\t\t\t\tMath.min(\n\t\t\t\t\tcursorPos ? getOffsetForPos(this._editorObs, cursorPos, reader) + 50 : 0,\n\t\t\t\t\teditorContentAreaWidth + horizontalScrollOffset\n\t\t\t\t)\n\t\t\t);\n\t\t\tconst previewEditorLeftInTextArea = Math.min(editorContentMaxWidthInRange + ORIGINAL_END_PADDING, maxPreviewEditorLeft);\n\n\t\t\tconst maxContentWidth = editorContentMaxWidthInRange + ORIGINAL_END_PADDING + previewContentWidth + 70;\n\n\t\t\tconst dist = maxPreviewEditorLeft - previewEditorLeftInTextArea;\n\n\t\t\tlet desiredPreviewEditorScrollLeft;\n\t\t\tlet codeRight;\n\t\t\tif (previewEditorLeftInTextArea > horizontalScrollOffset) {\n\t\t\t\tdesiredPreviewEditorScrollLeft = 0;\n\t\t\t\tcodeRight = editorLayout.contentLeft + previewEditorLeftInTextArea - horizontalScrollOffset;\n\t\t\t} else {\n\t\t\t\tdesiredPreviewEditorScrollLeft = horizontalScrollOffset - previewEditorLeftInTextArea;\n\t\t\t\tcodeRight = editorLayout.contentLeft;\n\t\t\t}\n\n\t\t\tconst selectionTop = this._originalVerticalStartPosition.read(reader) ?? this._editor.getTopForLineNumber(range.startLineNumber) - this._editorObs.scrollTop.read(reader);\n\t\t\tconst selectionBottom = this._originalVerticalEndPosition.read(reader) ?? this._editor.getBottomForLineNumber(range.endLineNumberExclusive - 1) - this._editorObs.scrollTop.read(reader);\n\n\t\t\t// TODO: const { prefixLeftOffset } = getPrefixTrim(inlineEdit.edit.edits.map(e => e.range), inlineEdit.originalLineRange, [], this._editor);\n\t\t\tconst codeLeft = editorLayout.contentLeft - horizontalScrollOffset;\n\n\t\t\tlet codeRect = Rect.fromLeftTopRightBottom(codeLeft, selectionTop, codeRight, selectionBottom);\n\t\t\tconst isInsertion = codeRect.height === 0;\n\t\t\tif (!isInsertion) {\n\t\t\t\tcodeRect = codeRect.withMargin(VERTICAL_PADDING, HORIZONTAL_PADDING);\n\t\t\t}\n\n\t\t\tconst previewLineHeights = this._previewEditorObs.observeLineHeightsForLineRange(inlineEdit.modifiedLineRange).read(reader);\n\t\t\tconst editHeight = previewLineHeights.reduce((acc, h) => acc + h, 0);\n\t\t\tconst codeHeight = selectionBottom - selectionTop;\n\t\t\tconst previewEditorHeight = Math.max(codeHeight, editHeight);\n\n\t\t\tconst clipped = dist === 0;\n\t\t\tconst codeEditDist = 0;\n\t\t\tconst previewEditorWidth = Math.min(previewContentWidth + MODIFIED_END_PADDING, remainingWidthRightOfEditor + editorLayout.width - editorLayout.contentLeft - codeEditDist);\n\n\t\t\tlet editRect = Rect.fromLeftTopWidthHeight(codeRect.right + codeEditDist, selectionTop, previewEditorWidth, previewEditorHeight);\n\t\t\tif (!isInsertion) {\n\t\t\t\teditRect = editRect.withMargin(VERTICAL_PADDING, HORIZONTAL_PADDING).translateX(HORIZONTAL_PADDING + BORDER_WIDTH);\n\t\t\t} else {\n\t\t\t\t// Align top of edit with insertion line\n\t\t\t\teditRect = editRect.withMargin(VERTICAL_PADDING, HORIZONTAL_PADDING).translateY(VERTICAL_PADDING);\n\t\t\t}\n\n\t\t\t// debugView(debugLogRects({ codeRect, editRect }, this._editor.getDomNode()!), reader);\n\n\t\t\treturn {\n\t\t\t\tcodeRect,\n\t\t\t\teditRect,\n\t\t\t\tcodeScrollLeft: horizontalScrollOffset,\n\t\t\t\tcontentLeft: editorLayout.contentLeft,\n\n\t\t\t\tisInsertion,\n\t\t\t\tmaxContentWidth,\n\t\t\t\tshouldShowShadow: clipped,\n\t\t\t\tdesiredPreviewEditorScrollLeft,\n\t\t\t\tpreviewEditorWidth,\n\t\t\t};\n\t\t});\n\t\tthis._stickyScrollController = StickyScrollController.get(this._editorObs.editor);\n\t\tthis._stickyScrollHeight = this._stickyScrollController ? observableFromEvent(this._stickyScrollController.onDidChangeStickyScrollHeight, () => this._stickyScrollController!.stickyScrollWidgetHeight) : constObservable(0);\n\t\tthis._shouldOverflow = derived(this, reader => {\n\t\t\tif (!ENABLE_OVERFLOW) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst range = this._edit.read(reader)?.originalLineRange;\n\t\t\tif (!range) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst stickyScrollHeight = this._stickyScrollHeight.read(reader);\n\t\t\tconst top = this._editor.getTopForLineNumber(range.startLineNumber) - this._editorObs.scrollTop.read(reader);\n\t\t\tif (top <= stickyScrollHeight) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst bottom = this._editor.getTopForLineNumber(range.endLineNumberExclusive) - this._editorObs.scrollTop.read(reader);\n\t\t\tif (bottom >= this._editorObs.layoutInfo.read(reader).height) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\tthis._originalBackgroundColor = observableFromEvent(this, this._themeService.onDidColorThemeChange, () => {\n\t\t\treturn this._themeService.getColorTheme().getColor(originalBackgroundColor) ?? Color.transparent;\n\t\t});\n\t\tthis._editorBackgroundColor = this._uiState.map(s => {\n\t\t\treturn getEditorBackgroundColor(s?.editorType ?? InlineCompletionEditorType.TextEditor);\n\t\t});\n\t\tthis._backgroundSvg = n.svg({\n\t\t\ttransform: 'translate(-0.5 -0.5)',\n\t\t\tstyle: { overflow: 'visible', pointerEvents: 'none', position: 'absolute' },\n\t\t}, [\n\t\t\tn.svgElem('path', {\n\t\t\t\tclass: 'rightOfModifiedBackgroundCoverUp',\n\t\t\t\td: derived(this, reader => {\n\t\t\t\t\tconst layoutInfo = this._previewEditorLayoutInfo.read(reader);\n\t\t\t\t\tif (!layoutInfo) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\tconst originalBackgroundColor = this._originalBackgroundColor.read(reader);\n\t\t\t\t\tif (originalBackgroundColor.isTransparent()) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn new PathBuilder()\n\t\t\t\t\t\t.moveTo(layoutInfo.codeRect.getRightTop())\n\t\t\t\t\t\t.lineTo(layoutInfo.codeRect.getRightTop().deltaX(1000))\n\t\t\t\t\t\t.lineTo(layoutInfo.codeRect.getRightBottom().deltaX(1000))\n\t\t\t\t\t\t.lineTo(layoutInfo.codeRect.getRightBottom())\n\t\t\t\t\t\t.build();\n\t\t\t\t}),\n\t\t\t\tstyle: {\n\t\t\t\t\tfill: this._editorBackgroundColor,\n\t\t\t\t}\n\t\t\t}),\n\t\t]).keepUpdated(this._store);\n\t\tthis._originalOverlay = n.div({\n\t\t\tstyle: { pointerEvents: 'none', display: this._previewEditorLayoutInfo.map(layoutInfo => layoutInfo?.isInsertion ? 'none' : 'block') },\n\t\t}, derived(this, reader => {\n\t\t\tconst layoutInfoObs = mapOutFalsy(this._previewEditorLayoutInfo).read(reader);\n\t\t\tif (!layoutInfoObs) { return undefined; }\n\n\t\t\tconst editorBackground = this._editorBackgroundColor.read(reader);\n\n\t\t\tconst separatorWidth = separatorWidthObs.read(reader);\n\t\t\tconst borderStyling = getOriginalBorderColor(this._tabAction).map(bc => `${BORDER_WIDTH}px solid ${asCssVariable(bc)}`);\n\t\t\tconst borderStylingSeparator = `${BORDER_WIDTH + separatorWidth}px solid ${editorBackground}`;\n\n\t\t\tconst hasBorderLeft = layoutInfoObs.read(reader).codeScrollLeft !== 0;\n\t\t\tconst isModifiedLower = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.bottom < layoutInfo.editRect.bottom);\n\t\t\tconst transitionRectSize = BORDER_RADIUS * 2 + BORDER_WIDTH * 2;\n\n\t\t\t// Create an overlay which hides the left hand side of the original overlay when it overflows to the left\n\t\t\t// such that there is a smooth transition at the edge of content left\n\t\t\tconst overlayHider = layoutInfoObs.map(layoutInfo => Rect.fromLeftTopRightBottom(\n\t\t\t\tlayoutInfo.contentLeft - BORDER_RADIUS - BORDER_WIDTH,\n\t\t\t\tlayoutInfo.codeRect.top,\n\t\t\t\tlayoutInfo.contentLeft,\n\t\t\t\tlayoutInfo.codeRect.bottom + transitionRectSize\n\t\t\t)).read(reader);\n\n\t\t\tconst intersectionLine = new OffsetRange(overlayHider.left, Number.MAX_SAFE_INTEGER);\n\t\t\tconst overlayRect = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.intersectHorizontal(intersectionLine));\n\t\t\tconst separatorRect = overlayRect.map(overlayRect => overlayRect.withMargin(separatorWidth, 0, separatorWidth, separatorWidth).intersectHorizontal(intersectionLine));\n\n\t\t\tconst transitionRect = overlayRect.map(overlayRect => Rect.fromLeftTopWidthHeight(overlayRect.right - transitionRectSize + BORDER_WIDTH, overlayRect.bottom - BORDER_WIDTH, transitionRectSize, transitionRectSize).intersectHorizontal(intersectionLine));\n\n\t\t\treturn [\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalSeparatorSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...separatorRect.read(reader).toStyles(),\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\tborderRadius: `${BORDER_RADIUS}px 0 0 ${BORDER_RADIUS}px`,\n\t\t\t\t\t\tborderTop: borderStylingSeparator,\n\t\t\t\t\t\tborderBottom: borderStylingSeparator,\n\t\t\t\t\t\tborderLeft: hasBorderLeft ? 'none' : borderStylingSeparator,\n\t\t\t\t\t}\n\t\t\t\t}),\n\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalOverlaySideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...overlayRect.read(reader).toStyles(),\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\tborderRadius: `${BORDER_RADIUS}px 0 0 ${BORDER_RADIUS}px`,\n\t\t\t\t\t\tborderTop: borderStyling,\n\t\t\t\t\t\tborderBottom: borderStyling,\n\t\t\t\t\t\tborderLeft: hasBorderLeft ? 'none' : borderStyling,\n\t\t\t\t\t\tbackgroundColor: asCssVariable(originalBackgroundColor),\n\t\t\t\t\t}\n\t\t\t\t}),\n\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalCornerCutoutSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\tdisplay: isModifiedLower.map(isLower => isLower ? 'block' : 'none'),\n\t\t\t\t\t\t...transitionRect.read(reader).toStyles(),\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'originalCornerCutoutBackground',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tposition: 'absolute', top: '0px', left: '0px', width: '100%', height: '100%',\n\t\t\t\t\t\t\tbackgroundColor: getEditorBlendedColor(originalBackgroundColor, this._themeService).map(c => c.toString()),\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'originalCornerCutoutBorder',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tposition: 'absolute', top: '0px', left: '0px', width: '100%', height: '100%',\n\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\tborderTop: borderStyling,\n\t\t\t\t\t\t\tborderRight: borderStyling,\n\t\t\t\t\t\t\tborderRadius: `0 100% 0 0`,\n\t\t\t\t\t\t\tbackgroundColor: editorBackground\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t]),\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalOverlaySideBySideHider',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...overlayHider.toStyles(),\n\t\t\t\t\t\tbackgroundColor: editorBackground,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t];\n\t\t})).keepUpdated(this._store);\n\t\tthis._modifiedOverlay = n.div({\n\t\t\tstyle: { pointerEvents: 'none', }\n\t\t}, derived(this, reader => {\n\t\t\tconst layoutInfoObs = mapOutFalsy(this._previewEditorLayoutInfo).read(reader);\n\t\t\tif (!layoutInfoObs) { return undefined; }\n\n\t\t\tconst isModifiedLower = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.bottom < layoutInfo.editRect.bottom);\n\t\t\tconst editorBackground = this._editorBackgroundColor.read(reader);\n\n\t\t\tconst separatorWidth = separatorWidthObs.read(reader);\n\t\t\tconst borderRadius = isModifiedLower.map(isLower => `0 ${BORDER_RADIUS}px ${BORDER_RADIUS}px ${isLower ? BORDER_RADIUS : 0}px`);\n\t\t\tconst borderStyling = getEditorBlendedColor(getModifiedBorderColor(this._tabAction), this._themeService).map(c => `1px solid ${c.toString()}`);\n\t\t\tconst borderStylingSeparator = `${BORDER_WIDTH + separatorWidth}px solid ${editorBackground}`;\n\n\t\t\tconst overlayRect = layoutInfoObs.map(layoutInfo => layoutInfo.editRect.withMargin(0, BORDER_WIDTH));\n\t\t\tconst separatorRect = overlayRect.map(overlayRect => overlayRect.withMargin(separatorWidth, separatorWidth, separatorWidth, 0));\n\n\t\t\tconst insertionRect = derived(this, reader => {\n\t\t\t\tconst overlay = overlayRect.read(reader);\n\t\t\t\tconst layoutinfo = layoutInfoObs.read(reader);\n\t\t\t\tif (!layoutinfo.isInsertion || layoutinfo.contentLeft >= overlay.left) {\n\t\t\t\t\treturn Rect.fromLeftTopWidthHeight(overlay.left, overlay.top, 0, 0);\n\t\t\t\t}\n\t\t\t\treturn new Rect(layoutinfo.contentLeft, overlay.top, overlay.left, overlay.top + BORDER_WIDTH * 2);\n\t\t\t});\n\n\t\t\treturn [\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'modifiedInsertionSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...insertionRect.read(reader).toStyles(),\n\t\t\t\t\t\tbackgroundColor: getModifiedBorderColor(this._tabAction).map(c => asCssVariable(c)),\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'modifiedSeparatorSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...separatorRect.read(reader).toStyles(),\n\t\t\t\t\t\tborderRadius,\n\t\t\t\t\t\tborderTop: borderStylingSeparator,\n\t\t\t\t\t\tborderBottom: borderStylingSeparator,\n\t\t\t\t\t\tborderRight: borderStylingSeparator,\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'modifiedOverlaySideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...overlayRect.read(reader).toStyles(),\n\t\t\t\t\t\tborderRadius,\n\t\t\t\t\t\tborder: borderStyling,\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\tbackgroundColor: asCssVariable(modifiedBackgroundColor),\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t];\n\t\t})).keepUpdated(this._store);\n\t\tthis._nonOverflowView = n.div({\n\t\t\tclass: 'inline-edits-view',\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\toverflow: 'visible',\n\t\t\t\ttop: '0px',\n\t\t\t\tleft: '0px',\n\t\t\t\tdisplay: this._display,\n\t\t\t},\n\t\t}, [\n\t\t\tthis._backgroundSvg,\n\t\t\tderived(this, reader => this._shouldOverflow.read(reader) ? [] : [this._editorContainer, this._originalOverlay, this._modifiedOverlay]),\n\t\t]).keepUpdated(this._store);\n\n\t\tthis._register(this._editorObs.createOverlayWidget({\n\t\t\tdomNode: this._nonOverflowView.element,\n\t\t\tposition: constObservable(null),\n\t\t\tallowEditorOverflow: false,\n\t\t\tminContentWidthInPx: derived(this, reader => {\n\t\t\t\tconst x = this._previewEditorLayoutInfo.read(reader)?.maxContentWidth;\n\t\t\t\tif (x === undefined) { return 0; }\n\t\t\t\treturn x;\n\t\t\t}),\n\t\t}));\n\n\t\tthis.previewEditor.setModel(this._previewTextModel);\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst layoutInfo = this._previewEditorLayoutInfo.read(reader);\n\t\t\tif (!layoutInfo) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst editorRect = layoutInfo.editRect.withMargin(-VERTICAL_PADDING, -HORIZONTAL_PADDING);\n\n\t\t\tthis.previewEditor.layout({ height: editorRect.height, width: layoutInfo.previewEditorWidth + 15 /* Make sure editor does not scroll horizontally */ });\n\t\t\tthis._editorContainer.element.style.top = `${editorRect.top}px`;\n\t\t\tthis._editorContainer.element.style.left = `${editorRect.left}px`;\n\t\t\tthis._editorContainer.element.style.width = `${layoutInfo.previewEditorWidth + HORIZONTAL_PADDING}px`; // Set width to clip view zone\n\t\t\t//this._editorContainer.element.style.borderRadius = `0 ${BORDER_RADIUS}px ${BORDER_RADIUS}px 0`;\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst layoutInfo = this._previewEditorLayoutInfo.read(reader);\n\t\t\tif (!layoutInfo) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._previewEditorObs.editor.setScrollLeft(layoutInfo.desiredPreviewEditorScrollLeft);\n\t\t}));\n\n\t\tthis._updatePreviewEditor.recomputeInitiallyAndOnChange(this._store);\n\t}\n\n\tprivate readonly _display;\n\n\tprivate readonly previewRef;\n\n\tprivate readonly _editorContainer;\n\n\tpublic readonly isHovered;\n\n\tpublic readonly previewEditor;\n\n\tprivate readonly _previewEditorObs;\n\n\tprivate _activeViewZones: string[];\n\tprivate readonly _updatePreviewEditor;\n\n\tprivate readonly _previewEditorWidth;\n\n\tprivate readonly _cursorPosIfTouchesEdit;\n\n\tprivate readonly _originalStartPosition;\n\n\tprivate readonly _originalEndPosition;\n\n\tprivate readonly _originalVerticalStartPosition;\n\tprivate readonly _originalVerticalEndPosition;\n\n\tprivate readonly _originalDisplayRange;\n\tprivate readonly _editorMaxContentWidthInRange;\n\n\tprivate readonly _previewEditorLayoutInfo;\n\n\tprivate _stickyScrollController;\n\tprivate readonly _stickyScrollHeight;\n\n\tprivate readonly _shouldOverflow;\n\n\tprivate readonly _originalBackgroundColor;\n\n\tprivate readonly _editorBackgroundColor;\n\n\tprivate readonly _backgroundSvg;\n\n\tprivate readonly _originalOverlay;\n\n\tprivate readonly _modifiedOverlay;\n\n\tprivate readonly _nonOverflowView;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { $, getWindow, n } from '../../../../../../../base/browser/dom.js';\nimport { Color } from '../../../../../../../base/common/color.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { IObservable, IReader, autorun, constObservable, derived, derivedObservableWithCache, observableFromEvent } from '../../../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../../../platform/instantiation/common/instantiation.js';\nimport { asCssVariable } from '../../../../../../../platform/theme/common/colorUtils.js';\nimport { IThemeService } from '../../../../../../../platform/theme/common/themeService.js';\nimport { ICodeEditor } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { EmbeddedCodeEditorWidget } from '../../../../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../../../common/core/position.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { ITextModel } from '../../../../../../common/model.js';\nimport { StickyScrollController } from '../../../../../stickyScroll/browser/stickyScrollController.js';\nimport { InlineCompletionContextKeys } from '../../../controller/inlineCompletionContextKeys.js';\nimport { IInlineEditsView, InlineEditClickEvent, InlineEditTabAction } from '../inlineEditsViewInterface.js';\nimport { InlineEditWithChanges } from '../inlineEditWithChanges.js';\nimport { getEditorBackgroundColor, getEditorBlendedColor, getModifiedBorderColor, getOriginalBorderColor, INLINE_EDITS_BORDER_RADIUS, modifiedBackgroundColor, originalBackgroundColor } from '../theme.js';\nimport { PathBuilder, getContentRenderWidth, getOffsetForPos, mapOutFalsy, maxContentWidthInRange, observeEditorBoundingClientRect } from '../utils/utils.js';\nimport { InlineCompletionEditorType } from '../../../model/provideInlineCompletions.js';\n\nconst HORIZONTAL_PADDING = 0;\nconst VERTICAL_PADDING = 0;\nconst ENABLE_OVERFLOW = false;\n\nconst BORDER_WIDTH = 1;\nconst WIDGET_SEPARATOR_WIDTH = 1;\nconst WIDGET_SEPARATOR_DIFF_EDITOR_WIDTH = 3;\nconst BORDER_RADIUS = INLINE_EDITS_BORDER_RADIUS;\nconst ORIGINAL_END_PADDING = 20;\nconst MODIFIED_END_PADDING = 12;\n\nexport class InlineEditsSideBySideView extends Disposable implements IInlineEditsView {\n\n\t// This is an approximation and should be improved by using the real parameters used bellow\n\tstatic fitsInsideViewport(editor: ICodeEditor, textModel: ITextModel, edit: InlineEditWithChanges, reader: IReader): boolean {\n\t\tconst editorObs = observableCodeEditor(editor);\n\t\tconst editorWidth = editorObs.layoutInfoWidth.read(reader);\n\t\tconst editorContentLeft = editorObs.layoutInfoContentLeft.read(reader);\n\t\tconst editorVerticalScrollbar = editor.getLayoutInfo().verticalScrollbarWidth;\n\t\tconst minimapWidth = editorObs.layoutInfoMinimap.read(reader).minimapLeft !== 0 ? editorObs.layoutInfoMinimap.read(reader).minimapWidth : 0;\n\n\t\tconst maxOriginalContent = maxContentWidthInRange(editorObs, edit.displayRange, undefined/* do not reconsider on each layout info change */);\n\t\tconst maxModifiedContent = edit.lineEdit.newLines.reduce((max, line) => Math.max(max, getContentRenderWidth(line, editor, textModel)), 0);\n\t\tconst originalPadding = ORIGINAL_END_PADDING; // padding after last line of original editor\n\t\tconst modifiedPadding = MODIFIED_END_PADDING + 2 * BORDER_WIDTH; // padding after last line of modified editor\n\n\t\treturn maxOriginalContent + maxModifiedContent + originalPadding + modifiedPadding < editorWidth - editorContentLeft - editorVerticalScrollbar - minimapWidth;\n\t}\n\n\tprivate readonly _editorObs;\n\n\tprivate readonly _onDidClick = this._register(new Emitter<InlineEditClickEvent>());\n\treadonly onDidClick = this._onDidClick.event;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _edit: IObservable<InlineEditWithChanges | undefined>,\n\t\tprivate readonly _previewTextModel: ITextModel,\n\t\tprivate readonly _uiState: IObservable<{\n\t\t\tnewTextLineCount: number;\n\t\t\teditorType: InlineCompletionEditorType;\n\t\t} | undefined>,\n\t\tprivate readonly _tabAction: IObservable<InlineEditTabAction>,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t\t@IThemeService private readonly _themeService: IThemeService,\n\t) {\n\t\tsuper();\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\t\tthis._display = derived(this, reader => !!this._uiState.read(reader) ? 'block' : 'none');\n\t\tthis.previewRef = n.ref<HTMLDivElement>();\n\t\tconst separatorWidthObs = this._uiState.map(s => s?.editorType === InlineCompletionEditorType.DiffEditor ? WIDGET_SEPARATOR_DIFF_EDITOR_WIDTH : WIDGET_SEPARATOR_WIDTH);\n\t\tthis._editorContainer = n.div({\n\t\t\tclass: ['editorContainer'],\n\t\t\tstyle: { position: 'absolute', overflow: 'hidden', cursor: 'pointer' },\n\t\t\tonmousedown: e => {\n\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t},\n\t\t\tonclick: (e) => {\n\t\t\t\tthis._onDidClick.fire(InlineEditClickEvent.create(e));\n\t\t\t}\n\t\t}, [\n\t\t\tn.div({ class: 'preview', style: { pointerEvents: 'none' }, ref: this.previewRef }),\n\t\t]).keepUpdated(this._store);\n\t\tthis.isHovered = this._editorContainer.didMouseMoveDuringHover;\n\t\tthis.previewEditor = this._register(this._instantiationService.createInstance(\n\t\t\tEmbeddedCodeEditorWidget,\n\t\t\tthis.previewRef.element,\n\t\t\t{\n\t\t\t\tglyphMargin: false,\n\t\t\t\tlineNumbers: 'off',\n\t\t\t\tminimap: { enabled: false },\n\t\t\t\tguides: {\n\t\t\t\t\tindentation: false,\n\t\t\t\t\tbracketPairs: false,\n\t\t\t\t\tbracketPairsHorizontal: false,\n\t\t\t\t\thighlightActiveIndentation: false,\n\t\t\t\t},\n\t\t\t\teditContext: false, // is a bit faster\n\t\t\t\trulers: [],\n\t\t\t\tpadding: { top: 0, bottom: 0 },\n\t\t\t\tfolding: false,\n\t\t\t\tselectOnLineNumbers: false,\n\t\t\t\tselectionHighlight: false,\n\t\t\t\tcolumnSelection: false,\n\t\t\t\toverviewRulerBorder: false,\n\t\t\t\toverviewRulerLanes: 0,\n\t\t\t\tlineDecorationsWidth: 0,\n\t\t\t\tlineNumbersMinChars: 0,\n\t\t\t\trevealHorizontalRightPadding: 0,\n\t\t\t\tbracketPairColorization: { enabled: true, independentColorPoolPerBracketType: false },\n\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\tscrollbar: {\n\t\t\t\t\tvertical: 'hidden',\n\t\t\t\t\thorizontal: 'hidden',\n\t\t\t\t\thandleMouseWheel: false,\n\t\t\t\t},\n\t\t\t\treadOnly: true,\n\t\t\t\twordWrap: 'off',\n\t\t\t\twordWrapOverride1: 'off',\n\t\t\t\twordWrapOverride2: 'off',\n\t\t\t},\n\t\t\t{\n\t\t\t\tcontextKeyValues: {\n\t\t\t\t\t[InlineCompletionContextKeys.inInlineEditsPreviewEditor.key]: true,\n\t\t\t\t},\n\t\t\t\tcontributions: [],\n\t\t\t},\n\t\t\tthis._editor\n\t\t));\n\t\tthis._previewEditorObs = observableCodeEditor(this.previewEditor);\n\t\tthis._activeViewZones = [];\n\t\tthis._updatePreviewEditor = derived(this, reader => {\n\t\t\tthis._editorContainer.readEffect(reader);\n\t\t\tthis._previewEditorObs.model.read(reader); // update when the model is set\n\n\t\t\t// Setting this here explicitly to make sure that the preview editor is\n\t\t\t// visible when needed, we're also checking that these fields are defined\n\t\t\t// because of the auto run initial\n\t\t\t// Before removing these, verify with a non-monospace font family\n\t\t\tthis._display.read(reader);\n\t\t\tif (this._nonOverflowView) {\n\t\t\t\tthis._nonOverflowView.element.style.display = this._display.read(reader);\n\t\t\t}\n\n\t\t\tconst uiState = this._uiState.read(reader);\n\t\t\tconst edit = this._edit.read(reader);\n\t\t\tif (!uiState || !edit) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst range = edit.originalLineRange;\n\n\t\t\tconst hiddenAreas: Range[] = [];\n\t\t\tif (range.startLineNumber > 1) {\n\t\t\t\thiddenAreas.push(new Range(1, 1, range.startLineNumber - 1, 1));\n\t\t\t}\n\t\t\tif (range.startLineNumber + uiState.newTextLineCount < this._previewTextModel.getLineCount() + 1) {\n\t\t\t\thiddenAreas.push(new Range(range.startLineNumber + uiState.newTextLineCount, 1, this._previewTextModel.getLineCount() + 1, 1));\n\t\t\t}\n\n\t\t\tthis.previewEditor.setHiddenAreas(hiddenAreas, undefined, true);\n\n\t\t\t// TODO: is this the proper way to handle viewzones?\n\t\t\tconst previousViewZones = [...this._activeViewZones];\n\t\t\tthis._activeViewZones = [];\n\n\t\t\tconst reducedLinesCount = (range.endLineNumberExclusive - range.startLineNumber) - uiState.newTextLineCount;\n\t\t\tthis.previewEditor.changeViewZones((changeAccessor) => {\n\t\t\t\tpreviousViewZones.forEach(id => changeAccessor.removeZone(id));\n\n\t\t\t\tif (reducedLinesCount > 0) {\n\t\t\t\t\tthis._activeViewZones.push(changeAccessor.addZone({\n\t\t\t\t\t\tafterLineNumber: range.startLineNumber + uiState.newTextLineCount - 1,\n\t\t\t\t\t\theightInLines: reducedLinesCount,\n\t\t\t\t\t\tshowInHiddenAreas: true,\n\t\t\t\t\t\tdomNode: $('div.diagonal-fill.inline-edits-view-zone'),\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tthis._previewEditorWidth = derived(this, reader => {\n\t\t\tconst edit = this._edit.read(reader);\n\t\t\tif (!edit) { return 0; }\n\t\t\tthis._updatePreviewEditor.read(reader);\n\n\t\t\treturn maxContentWidthInRange(this._previewEditorObs, edit.modifiedLineRange, reader);\n\t\t});\n\t\tthis._cursorPosIfTouchesEdit = derived(this, reader => {\n\t\t\tconst cursorPos = this._editorObs.cursorPosition.read(reader);\n\t\t\tconst edit = this._edit.read(reader);\n\t\t\tif (!edit || !cursorPos) { return undefined; }\n\t\t\treturn edit.modifiedLineRange.contains(cursorPos.lineNumber) ? cursorPos : undefined;\n\t\t});\n\t\tthis._originalStartPosition = derived(this, (reader) => {\n\t\t\tconst inlineEdit = this._edit.read(reader);\n\t\t\treturn inlineEdit ? new Position(inlineEdit.originalLineRange.startLineNumber, 1) : null;\n\t\t});\n\t\tthis._originalEndPosition = derived(this, (reader) => {\n\t\t\tconst inlineEdit = this._edit.read(reader);\n\t\t\treturn inlineEdit ? new Position(inlineEdit.originalLineRange.endLineNumberExclusive, 1) : null;\n\t\t});\n\t\tthis._originalVerticalStartPosition = this._editorObs.observePosition(this._originalStartPosition, this._store).map(p => p?.y);\n\t\tthis._originalVerticalEndPosition = this._editorObs.observePosition(this._originalEndPosition, this._store).map(p => p?.y);\n\t\tthis._originalDisplayRange = this._edit.map(e => e?.displayRange);\n\t\tthis._editorMaxContentWidthInRange = derived(this, reader => {\n\t\t\tconst originalDisplayRange = this._originalDisplayRange.read(reader);\n\t\t\tif (!originalDisplayRange) {\n\t\t\t\treturn constObservable(0);\n\t\t\t}\n\t\t\tthis._editorObs.versionId.read(reader);\n\n\t\t\t// Take the max value that we observed.\n\t\t\t// Reset when either the edit changes or the editor text version.\n\t\t\treturn derivedObservableWithCache<number>(this, (reader, lastValue) => {\n\t\t\t\tconst maxWidth = maxContentWidthInRange(this._editorObs, originalDisplayRange, reader);\n\t\t\t\treturn Math.max(maxWidth, lastValue ?? 0);\n\t\t\t});\n\t\t}).map((v, r) => v.read(r));\n\n\t\tconst editorDomContentRect = observeEditorBoundingClientRect(this._editor, this._store);\n\n\t\tthis._previewEditorLayoutInfo = derived(this, (reader) => {\n\t\t\tconst inlineEdit = this._edit.read(reader);\n\t\t\tif (!inlineEdit) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst state = this._uiState.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst range = inlineEdit.originalLineRange;\n\n\t\t\tconst horizontalScrollOffset = this._editorObs.scrollLeft.read(reader);\n\n\t\t\tconst editorContentMaxWidthInRange = this._editorMaxContentWidthInRange.read(reader);\n\t\t\tconst editorLayout = this._editorObs.layoutInfo.read(reader);\n\t\t\tconst previewContentWidth = this._previewEditorWidth.read(reader);\n\t\t\tconst editorContentAreaWidth = editorLayout.contentWidth - editorLayout.verticalScrollbarWidth;\n\t\t\tconst editorBoundingClientRect = editorDomContentRect.read(reader);\n\t\t\tconst clientContentAreaRight = editorLayout.contentLeft + editorLayout.contentWidth + editorBoundingClientRect.left;\n\t\t\tconst remainingWidthRightOfContent = getWindow(this._editor.getContainerDomNode()).innerWidth - clientContentAreaRight;\n\t\t\tconst remainingWidthRightOfEditor = getWindow(this._editor.getContainerDomNode()).innerWidth - editorBoundingClientRect.right;\n\t\t\tconst desiredMinimumWidth = Math.min(editorLayout.contentWidth * 0.3, previewContentWidth, 100);\n\t\t\tconst IN_EDITOR_DISPLACEMENT = 0;\n\t\t\tconst maximumAvailableWidth = IN_EDITOR_DISPLACEMENT + remainingWidthRightOfContent;\n\n\t\t\tconst cursorPos = this._cursorPosIfTouchesEdit.read(reader);\n\n\t\t\tconst maxPreviewEditorLeft = Math.max(\n\t\t\t\t// We're starting from the content area right and moving it left by IN_EDITOR_DISPLACEMENT and also by an amount to ensure some minimum desired width\n\t\t\t\teditorContentAreaWidth + horizontalScrollOffset - IN_EDITOR_DISPLACEMENT - Math.max(0, desiredMinimumWidth - maximumAvailableWidth),\n\t\t\t\t// But we don't want that the moving left ends up covering the cursor, so this will push it to the right again\n\t\t\t\tMath.min(\n\t\t\t\t\tcursorPos ? getOffsetForPos(this._editorObs, cursorPos, reader) + 50 : 0,\n\t\t\t\t\teditorContentAreaWidth + horizontalScrollOffset\n\t\t\t\t)\n\t\t\t);\n\t\t\tconst previewEditorLeftInTextArea = Math.min(editorContentMaxWidthInRange + ORIGINAL_END_PADDING, maxPreviewEditorLeft);\n\n\t\t\tconst maxContentWidth = editorContentMaxWidthInRange + ORIGINAL_END_PADDING + previewContentWidth + 70;\n\n\t\t\tconst dist = maxPreviewEditorLeft - previewEditorLeftInTextArea;\n\n\t\t\tlet desiredPreviewEditorScrollLeft;\n\t\t\tlet codeRight;\n\t\t\tif (previewEditorLeftInTextArea > horizontalScrollOffset) {\n\t\t\t\tdesiredPreviewEditorScrollLeft = 0;\n\t\t\t\tcodeRight = editorLayout.contentLeft + previewEditorLeftInTextArea - horizontalScrollOffset;\n\t\t\t} else {\n\t\t\t\tdesiredPreviewEditorScrollLeft = horizontalScrollOffset - previewEditorLeftInTextArea;\n\t\t\t\tcodeRight = editorLayout.contentLeft;\n\t\t\t}\n\n\t\t\tconst selectionTop = this._originalVerticalStartPosition.read(reader) ?? this._editor.getTopForLineNumber(range.startLineNumber) - this._editorObs.scrollTop.read(reader);\n\t\t\tconst selectionBottom = this._originalVerticalEndPosition.read(reader) ?? this._editor.getBottomForLineNumber(range.endLineNumberExclusive - 1) - this._editorObs.scrollTop.read(reader);\n\n\t\t\t// TODO: const { prefixLeftOffset } = getPrefixTrim(inlineEdit.edit.edits.map(e => e.range), inlineEdit.originalLineRange, [], this._editor);\n\t\t\tconst codeLeft = editorLayout.contentLeft - horizontalScrollOffset;\n\n\t\t\tlet codeRect = Rect.fromLeftTopRightBottom(codeLeft, selectionTop, codeRight, selectionBottom);\n\t\t\tconst isInsertion = codeRect.height === 0;\n\t\t\tif (!isInsertion) {\n\t\t\t\tcodeRect = codeRect.withMargin(VERTICAL_PADDING, HORIZONTAL_PADDING);\n\t\t\t}\n\n\t\t\tconst previewLineHeights = this._previewEditorObs.observeLineHeightsForLineRange(inlineEdit.modifiedLineRange).read(reader);\n\t\t\tconst editHeight = previewLineHeights.reduce((acc, h) => acc + h, 0);\n\t\t\tconst codeHeight = selectionBottom - selectionTop;\n\t\t\tconst previewEditorHeight = Math.max(codeHeight, editHeight);\n\n\t\t\tconst clipped = dist === 0;\n\t\t\tconst codeEditDist = 0;\n\t\t\tconst previewEditorWidth = Math.min(previewContentWidth + MODIFIED_END_PADDING, remainingWidthRightOfEditor + editorLayout.width - editorLayout.contentLeft - codeEditDist);\n\n\t\t\tlet editRect = Rect.fromLeftTopWidthHeight(codeRect.right + codeEditDist, selectionTop, previewEditorWidth, previewEditorHeight);\n\t\t\tif (!isInsertion) {\n\t\t\t\teditRect = editRect.withMargin(VERTICAL_PADDING, HORIZONTAL_PADDING).translateX(HORIZONTAL_PADDING + BORDER_WIDTH);\n\t\t\t} else {\n\t\t\t\t// Align top of edit with insertion line\n\t\t\t\teditRect = editRect.withMargin(VERTICAL_PADDING, HORIZONTAL_PADDING).translateY(VERTICAL_PADDING);\n\t\t\t}\n\n\t\t\t// debugView(debugLogRects({ codeRect, editRect }, this._editor.getDomNode()!), reader);\n\n\t\t\treturn {\n\t\t\t\tcodeRect,\n\t\t\t\teditRect,\n\t\t\t\tcodeScrollLeft: horizontalScrollOffset,\n\t\t\t\tcontentLeft: editorLayout.contentLeft,\n\n\t\t\t\tisInsertion,\n\t\t\t\tmaxContentWidth,\n\t\t\t\tshouldShowShadow: clipped,\n\t\t\t\tdesiredPreviewEditorScrollLeft,\n\t\t\t\tpreviewEditorWidth,\n\t\t\t};\n\t\t});\n\t\tthis._stickyScrollController = StickyScrollController.get(this._editorObs.editor);\n\t\tthis._stickyScrollHeight = this._stickyScrollController ? observableFromEvent(this._stickyScrollController.onDidChangeStickyScrollHeight, () => this._stickyScrollController!.stickyScrollWidgetHeight) : constObservable(0);\n\t\tthis._shouldOverflow = derived(this, reader => {\n\t\t\tif (!ENABLE_OVERFLOW) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst range = this._edit.read(reader)?.originalLineRange;\n\t\t\tif (!range) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst stickyScrollHeight = this._stickyScrollHeight.read(reader);\n\t\t\tconst top = this._editor.getTopForLineNumber(range.startLineNumber) - this._editorObs.scrollTop.read(reader);\n\t\t\tif (top <= stickyScrollHeight) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst bottom = this._editor.getTopForLineNumber(range.endLineNumberExclusive) - this._editorObs.scrollTop.read(reader);\n\t\t\tif (bottom >= this._editorObs.layoutInfo.read(reader).height) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\tthis._originalBackgroundColor = observableFromEvent(this, this._themeService.onDidColorThemeChange, () => {\n\t\t\treturn this._themeService.getColorTheme().getColor(originalBackgroundColor) ?? Color.transparent;\n\t\t});\n\t\tthis._editorBackgroundColor = this._uiState.map(s => {\n\t\t\treturn getEditorBackgroundColor(s?.editorType ?? InlineCompletionEditorType.TextEditor);\n\t\t});\n\t\tthis._backgroundSvg = n.svg({\n\t\t\ttransform: 'translate(-0.5 -0.5)',\n\t\t\tstyle: { overflow: 'visible', pointerEvents: 'none', position: 'absolute' },\n\t\t}, [\n\t\t\tn.svgElem('path', {\n\t\t\t\tclass: 'rightOfModifiedBackgroundCoverUp',\n\t\t\t\td: derived(this, reader => {\n\t\t\t\t\tconst layoutInfo = this._previewEditorLayoutInfo.read(reader);\n\t\t\t\t\tif (!layoutInfo) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\tconst originalBackgroundColor = this._originalBackgroundColor.read(reader);\n\t\t\t\t\tif (originalBackgroundColor.isTransparent()) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn new PathBuilder()\n\t\t\t\t\t\t.moveTo(layoutInfo.codeRect.getRightTop())\n\t\t\t\t\t\t.lineTo(layoutInfo.codeRect.getRightTop().deltaX(1000))\n\t\t\t\t\t\t.lineTo(layoutInfo.codeRect.getRightBottom().deltaX(1000))\n\t\t\t\t\t\t.lineTo(layoutInfo.codeRect.getRightBottom())\n\t\t\t\t\t\t.build();\n\t\t\t\t}),\n\t\t\t\tstyle: {\n\t\t\t\t\tfill: this._editorBackgroundColor,\n\t\t\t\t}\n\t\t\t}),\n\t\t]).keepUpdated(this._store);\n\t\tthis._originalOverlay = n.div({\n\t\t\tstyle: { pointerEvents: 'none', display: this._previewEditorLayoutInfo.map(layoutInfo => layoutInfo?.isInsertion ? 'none' : 'block') },\n\t\t}, derived(this, reader => {\n\t\t\tconst layoutInfoObs = mapOutFalsy(this._previewEditorLayoutInfo).read(reader);\n\t\t\tif (!layoutInfoObs) { return undefined; }\n\n\t\t\tconst editorBackground = this._editorBackgroundColor.read(reader);\n\n\t\t\tconst separatorWidth = separatorWidthObs.read(reader);\n\t\t\tconst borderStyling = getOriginalBorderColor(this._tabAction).map(bc => `${BORDER_WIDTH}px solid ${asCssVariable(bc)}`);\n\t\t\tconst borderStylingSeparator = `${BORDER_WIDTH + separatorWidth}px solid ${editorBackground}`;\n\n\t\t\tconst hasBorderLeft = layoutInfoObs.read(reader).codeScrollLeft !== 0;\n\t\t\tconst isModifiedLower = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.bottom < layoutInfo.editRect.bottom);\n\t\t\tconst transitionRectSize = BORDER_RADIUS * 2 + BORDER_WIDTH * 2;\n\n\t\t\t// Create an overlay which hides the left hand side of the original overlay when it overflows to the left\n\t\t\t// such that there is a smooth transition at the edge of content left\n\t\t\tconst overlayHider = layoutInfoObs.map(layoutInfo => Rect.fromLeftTopRightBottom(\n\t\t\t\tlayoutInfo.contentLeft - BORDER_RADIUS - BORDER_WIDTH,\n\t\t\t\tlayoutInfo.codeRect.top,\n\t\t\t\tlayoutInfo.contentLeft,\n\t\t\t\tlayoutInfo.codeRect.bottom + transitionRectSize\n\t\t\t)).read(reader);\n\n\t\t\tconst intersectionLine = new OffsetRange(overlayHider.left, Number.MAX_SAFE_INTEGER);\n\t\t\tconst overlayRect = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.intersectHorizontal(intersectionLine));\n\t\t\tconst separatorRect = overlayRect.map(overlayRect => overlayRect.withMargin(separatorWidth, 0, separatorWidth, separatorWidth).intersectHorizontal(intersectionLine));\n\n\t\t\tconst transitionRect = overlayRect.map(overlayRect => Rect.fromLeftTopWidthHeight(overlayRect.right - transitionRectSize + BORDER_WIDTH, overlayRect.bottom - BORDER_WIDTH, transitionRectSize, transitionRectSize).intersectHorizontal(intersectionLine));\n\n\t\t\treturn [\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalSeparatorSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...separatorRect.read(reader).toStyles(),\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\tborderRadius: `${BORDER_RADIUS}px 0 0 ${BORDER_RADIUS}px`,\n\t\t\t\t\t\tborderTop: borderStylingSeparator,\n\t\t\t\t\t\tborderBottom: borderStylingSeparator,\n\t\t\t\t\t\tborderLeft: hasBorderLeft ? 'none' : borderStylingSeparator,\n\t\t\t\t\t}\n\t\t\t\t}),\n\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalOverlaySideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...overlayRect.read(reader).toStyles(),\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\tborderRadius: `${BORDER_RADIUS}px 0 0 ${BORDER_RADIUS}px`,\n\t\t\t\t\t\tborderTop: borderStyling,\n\t\t\t\t\t\tborderBottom: borderStyling,\n\t\t\t\t\t\tborderLeft: hasBorderLeft ? 'none' : borderStyling,\n\t\t\t\t\t\tbackgroundColor: asCssVariable(originalBackgroundColor),\n\t\t\t\t\t}\n\t\t\t\t}),\n\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalCornerCutoutSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\tdisplay: isModifiedLower.map(isLower => isLower ? 'block' : 'none'),\n\t\t\t\t\t\t...transitionRect.read(reader).toStyles(),\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'originalCornerCutoutBackground',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tposition: 'absolute', top: '0px', left: '0px', width: '100%', height: '100%',\n\t\t\t\t\t\t\tbackgroundColor: getEditorBlendedColor(originalBackgroundColor, this._themeService).map(c => c.toString()),\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'originalCornerCutoutBorder',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tposition: 'absolute', top: '0px', left: '0px', width: '100%', height: '100%',\n\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\tborderTop: borderStyling,\n\t\t\t\t\t\t\tborderRight: borderStyling,\n\t\t\t\t\t\t\tborderRadius: `0 100% 0 0`,\n\t\t\t\t\t\t\tbackgroundColor: editorBackground\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t]),\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'originalOverlaySideBySideHider',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...overlayHider.toStyles(),\n\t\t\t\t\t\tbackgroundColor: editorBackground,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t];\n\t\t})).keepUpdated(this._store);\n\t\tthis._modifiedOverlay = n.div({\n\t\t\tstyle: { pointerEvents: 'none', }\n\t\t}, derived(this, reader => {\n\t\t\tconst layoutInfoObs = mapOutFalsy(this._previewEditorLayoutInfo).read(reader);\n\t\t\tif (!layoutInfoObs) { return undefined; }\n\n\t\t\tconst isModifiedLower = layoutInfoObs.map(layoutInfo => layoutInfo.codeRect.bottom < layoutInfo.editRect.bottom);\n\t\t\tconst editorBackground = this._editorBackgroundColor.read(reader);\n\n\t\t\tconst separatorWidth = separatorWidthObs.read(reader);\n\t\t\tconst borderRadius = isModifiedLower.map(isLower => `0 ${BORDER_RADIUS}px ${BORDER_RADIUS}px ${isLower ? BORDER_RADIUS : 0}px`);\n\t\t\tconst borderStyling = getEditorBlendedColor(getModifiedBorderColor(this._tabAction), this._themeService).map(c => `1px solid ${c.toString()}`);\n\t\t\tconst borderStylingSeparator = `${BORDER_WIDTH + separatorWidth}px solid ${editorBackground}`;\n\n\t\t\tconst overlayRect = layoutInfoObs.map(layoutInfo => layoutInfo.editRect.withMargin(0, BORDER_WIDTH));\n\t\t\tconst separatorRect = overlayRect.map(overlayRect => overlayRect.withMargin(separatorWidth, separatorWidth, separatorWidth, 0));\n\n\t\t\tconst insertionRect = derived(this, reader => {\n\t\t\t\tconst overlay = overlayRect.read(reader);\n\t\t\t\tconst layoutinfo = layoutInfoObs.read(reader);\n\t\t\t\tif (!layoutinfo.isInsertion || layoutinfo.contentLeft >= overlay.left) {\n\t\t\t\t\treturn Rect.fromLeftTopWidthHeight(overlay.left, overlay.top, 0, 0);\n\t\t\t\t}\n\t\t\t\treturn new Rect(layoutinfo.contentLeft, overlay.top, overlay.left, overlay.top + BORDER_WIDTH * 2);\n\t\t\t});\n\n\t\t\treturn [\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'modifiedInsertionSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...insertionRect.read(reader).toStyles(),\n\t\t\t\t\t\tbackgroundColor: getModifiedBorderColor(this._tabAction).map(c => asCssVariable(c)),\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'modifiedSeparatorSideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...separatorRect.read(reader).toStyles(),\n\t\t\t\t\t\tborderRadius,\n\t\t\t\t\t\tborderTop: borderStylingSeparator,\n\t\t\t\t\t\tborderBottom: borderStylingSeparator,\n\t\t\t\t\t\tborderRight: borderStylingSeparator,\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tn.div({\n\t\t\t\t\tclass: 'modifiedOverlaySideBySide',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...overlayRect.read(reader).toStyles(),\n\t\t\t\t\t\tborderRadius,\n\t\t\t\t\t\tborder: borderStyling,\n\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\tbackgroundColor: asCssVariable(modifiedBackgroundColor),\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t];\n\t\t})).keepUpdated(this._store);\n\t\tthis._nonOverflowView = n.div({\n\t\t\tclass: 'inline-edits-view',\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\toverflow: 'visible',\n\t\t\t\ttop: '0px',\n\t\t\t\tleft: '0px',\n\t\t\t\tdisplay: this._display,\n\t\t\t},\n\t\t}, [\n\t\t\tthis._backgroundSvg,\n\t\t\tderived(this, reader => this._shouldOverflow.read(reader) ? [] : [this._editorContainer, this._originalOverlay, this._modifiedOverlay]),\n\t\t]).keepUpdated(this._store);\n\n\t\tthis._register(this._editorObs.createOverlayWidget({\n\t\t\tdomNode: this._nonOverflowView.element,\n\t\t\tposition: constObservable(null),\n\t\t\tallowEditorOverflow: false,\n\t\t\tminContentWidthInPx: derived(this, reader => {\n\t\t\t\tconst x = this._previewEditorLayoutInfo.read(reader)?.maxContentWidth;\n\t\t\t\tif (x === undefined) { return 0; }\n\t\t\t\treturn x;\n\t\t\t}),\n\t\t}));\n\n\t\tthis.previewEditor.setModel(this._previewTextModel);\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst layoutInfo = this._previewEditorLayoutInfo.read(reader);\n\t\t\tif (!layoutInfo) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst editorRect = layoutInfo.editRect.withMargin(-VERTICAL_PADDING, -HORIZONTAL_PADDING);\n\n\t\t\tthis.previewEditor.layout({ height: editorRect.height, width: layoutInfo.previewEditorWidth + 15 /* Make sure editor does not scroll horizontally */ });\n\t\t\tthis._editorContainer.element.style.top = `${editorRect.top}px`;\n\t\t\tthis._editorContainer.element.style.left = `${editorRect.left}px`;\n\t\t\tthis._editorContainer.element.style.width = `${layoutInfo.previewEditorWidth + HORIZONTAL_PADDING}px`; // Set width to clip view zone\n\t\t\t//this._editorContainer.element.style.borderRadius = `0 ${BORDER_RADIUS}px ${BORDER_RADIUS}px 0`;\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst layoutInfo = this._previewEditorLayoutInfo.read(reader);\n\t\t\tif (!layoutInfo) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._previewEditorObs.editor.setScrollLeft(layoutInfo.desiredPreviewEditorScrollLeft);\n\t\t}));\n\n\t\tthis._updatePreviewEditor.recomputeInitiallyAndOnChange(this._store);\n\t}\n\n\tprivate readonly _display;\n\n\tprivate readonly previewRef;\n\n\tprivate readonly _editorContainer;\n\n\tpublic readonly isHovered;\n\n\tpublic readonly previewEditor;\n\n\tprivate readonly _previewEditorObs;\n\n\tprivate _activeViewZones: string[];\n\tprivate readonly _updatePreviewEditor;\n\n\tprivate readonly _previewEditorWidth;\n\n\tprivate readonly _cursorPosIfTouchesEdit;\n\n\tprivate readonly _originalStartPosition;\n\n\tprivate readonly _originalEndPosition;\n\n\tprivate readonly _originalVerticalStartPosition;\n\tprivate readonly _originalVerticalEndPosition;\n\n\tprivate readonly _originalDisplayRange;\n\tprivate readonly _editorMaxContentWidthInRange;\n\n\tprivate readonly _previewEditorLayoutInfo;\n\n\tprivate _stickyScrollController;\n\tprivate readonly _stickyScrollHeight;\n\n\tprivate readonly _shouldOverflow;\n\n\tprivate readonly _originalBackgroundColor;\n\n\tprivate readonly _editorBackgroundColor;\n\n\tprivate readonly _backgroundSvg;\n\n\tprivate readonly _originalOverlay;\n\n\tprivate readonly _modifiedOverlay;\n\n\tprivate readonly _nonOverflowView;\n}\n"]}
|
|
@@ -21,7 +21,7 @@ import { OS } from '../../../../../../../base/common/platform.js';
|
|
|
21
21
|
import { localize } from '../../../../../../../nls.js';
|
|
22
22
|
import { IHoverService } from '../../../../../../../platform/hover/browser/hover.js';
|
|
23
23
|
import { IKeybindingService } from '../../../../../../../platform/keybinding/common/keybinding.js';
|
|
24
|
-
import {
|
|
24
|
+
import { editorHoverForeground } from '../../../../../../../platform/theme/common/colorRegistry.js';
|
|
25
25
|
import { contrastBorder } from '../../../../../../../platform/theme/common/colors/baseColors.js';
|
|
26
26
|
import { asCssVariable } from '../../../../../../../platform/theme/common/colorUtils.js';
|
|
27
27
|
import { IThemeService } from '../../../../../../../platform/theme/common/themeService.js';
|
|
@@ -34,11 +34,12 @@ import { ILanguageService } from '../../../../../../common/languages/language.js
|
|
|
34
34
|
import { LineTokens, TokenArray } from '../../../../../../common/tokens/lineTokens.js';
|
|
35
35
|
import { inlineSuggestCommitAlternativeActionId } from '../../../controller/commandIds.js';
|
|
36
36
|
import { InlineEditClickEvent } from '../inlineEditsViewInterface.js';
|
|
37
|
-
import { getModifiedBorderColor, getOriginalBorderColor, INLINE_EDITS_BORDER_RADIUS, inlineEditIndicatorPrimaryBackground, inlineEditIndicatorPrimaryBorder, inlineEditIndicatorPrimaryForeground, modifiedChangedTextOverlayColor, observeColor, originalChangedTextOverlayColor } from '../theme.js';
|
|
37
|
+
import { getEditorBackgroundColor, getModifiedBorderColor, getOriginalBorderColor, INLINE_EDITS_BORDER_RADIUS, inlineEditIndicatorPrimaryBackground, inlineEditIndicatorPrimaryBorder, inlineEditIndicatorPrimaryForeground, modifiedChangedTextOverlayColor, observeColor, originalChangedTextOverlayColor } from '../theme.js';
|
|
38
38
|
import { getEditorValidOverlayRect, mapOutFalsy, rectToProps } from '../utils/utils.js';
|
|
39
39
|
export class WordReplacementsViewData {
|
|
40
|
-
constructor(edit, alternativeAction) {
|
|
40
|
+
constructor(edit, editorType, alternativeAction) {
|
|
41
41
|
this.edit = edit;
|
|
42
|
+
this.editorType = editorType;
|
|
42
43
|
this.alternativeAction = alternativeAction;
|
|
43
44
|
}
|
|
44
45
|
equals(other) {
|
|
@@ -108,10 +109,10 @@ let InlineEditsWordReplacementView = class InlineEditsWordReplacementView extend
|
|
|
108
109
|
const count = altCount.read(reader);
|
|
109
110
|
const active = altModifierActive.read(reader);
|
|
110
111
|
const occurrencesLabel = count !== undefined ? count === 1 ?
|
|
111
|
-
localize(
|
|
112
|
-
localize(
|
|
112
|
+
localize(1231, "{0} 1 occurrence", label) :
|
|
113
|
+
localize(1232, "{0} {1} occurrences", label, count)
|
|
113
114
|
: label;
|
|
114
|
-
const keybindingTooltip = localize(
|
|
115
|
+
const keybindingTooltip = localize(1233, "{0} show occurrences", '[shift]');
|
|
115
116
|
alternativeAction = {
|
|
116
117
|
label: count !== undefined ? (active ? occurrencesLabel : label) : label,
|
|
117
118
|
tooltip: occurrencesLabel ? `${occurrencesLabel}\n${keybindingTooltip}` : undefined,
|
|
@@ -175,10 +176,11 @@ let InlineEditsWordReplacementView = class InlineEditsWordReplacementView extend
|
|
|
175
176
|
};
|
|
176
177
|
const passiveStyles = {
|
|
177
178
|
borderColor: hcBorderColor ? hcBorderColor.toString() : observeColor(editorHoverForeground, this._themeService).map(c => c.transparent(0.2).toString()).read(reader),
|
|
178
|
-
backgroundColor:
|
|
179
|
+
backgroundColor: getEditorBackgroundColor(this._viewData.editorType),
|
|
179
180
|
color: '',
|
|
180
181
|
opacity: '0.7',
|
|
181
182
|
};
|
|
183
|
+
const editorBackground = getEditorBackgroundColor(this._viewData.editorType);
|
|
182
184
|
const primaryActionStyles = derived(this, r => alternativeActionActive.read(r) ? primaryActiveStyles : primaryActiveStyles);
|
|
183
185
|
const secondaryActionStyles = derived(this, r => alternativeActionActive.read(r) ? secondaryActiveStyles : passiveStyles);
|
|
184
186
|
// TODO@benibenj clicking the arrow does not accept suggestion anymore
|
|
@@ -196,7 +198,7 @@ let InlineEditsWordReplacementView = class InlineEditsWordReplacementView extend
|
|
|
196
198
|
style: {
|
|
197
199
|
position: 'absolute',
|
|
198
200
|
...rectToProps(reader => layout.read(reader).lowerBackground.withMargin(BORDER_WIDTH, 2 * BORDER_WIDTH, BORDER_WIDTH, 0)),
|
|
199
|
-
background:
|
|
201
|
+
background: editorBackground,
|
|
200
202
|
cursor: 'pointer',
|
|
201
203
|
pointerEvents: 'auto',
|
|
202
204
|
},
|
|
@@ -211,10 +213,10 @@ let InlineEditsWordReplacementView = class InlineEditsWordReplacementView extend
|
|
|
211
213
|
pointerEvents: 'auto',
|
|
212
214
|
boxSizing: 'border-box',
|
|
213
215
|
borderRadius: `${INLINE_EDITS_BORDER_RADIUS}px`,
|
|
214
|
-
background:
|
|
216
|
+
background: editorBackground,
|
|
215
217
|
display: 'flex',
|
|
216
218
|
justifyContent: 'left',
|
|
217
|
-
outline: `2px solid ${
|
|
219
|
+
outline: `2px solid ${editorBackground}`,
|
|
218
220
|
},
|
|
219
221
|
onmousedown: (e) => this._mouseDown(e),
|
|
220
222
|
}, [
|