monaco-editor-core 0.54.0-dev-20250918 → 0.54.0-dev-20250921
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.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.ko.js +2 -2
- package/esm/nls.messages.ru.js +2 -2
- package/esm/nls.messages.zh-cn.js +2 -2
- package/esm/nls.messages.zh-tw.js +2 -2
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js +8 -8
- package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/diffEditorViewModel.js +3 -3
- package/esm/vs/editor/browser/widget/diffEditor/diffEditorViewModel.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/diffEditorWidget.js +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/diffEditorWidget.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/features/gutterFeature.js +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/features/gutterFeature.js.map +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.js +1 -1
- package/esm/vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.js.map +1 -1
- package/esm/vs/editor/common/core/ranges/lineRange.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +8 -8
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +5 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js +2 -2
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js.map +1 -1
- package/esm/vs/editor/contrib/middleScroll/browser/middleScrollController.js +3 -3
- package/esm/vs/editor/contrib/middleScroll/browser/middleScrollController.js.map +1 -1
- package/package.json +2 -2
|
@@ -211,7 +211,7 @@ let InlineEditsGutterIndicator = class InlineEditsGutterIndicator extends Dispos
|
|
|
211
211
|
const idealIconWidth = 22;
|
|
212
212
|
const minimalIconWidth = 16; // codicon size
|
|
213
213
|
const iconWidth = (pillRect) => {
|
|
214
|
-
const availableWidth = this._availableWidthForIcon.
|
|
214
|
+
const availableWidth = this._availableWidthForIcon.read(undefined)(pillRect.bottom + this._editorObs.editor.getScrollTop()) - gutterViewPortPadding;
|
|
215
215
|
return Math.max(Math.min(availableWidth, idealIconWidth), minimalIconWidth);
|
|
216
216
|
};
|
|
217
217
|
if (pillIsFullyDocked) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.ts"],"names":[],"mappings":"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","file":"gutterIndicatorView.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 *--------------------------------------------------------------------------------------------*/\n\nimport { n, trackFocus } from '../../../../../../../base/browser/dom.js';\nimport { renderIcon } from '../../../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../../../base/common/codicons.js';\nimport { BugIndicatingError } from '../../../../../../../base/common/errors.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../../../../../base/common/lifecycle.js';\nimport { IObservable, ISettableObservable, autorun, constObservable, debouncedObservable, derived, observableFromEvent, observableValue, runOnChange } from '../../../../../../../base/common/observable.js';\nimport { IAccessibilityService } from '../../../../../../../platform/accessibility/common/accessibility.js';\nimport { IHoverService } from '../../../../../../../platform/hover/browser/hover.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 { IEditorMouseEvent } from '../../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { Point } from '../../../../../../common/core/2d/point.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { HoverService } from '../../../../../../browser/services/hoverService/hoverService.js';\nimport { HoverWidget } from '../../../../../../browser/services/hoverService/hoverWidget.js';\nimport { EditorOption, RenderLineNumbersType } from '../../../../../../common/config/editorOptions.js';\nimport { LineRange } from '../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { StickyScrollController } from '../../../../../stickyScroll/browser/stickyScrollController.js';\nimport { IInlineEditModel, InlineEditTabAction } from '../inlineEditsViewInterface.js';\nimport { getEditorBlendedColor, inlineEditIndicatorBackground, inlineEditIndicatorPrimaryBackground, inlineEditIndicatorPrimaryBorder, inlineEditIndicatorPrimaryForeground, inlineEditIndicatorSecondaryBackground, inlineEditIndicatorSecondaryBorder, inlineEditIndicatorSecondaryForeground, inlineEditIndicatorsuccessfulBackground, inlineEditIndicatorsuccessfulBorder, inlineEditIndicatorsuccessfulForeground } from '../theme.js';\nimport { mapOutFalsy, rectToProps } from '../utils/utils.js';\nimport { GutterIndicatorMenuContent } from './gutterIndicatorMenu.js';\nimport { assertNever } from '../../../../../../../base/common/assert.js';\n\nexport class InlineEditsGutterIndicator extends Disposable {\n\n\tprivate get model() {\n\t\tconst model = this._model.get();\n\t\tif (!model) { throw new BugIndicatingError('Inline Edit Model not available'); }\n\t\treturn model;\n\t}\n\n\tprivate readonly _gutterIndicatorStyles;\n\tprivate readonly _isHoveredOverInlineEditDebounced: IObservable<boolean>;\n\n\tconstructor(\n\t\tprivate readonly _editorObs: ObservableCodeEditor,\n\t\tprivate readonly _originalRange: IObservable<LineRange | undefined>,\n\t\tprivate readonly _verticalOffset: IObservable<number>,\n\t\tprivate readonly _model: IObservable<IInlineEditModel | undefined>,\n\t\tprivate readonly _isHoveringOverInlineEdit: IObservable<boolean>,\n\t\tprivate readonly _focusIsInMenu: ISettableObservable<boolean>,\n\t\t@IHoverService private readonly _hoverService: HoverService,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t\t@IAccessibilityService private readonly _accessibilityService: IAccessibilityService,\n\t\t@IThemeService themeService: IThemeService,\n\t) {\n\t\tsuper();\n\n\t\tthis._tabAction = derived(this, reader => {\n\t\t\tconst model = this._model.read(reader);\n\t\t\tif (!model) { return InlineEditTabAction.Inactive; }\n\t\t\treturn model.tabAction.read(reader);\n\t\t});\n\n\t\tthis._hoverVisible = observableValue(this, false);\n\t\tthis.isHoverVisible = this._hoverVisible;\n\t\tthis._isHoveredOverIcon = observableValue(this, false);\n\t\tthis._isHoveredOverIconDebounced = debouncedObservable(this._isHoveredOverIcon, 100);\n\t\tthis.isHoveredOverIcon = this._isHoveredOverIconDebounced;\n\t\tthis._isHoveredOverInlineEditDebounced = debouncedObservable(this._isHoveringOverInlineEdit, 100);\n\n\t\tthis._gutterIndicatorStyles = this._tabAction.map(this, (v, reader) => {\n\t\t\tswitch (v) {\n\t\t\t\tcase InlineEditTabAction.Inactive: return {\n\t\t\t\t\tbackground: getEditorBlendedColor(inlineEditIndicatorSecondaryBackground, themeService).read(reader).toString(),\n\t\t\t\t\tforeground: getEditorBlendedColor(inlineEditIndicatorSecondaryForeground, themeService).read(reader).toString(),\n\t\t\t\t\tborder: getEditorBlendedColor(inlineEditIndicatorSecondaryBorder, themeService).read(reader).toString(),\n\t\t\t\t};\n\t\t\t\tcase InlineEditTabAction.Jump: return {\n\t\t\t\t\tbackground: getEditorBlendedColor(inlineEditIndicatorPrimaryBackground, themeService).read(reader).toString(),\n\t\t\t\t\tforeground: getEditorBlendedColor(inlineEditIndicatorPrimaryForeground, themeService).read(reader).toString(),\n\t\t\t\t\tborder: getEditorBlendedColor(inlineEditIndicatorPrimaryBorder, themeService).read(reader).toString()\n\t\t\t\t};\n\t\t\t\tcase InlineEditTabAction.Accept: return {\n\t\t\t\t\tbackground: getEditorBlendedColor(inlineEditIndicatorsuccessfulBackground, themeService).read(reader).toString(),\n\t\t\t\t\tforeground: getEditorBlendedColor(inlineEditIndicatorsuccessfulForeground, themeService).read(reader).toString(),\n\t\t\t\t\tborder: getEditorBlendedColor(inlineEditIndicatorsuccessfulBorder, themeService).read(reader).toString()\n\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\tassertNever(v);\n\t\t\t}\n\t\t});\n\n\t\tthis._originalRangeObs = mapOutFalsy(this._originalRange);\n\t\tthis._state = derived(this, reader => {\n\t\t\tconst range = this._originalRangeObs.read(reader);\n\t\t\tif (!range) { return undefined; }\n\t\t\treturn {\n\t\t\t\trange,\n\t\t\t\tlineOffsetRange: this._editorObs.observeLineOffsetRange(range, this._store),\n\t\t\t};\n\t\t});\n\t\tthis._stickyScrollController = StickyScrollController.get(this._editorObs.editor);\n\t\tthis._stickyScrollHeight = this._stickyScrollController\n\t\t\t? observableFromEvent(this._stickyScrollController.onDidChangeStickyScrollHeight, () => this._stickyScrollController!.stickyScrollWidgetHeight)\n\t\t\t: constObservable(0);\n\t\tthis._lineNumberToRender = derived(this, reader => {\n\t\t\tif (this._verticalOffset.read(reader) !== 0) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tconst lineNumber = this._originalRange.read(reader)?.startLineNumber;\n\t\t\tconst lineNumberOptions = this._editorObs.getOption(EditorOption.lineNumbers).read(reader);\n\n\t\t\tif (lineNumber === undefined || lineNumberOptions.renderType === RenderLineNumbersType.Off) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Interval) {\n\t\t\t\tconst cursorPosition = this._editorObs.cursorPosition.read(reader);\n\t\t\t\tif (lineNumber % 10 === 0 || cursorPosition && cursorPosition.lineNumber === lineNumber) {\n\t\t\t\t\treturn lineNumber.toString();\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Relative) {\n\t\t\t\tconst cursorPosition = this._editorObs.cursorPosition.read(reader);\n\t\t\t\tif (!cursorPosition) {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t\tconst relativeLineNumber = Math.abs(lineNumber - cursorPosition.lineNumber);\n\t\t\t\tif (relativeLineNumber === 0) {\n\t\t\t\t\treturn lineNumber.toString();\n\t\t\t\t}\n\t\t\t\treturn relativeLineNumber.toString();\n\t\t\t}\n\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Custom) {\n\t\t\t\tif (lineNumberOptions.renderFn) {\n\t\t\t\t\treturn lineNumberOptions.renderFn(lineNumber);\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn lineNumber.toString();\n\t\t});\n\t\tthis._availableWidthForIcon = derived(this, reader => {\n\t\t\tconst textModel = this._editorObs.editor.getModel();\n\t\t\tconst editor = this._editorObs.editor;\n\t\t\tconst layout = this._editorObs.layoutInfo.read(reader);\n\t\t\tconst gutterWidth = layout.decorationsLeft + layout.decorationsWidth - layout.glyphMarginLeft;\n\n\t\t\tif (!textModel || gutterWidth <= 0) {\n\t\t\t\treturn () => 0;\n\t\t\t}\n\n\t\t\t// no glyph margin => the entire gutter width is available as there is no optimal place to put the icon\n\t\t\tif (layout.lineNumbersLeft === 0) {\n\t\t\t\treturn () => gutterWidth;\n\t\t\t}\n\n\t\t\tconst lineNumberOptions = this._editorObs.getOption(EditorOption.lineNumbers).read(reader);\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Relative || /* likely to flicker */\n\t\t\t\tlineNumberOptions.renderType === RenderLineNumbersType.Off) {\n\t\t\t\treturn () => gutterWidth;\n\t\t\t}\n\n\t\t\tconst w = editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\t\tconst rightOfLineNumber = layout.lineNumbersLeft + layout.lineNumbersWidth;\n\t\t\tconst totalLines = textModel.getLineCount();\n\t\t\tconst totalLinesDigits = (totalLines + 1 /* 0 based to 1 based*/).toString().length;\n\n\t\t\tconst offsetDigits: {\n\t\t\t\tfirstLineNumberWithDigitCount: number;\n\t\t\t\ttopOfLineNumber: number;\n\t\t\t\tusableWidthLeftOfLineNumber: number;\n\t\t\t}[] = [];\n\n\t\t\t// We only need to pre compute the usable width left of the line number for the first line number with a given digit count\n\t\t\tfor (let digits = 1; digits <= totalLinesDigits; digits++) {\n\t\t\t\tconst firstLineNumberWithDigitCount = 10 ** (digits - 1);\n\t\t\t\tconst topOfLineNumber = editor.getTopForLineNumber(firstLineNumberWithDigitCount);\n\t\t\t\tconst digitsWidth = digits * w;\n\t\t\t\tconst usableWidthLeftOfLineNumber = Math.min(gutterWidth, Math.max(0, rightOfLineNumber - digitsWidth - layout.glyphMarginLeft));\n\t\t\t\toffsetDigits.push({ firstLineNumberWithDigitCount, topOfLineNumber, usableWidthLeftOfLineNumber });\n\t\t\t}\n\n\t\t\treturn (topOffset: number) => {\n\t\t\t\tfor (let i = offsetDigits.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (topOffset >= offsetDigits[i].topOfLineNumber) {\n\t\t\t\t\t\treturn offsetDigits[i].usableWidthLeftOfLineNumber;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new BugIndicatingError('Could not find avilable width for icon');\n\t\t\t};\n\t\t});\n\t\tthis._layout = derived(this, reader => {\n\t\t\tconst s = this._state.read(reader);\n\t\t\tif (!s) { return undefined; }\n\n\t\t\tconst layout = this._editorObs.layoutInfo.read(reader);\n\n\t\t\tconst lineHeight = this._editorObs.observeLineHeightForLine(s.range.map(r => r.startLineNumber)).read(reader);\n\t\t\tconst gutterViewPortPadding = 2;\n\n\t\t\t// Entire gutter view from top left to bottom right\n\t\t\tconst gutterWidthWithoutPadding = layout.decorationsLeft + layout.decorationsWidth - layout.glyphMarginLeft - 2 * gutterViewPortPadding;\n\t\t\tconst gutterHeightWithoutPadding = layout.height - 2 * gutterViewPortPadding;\n\t\t\tconst gutterViewPortWithStickyScroll = Rect.fromLeftTopWidthHeight(gutterViewPortPadding, gutterViewPortPadding, gutterWidthWithoutPadding, gutterHeightWithoutPadding);\n\t\t\tconst gutterViewPortWithoutStickyScrollWithoutPaddingTop = gutterViewPortWithStickyScroll.withTop(this._stickyScrollHeight.read(reader));\n\t\t\tconst gutterViewPortWithoutStickyScroll = gutterViewPortWithStickyScroll.withTop(gutterViewPortWithoutStickyScrollWithoutPaddingTop.top + gutterViewPortPadding);\n\n\t\t\t// The glyph margin area across all relevant lines\n\t\t\tconst verticalEditRange = s.lineOffsetRange.read(reader);\n\t\t\tconst gutterEditArea = Rect.fromRanges(OffsetRange.fromTo(gutterViewPortWithoutStickyScroll.left, gutterViewPortWithoutStickyScroll.right), verticalEditRange);\n\n\t\t\t// The gutter view container (pill)\n\t\t\tconst pillHeight = lineHeight;\n\t\t\tconst pillOffset = this._verticalOffset.read(reader);\n\t\t\tconst pillFullyDockedRect = gutterEditArea.withHeight(pillHeight).translateY(pillOffset);\n\t\t\tconst pillIsFullyDocked = gutterViewPortWithoutStickyScrollWithoutPaddingTop.containsRect(pillFullyDockedRect);\n\n\t\t\t// The icon which will be rendered in the pill\n\t\t\tconst iconNoneDocked = this._tabAction.map(action => action === InlineEditTabAction.Accept ? Codicon.keyboardTab : Codicon.arrowRight);\n\t\t\tconst iconDocked = derived(this, reader => {\n\t\t\t\tif (this._isHoveredOverIconDebounced.read(reader) || this._isHoveredOverInlineEditDebounced.read(reader)) {\n\t\t\t\t\treturn Codicon.check;\n\t\t\t\t}\n\t\t\t\tif (this._tabAction.read(reader) === InlineEditTabAction.Accept) {\n\t\t\t\t\treturn Codicon.keyboardTab;\n\t\t\t\t}\n\t\t\t\tconst cursorLineNumber = this._editorObs.cursorLineNumber.read(reader) ?? 0;\n\t\t\t\tconst editStartLineNumber = s.range.read(reader).startLineNumber;\n\t\t\t\treturn cursorLineNumber <= editStartLineNumber ? Codicon.keyboardTabAbove : Codicon.keyboardTabBelow;\n\t\t\t});\n\n\t\t\tconst idealIconWidth = 22;\n\t\t\tconst minimalIconWidth = 16; // codicon size\n\t\t\tconst iconWidth = (pillRect: Rect) => {\n\t\t\t\tconst availableWidth = this._availableWidthForIcon.get()(pillRect.bottom + this._editorObs.editor.getScrollTop()) - gutterViewPortPadding;\n\t\t\t\treturn Math.max(Math.min(availableWidth, idealIconWidth), minimalIconWidth);\n\t\t\t};\n\n\t\t\tif (pillIsFullyDocked) {\n\t\t\t\tconst pillRect = pillFullyDockedRect;\n\n\t\t\t\tlet lineNumberWidth;\n\t\t\t\tif (layout.lineNumbersWidth === 0) {\n\t\t\t\t\tlineNumberWidth = Math.min(Math.max(layout.lineNumbersLeft - gutterViewPortWithStickyScroll.left, 0), pillRect.width - idealIconWidth);\n\t\t\t\t} else {\n\t\t\t\t\tlineNumberWidth = Math.max(layout.lineNumbersLeft + layout.lineNumbersWidth - gutterViewPortWithStickyScroll.left, 0);\n\t\t\t\t}\n\n\t\t\t\tconst lineNumberRect = pillRect.withWidth(lineNumberWidth);\n\t\t\t\tconst iconWidth = Math.max(Math.min(layout.decorationsWidth, idealIconWidth), minimalIconWidth);\n\t\t\t\tconst iconRect = pillRect.withWidth(iconWidth).translateX(lineNumberWidth);\n\n\t\t\t\treturn {\n\t\t\t\t\tgutterEditArea,\n\t\t\t\t\ticon: iconDocked,\n\t\t\t\t\ticonDirection: 'right' as const,\n\t\t\t\t\ticonRect,\n\t\t\t\t\tpillRect,\n\t\t\t\t\tlineNumberRect,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst pillPartiallyDockedPossibleArea = gutterViewPortWithStickyScroll.intersect(gutterEditArea); // The area in which the pill could be partially docked\n\t\t\tconst pillIsPartiallyDocked = pillPartiallyDockedPossibleArea && pillPartiallyDockedPossibleArea.height >= pillHeight;\n\n\t\t\tif (pillIsPartiallyDocked) {\n\t\t\t\t// pillFullyDockedRect is outside viewport, move it into the viewport under sticky scroll as we prefer the pill to not be on top of the sticky scroll\n\t\t\t\t// then move it into the possible area which will only cause it to move if it has to be rendered on top of the sticky scroll\n\t\t\t\tconst pillRectMoved = pillFullyDockedRect.moveToBeContainedIn(gutterViewPortWithoutStickyScroll).moveToBeContainedIn(pillPartiallyDockedPossibleArea);\n\t\t\t\tconst pillRect = pillRectMoved.withWidth(iconWidth(pillRectMoved));\n\t\t\t\tconst iconRect = pillRect;\n\n\t\t\t\treturn {\n\t\t\t\t\tgutterEditArea,\n\t\t\t\t\ticon: iconDocked,\n\t\t\t\t\ticonDirection: 'right' as const,\n\t\t\t\t\ticonRect,\n\t\t\t\t\tpillRect,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// pillFullyDockedRect is outside viewport, so move it into viewport\n\t\t\tconst pillRectMoved = pillFullyDockedRect.moveToBeContainedIn(gutterViewPortWithStickyScroll);\n\t\t\tconst pillRect = pillRectMoved.withWidth(iconWidth(pillRectMoved));\n\t\t\tconst iconRect = pillRect;\n\n\t\t\t// docked = pill was already in the viewport\n\t\t\tconst iconDirection = pillRect.top < pillFullyDockedRect.top ?\n\t\t\t\t'top' as const :\n\t\t\t\t'bottom' as const;\n\n\t\t\treturn {\n\t\t\t\tgutterEditArea,\n\t\t\t\ticon: iconNoneDocked,\n\t\t\t\ticonDirection,\n\t\t\t\ticonRect,\n\t\t\t\tpillRect,\n\t\t\t};\n\t\t});\n\t\tthis._iconRef = n.ref<HTMLDivElement>();\n\t\tthis.isVisible = this._layout.map(l => !!l);\n\t\tthis._indicator = n.div({\n\t\t\tclass: 'inline-edits-view-gutter-indicator',\n\t\t\tonclick: () => {\n\t\t\t\tconst layout = this._layout.get();\n\t\t\t\tconst acceptOnClick = layout?.icon.get() === Codicon.check;\n\n\t\t\t\tthis._editorObs.editor.focus();\n\t\t\t\tif (acceptOnClick) {\n\t\t\t\t\tthis.model.accept();\n\t\t\t\t} else {\n\t\t\t\t\tthis.model.jump();\n\t\t\t\t}\n\t\t\t},\n\t\t\ttabIndex: 0,\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\toverflow: 'visible',\n\t\t\t},\n\t\t}, mapOutFalsy(this._layout).map(layout => !layout ? [] : [\n\t\t\tn.div({\n\t\t\t\tstyle: {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tbackground: asCssVariable(inlineEditIndicatorBackground),\n\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t...rectToProps(reader => layout.read(reader).gutterEditArea),\n\t\t\t\t}\n\t\t\t}),\n\t\t\tn.div({\n\t\t\t\tclass: 'icon',\n\t\t\t\tref: this._iconRef,\n\t\t\t\tonmouseenter: () => {\n\t\t\t\t\t// TODO show hover when hovering ghost text etc.\n\t\t\t\t\tthis._showHover();\n\t\t\t\t},\n\t\t\t\tstyle: {\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tzIndex: '20',\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tbackgroundColor: this._gutterIndicatorStyles.map(v => v.background),\n\t\t\t\t\t['--vscodeIconForeground' as any]: this._gutterIndicatorStyles.map(v => v.foreground),\n\t\t\t\t\tborder: this._gutterIndicatorStyles.map(v => `1px solid ${v.border}`),\n\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\ttransition: 'background-color 0.2s ease-in-out, width 0.2s ease-in-out',\n\t\t\t\t\t...rectToProps(reader => layout.read(reader).pillRect),\n\t\t\t\t}\n\t\t\t}, [\n\t\t\t\tn.div({\n\t\t\t\t\tclassName: 'line-number',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tlineHeight: layout.map(l => l.lineNumberRect ? l.lineNumberRect.height : 0),\n\t\t\t\t\t\tdisplay: layout.map(l => l.lineNumberRect ? 'flex' : 'none'),\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\t\twidth: layout.map(l => l.lineNumberRect ? l.lineNumberRect.width : 0),\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\tcolor: this._gutterIndicatorStyles.map(v => v.foreground),\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\tthis._lineNumberToRender\n\t\t\t\t),\n\t\t\t\tn.div({\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\trotate: layout.map(l => `${getRotationFromDirection(l.iconDirection)}deg`),\n\t\t\t\t\t\ttransition: 'rotate 0.2s ease-in-out',\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\tmarginRight: layout.map(l => l.pillRect.width - l.iconRect.width - (l.lineNumberRect?.width ?? 0)),\n\t\t\t\t\t\twidth: layout.map(l => l.iconRect.width),\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tlayout.map((l, reader) => renderIcon(l.icon.read(reader))),\n\t\t\t\t])\n\t\t\t]),\n\t\t])).keepUpdated(this._store);\n\n\t\tthis._register(this._editorObs.createOverlayWidget({\n\t\t\tdomNode: this._indicator.element,\n\t\t\tposition: constObservable(null),\n\t\t\tallowEditorOverflow: false,\n\t\t\tminContentWidthInPx: constObservable(0),\n\t\t}));\n\n\t\tthis._register(this._editorObs.editor.onMouseMove((e: IEditorMouseEvent) => {\n\t\t\tconst state = this._state.get();\n\t\t\tif (state === undefined) { return; }\n\n\t\t\tconst el = this._iconRef.element;\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tconst rectangularArea = Rect.fromLeftTopWidthHeight(rect.left, rect.top, rect.width, rect.height);\n\t\t\tconst point = new Point(e.event.posx, e.event.posy);\n\t\t\tthis._isHoveredOverIcon.set(rectangularArea.containsPoint(point), undefined);\n\t\t}));\n\n\t\tthis._register(this._editorObs.editor.onDidScrollChange(() => {\n\t\t\tthis._isHoveredOverIcon.set(false, undefined);\n\t\t}));\n\n\t\t// pulse animation when hovering inline edit\n\t\tthis._register(runOnChange(this._isHoveredOverInlineEditDebounced, (isHovering) => {\n\t\t\tif (isHovering) {\n\t\t\t\tthis.triggerAnimation();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tthis._indicator.readEffect(reader);\n\t\t\tif (this._indicator.element) {\n\t\t\t\tthis._editorObs.editor.applyFontInfo(this._indicator.element);\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic triggerAnimation(): Promise<Animation> {\n\t\tif (this._accessibilityService.isMotionReduced()) {\n\t\t\treturn new Animation(null, null).finished;\n\t\t}\n\n\t\t// PULSE ANIMATION:\n\t\tconst animation = this._iconRef.element.animate([\n\t\t\t{\n\t\t\t\toutline: `2px solid ${this._gutterIndicatorStyles.map(v => v.border).get()}`,\n\t\t\t\toutlineOffset: '-1px',\n\t\t\t\toffset: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\toutline: `2px solid transparent`,\n\t\t\t\toutlineOffset: '10px',\n\t\t\t\toffset: 1\n\t\t\t},\n\t\t], { duration: 500 });\n\n\t\treturn animation.finished;\n\t}\n\n\tprivate readonly _originalRangeObs;\n\n\tprivate readonly _state;\n\n\tprivate readonly _stickyScrollController;\n\tprivate readonly _stickyScrollHeight;\n\n\tprivate readonly _lineNumberToRender;\n\n\tprivate readonly _availableWidthForIcon;\n\n\tprivate readonly _layout;\n\n\n\tprivate readonly _iconRef;\n\n\tpublic readonly isVisible;\n\n\tprivate readonly _hoverVisible;\n\tpublic readonly isHoverVisible: IObservable<boolean>;\n\n\tprivate readonly _isHoveredOverIcon;\n\tprivate readonly _isHoveredOverIconDebounced: IObservable<boolean>;\n\tpublic readonly isHoveredOverIcon: IObservable<boolean>;\n\n\tprivate _showHover(): void {\n\t\tif (this._hoverVisible.get()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst disposableStore = new DisposableStore();\n\t\tconst content = disposableStore.add(this._instantiationService.createInstance(\n\t\t\tGutterIndicatorMenuContent,\n\t\t\tthis.model,\n\t\t\t(focusEditor) => {\n\t\t\t\tif (focusEditor) {\n\t\t\t\t\tthis._editorObs.editor.focus();\n\t\t\t\t}\n\t\t\t\th?.dispose();\n\t\t\t},\n\t\t\tthis._editorObs,\n\t\t).toDisposableLiveElement());\n\n\t\tconst focusTracker = disposableStore.add(trackFocus(content.element));\n\t\tdisposableStore.add(focusTracker.onDidBlur(() => this._focusIsInMenu.set(false, undefined)));\n\t\tdisposableStore.add(focusTracker.onDidFocus(() => this._focusIsInMenu.set(true, undefined)));\n\t\tdisposableStore.add(toDisposable(() => this._focusIsInMenu.set(false, undefined)));\n\n\t\tconst h = this._hoverService.showInstantHover({\n\t\t\ttarget: this._iconRef.element,\n\t\t\tcontent: content.element,\n\t\t}) as HoverWidget | undefined;\n\t\tif (h) {\n\t\t\tthis._hoverVisible.set(true, undefined);\n\t\t\tdisposableStore.add(this._editorObs.editor.onDidScrollChange(() => h.dispose()));\n\t\t\tdisposableStore.add(h.onDispose(() => {\n\t\t\t\tthis._hoverVisible.set(false, undefined);\n\t\t\t\tdisposableStore.dispose();\n\t\t\t}));\n\t\t} else {\n\t\t\tdisposableStore.dispose();\n\t\t}\n\t}\n\n\tprivate readonly _tabAction;\n\n\tprivate readonly _indicator;\n}\n\nfunction getRotationFromDirection(direction: 'top' | 'bottom' | 'right'): number {\n\tswitch (direction) {\n\t\tcase 'top': return 90;\n\t\tcase 'bottom': return -90;\n\t\tcase 'right': return 0;\n\t}\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 *--------------------------------------------------------------------------------------------*/\n\nimport { n, trackFocus } from '../../../../../../../base/browser/dom.js';\nimport { renderIcon } from '../../../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../../../base/common/codicons.js';\nimport { BugIndicatingError } from '../../../../../../../base/common/errors.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../../../../../base/common/lifecycle.js';\nimport { IObservable, ISettableObservable, autorun, constObservable, debouncedObservable, derived, observableFromEvent, observableValue, runOnChange } from '../../../../../../../base/common/observable.js';\nimport { IAccessibilityService } from '../../../../../../../platform/accessibility/common/accessibility.js';\nimport { IHoverService } from '../../../../../../../platform/hover/browser/hover.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 { IEditorMouseEvent } from '../../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { Point } from '../../../../../../common/core/2d/point.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { HoverService } from '../../../../../../browser/services/hoverService/hoverService.js';\nimport { HoverWidget } from '../../../../../../browser/services/hoverService/hoverWidget.js';\nimport { EditorOption, RenderLineNumbersType } from '../../../../../../common/config/editorOptions.js';\nimport { LineRange } from '../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { StickyScrollController } from '../../../../../stickyScroll/browser/stickyScrollController.js';\nimport { IInlineEditModel, InlineEditTabAction } from '../inlineEditsViewInterface.js';\nimport { getEditorBlendedColor, inlineEditIndicatorBackground, inlineEditIndicatorPrimaryBackground, inlineEditIndicatorPrimaryBorder, inlineEditIndicatorPrimaryForeground, inlineEditIndicatorSecondaryBackground, inlineEditIndicatorSecondaryBorder, inlineEditIndicatorSecondaryForeground, inlineEditIndicatorsuccessfulBackground, inlineEditIndicatorsuccessfulBorder, inlineEditIndicatorsuccessfulForeground } from '../theme.js';\nimport { mapOutFalsy, rectToProps } from '../utils/utils.js';\nimport { GutterIndicatorMenuContent } from './gutterIndicatorMenu.js';\nimport { assertNever } from '../../../../../../../base/common/assert.js';\n\nexport class InlineEditsGutterIndicator extends Disposable {\n\n\tprivate get model() {\n\t\tconst model = this._model.get();\n\t\tif (!model) { throw new BugIndicatingError('Inline Edit Model not available'); }\n\t\treturn model;\n\t}\n\n\tprivate readonly _gutterIndicatorStyles;\n\tprivate readonly _isHoveredOverInlineEditDebounced: IObservable<boolean>;\n\n\tconstructor(\n\t\tprivate readonly _editorObs: ObservableCodeEditor,\n\t\tprivate readonly _originalRange: IObservable<LineRange | undefined>,\n\t\tprivate readonly _verticalOffset: IObservable<number>,\n\t\tprivate readonly _model: IObservable<IInlineEditModel | undefined>,\n\t\tprivate readonly _isHoveringOverInlineEdit: IObservable<boolean>,\n\t\tprivate readonly _focusIsInMenu: ISettableObservable<boolean>,\n\t\t@IHoverService private readonly _hoverService: HoverService,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t\t@IAccessibilityService private readonly _accessibilityService: IAccessibilityService,\n\t\t@IThemeService themeService: IThemeService,\n\t) {\n\t\tsuper();\n\n\t\tthis._tabAction = derived(this, reader => {\n\t\t\tconst model = this._model.read(reader);\n\t\t\tif (!model) { return InlineEditTabAction.Inactive; }\n\t\t\treturn model.tabAction.read(reader);\n\t\t});\n\n\t\tthis._hoverVisible = observableValue(this, false);\n\t\tthis.isHoverVisible = this._hoverVisible;\n\t\tthis._isHoveredOverIcon = observableValue(this, false);\n\t\tthis._isHoveredOverIconDebounced = debouncedObservable(this._isHoveredOverIcon, 100);\n\t\tthis.isHoveredOverIcon = this._isHoveredOverIconDebounced;\n\t\tthis._isHoveredOverInlineEditDebounced = debouncedObservable(this._isHoveringOverInlineEdit, 100);\n\n\t\tthis._gutterIndicatorStyles = this._tabAction.map(this, (v, reader) => {\n\t\t\tswitch (v) {\n\t\t\t\tcase InlineEditTabAction.Inactive: return {\n\t\t\t\t\tbackground: getEditorBlendedColor(inlineEditIndicatorSecondaryBackground, themeService).read(reader).toString(),\n\t\t\t\t\tforeground: getEditorBlendedColor(inlineEditIndicatorSecondaryForeground, themeService).read(reader).toString(),\n\t\t\t\t\tborder: getEditorBlendedColor(inlineEditIndicatorSecondaryBorder, themeService).read(reader).toString(),\n\t\t\t\t};\n\t\t\t\tcase InlineEditTabAction.Jump: return {\n\t\t\t\t\tbackground: getEditorBlendedColor(inlineEditIndicatorPrimaryBackground, themeService).read(reader).toString(),\n\t\t\t\t\tforeground: getEditorBlendedColor(inlineEditIndicatorPrimaryForeground, themeService).read(reader).toString(),\n\t\t\t\t\tborder: getEditorBlendedColor(inlineEditIndicatorPrimaryBorder, themeService).read(reader).toString()\n\t\t\t\t};\n\t\t\t\tcase InlineEditTabAction.Accept: return {\n\t\t\t\t\tbackground: getEditorBlendedColor(inlineEditIndicatorsuccessfulBackground, themeService).read(reader).toString(),\n\t\t\t\t\tforeground: getEditorBlendedColor(inlineEditIndicatorsuccessfulForeground, themeService).read(reader).toString(),\n\t\t\t\t\tborder: getEditorBlendedColor(inlineEditIndicatorsuccessfulBorder, themeService).read(reader).toString()\n\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\tassertNever(v);\n\t\t\t}\n\t\t});\n\n\t\tthis._originalRangeObs = mapOutFalsy(this._originalRange);\n\t\tthis._state = derived(this, reader => {\n\t\t\tconst range = this._originalRangeObs.read(reader);\n\t\t\tif (!range) { return undefined; }\n\t\t\treturn {\n\t\t\t\trange,\n\t\t\t\tlineOffsetRange: this._editorObs.observeLineOffsetRange(range, this._store),\n\t\t\t};\n\t\t});\n\t\tthis._stickyScrollController = StickyScrollController.get(this._editorObs.editor);\n\t\tthis._stickyScrollHeight = this._stickyScrollController\n\t\t\t? observableFromEvent(this._stickyScrollController.onDidChangeStickyScrollHeight, () => this._stickyScrollController!.stickyScrollWidgetHeight)\n\t\t\t: constObservable(0);\n\t\tthis._lineNumberToRender = derived(this, reader => {\n\t\t\tif (this._verticalOffset.read(reader) !== 0) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tconst lineNumber = this._originalRange.read(reader)?.startLineNumber;\n\t\t\tconst lineNumberOptions = this._editorObs.getOption(EditorOption.lineNumbers).read(reader);\n\n\t\t\tif (lineNumber === undefined || lineNumberOptions.renderType === RenderLineNumbersType.Off) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Interval) {\n\t\t\t\tconst cursorPosition = this._editorObs.cursorPosition.read(reader);\n\t\t\t\tif (lineNumber % 10 === 0 || cursorPosition && cursorPosition.lineNumber === lineNumber) {\n\t\t\t\t\treturn lineNumber.toString();\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Relative) {\n\t\t\t\tconst cursorPosition = this._editorObs.cursorPosition.read(reader);\n\t\t\t\tif (!cursorPosition) {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t\tconst relativeLineNumber = Math.abs(lineNumber - cursorPosition.lineNumber);\n\t\t\t\tif (relativeLineNumber === 0) {\n\t\t\t\t\treturn lineNumber.toString();\n\t\t\t\t}\n\t\t\t\treturn relativeLineNumber.toString();\n\t\t\t}\n\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Custom) {\n\t\t\t\tif (lineNumberOptions.renderFn) {\n\t\t\t\t\treturn lineNumberOptions.renderFn(lineNumber);\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn lineNumber.toString();\n\t\t});\n\t\tthis._availableWidthForIcon = derived(this, reader => {\n\t\t\tconst textModel = this._editorObs.editor.getModel();\n\t\t\tconst editor = this._editorObs.editor;\n\t\t\tconst layout = this._editorObs.layoutInfo.read(reader);\n\t\t\tconst gutterWidth = layout.decorationsLeft + layout.decorationsWidth - layout.glyphMarginLeft;\n\n\t\t\tif (!textModel || gutterWidth <= 0) {\n\t\t\t\treturn () => 0;\n\t\t\t}\n\n\t\t\t// no glyph margin => the entire gutter width is available as there is no optimal place to put the icon\n\t\t\tif (layout.lineNumbersLeft === 0) {\n\t\t\t\treturn () => gutterWidth;\n\t\t\t}\n\n\t\t\tconst lineNumberOptions = this._editorObs.getOption(EditorOption.lineNumbers).read(reader);\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Relative || /* likely to flicker */\n\t\t\t\tlineNumberOptions.renderType === RenderLineNumbersType.Off) {\n\t\t\t\treturn () => gutterWidth;\n\t\t\t}\n\n\t\t\tconst w = editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\t\tconst rightOfLineNumber = layout.lineNumbersLeft + layout.lineNumbersWidth;\n\t\t\tconst totalLines = textModel.getLineCount();\n\t\t\tconst totalLinesDigits = (totalLines + 1 /* 0 based to 1 based*/).toString().length;\n\n\t\t\tconst offsetDigits: {\n\t\t\t\tfirstLineNumberWithDigitCount: number;\n\t\t\t\ttopOfLineNumber: number;\n\t\t\t\tusableWidthLeftOfLineNumber: number;\n\t\t\t}[] = [];\n\n\t\t\t// We only need to pre compute the usable width left of the line number for the first line number with a given digit count\n\t\t\tfor (let digits = 1; digits <= totalLinesDigits; digits++) {\n\t\t\t\tconst firstLineNumberWithDigitCount = 10 ** (digits - 1);\n\t\t\t\tconst topOfLineNumber = editor.getTopForLineNumber(firstLineNumberWithDigitCount);\n\t\t\t\tconst digitsWidth = digits * w;\n\t\t\t\tconst usableWidthLeftOfLineNumber = Math.min(gutterWidth, Math.max(0, rightOfLineNumber - digitsWidth - layout.glyphMarginLeft));\n\t\t\t\toffsetDigits.push({ firstLineNumberWithDigitCount, topOfLineNumber, usableWidthLeftOfLineNumber });\n\t\t\t}\n\n\t\t\treturn (topOffset: number) => {\n\t\t\t\tfor (let i = offsetDigits.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (topOffset >= offsetDigits[i].topOfLineNumber) {\n\t\t\t\t\t\treturn offsetDigits[i].usableWidthLeftOfLineNumber;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new BugIndicatingError('Could not find avilable width for icon');\n\t\t\t};\n\t\t});\n\t\tthis._layout = derived(this, reader => {\n\t\t\tconst s = this._state.read(reader);\n\t\t\tif (!s) { return undefined; }\n\n\t\t\tconst layout = this._editorObs.layoutInfo.read(reader);\n\n\t\t\tconst lineHeight = this._editorObs.observeLineHeightForLine(s.range.map(r => r.startLineNumber)).read(reader);\n\t\t\tconst gutterViewPortPadding = 2;\n\n\t\t\t// Entire gutter view from top left to bottom right\n\t\t\tconst gutterWidthWithoutPadding = layout.decorationsLeft + layout.decorationsWidth - layout.glyphMarginLeft - 2 * gutterViewPortPadding;\n\t\t\tconst gutterHeightWithoutPadding = layout.height - 2 * gutterViewPortPadding;\n\t\t\tconst gutterViewPortWithStickyScroll = Rect.fromLeftTopWidthHeight(gutterViewPortPadding, gutterViewPortPadding, gutterWidthWithoutPadding, gutterHeightWithoutPadding);\n\t\t\tconst gutterViewPortWithoutStickyScrollWithoutPaddingTop = gutterViewPortWithStickyScroll.withTop(this._stickyScrollHeight.read(reader));\n\t\t\tconst gutterViewPortWithoutStickyScroll = gutterViewPortWithStickyScroll.withTop(gutterViewPortWithoutStickyScrollWithoutPaddingTop.top + gutterViewPortPadding);\n\n\t\t\t// The glyph margin area across all relevant lines\n\t\t\tconst verticalEditRange = s.lineOffsetRange.read(reader);\n\t\t\tconst gutterEditArea = Rect.fromRanges(OffsetRange.fromTo(gutterViewPortWithoutStickyScroll.left, gutterViewPortWithoutStickyScroll.right), verticalEditRange);\n\n\t\t\t// The gutter view container (pill)\n\t\t\tconst pillHeight = lineHeight;\n\t\t\tconst pillOffset = this._verticalOffset.read(reader);\n\t\t\tconst pillFullyDockedRect = gutterEditArea.withHeight(pillHeight).translateY(pillOffset);\n\t\t\tconst pillIsFullyDocked = gutterViewPortWithoutStickyScrollWithoutPaddingTop.containsRect(pillFullyDockedRect);\n\n\t\t\t// The icon which will be rendered in the pill\n\t\t\tconst iconNoneDocked = this._tabAction.map(action => action === InlineEditTabAction.Accept ? Codicon.keyboardTab : Codicon.arrowRight);\n\t\t\tconst iconDocked = derived(this, reader => {\n\t\t\t\tif (this._isHoveredOverIconDebounced.read(reader) || this._isHoveredOverInlineEditDebounced.read(reader)) {\n\t\t\t\t\treturn Codicon.check;\n\t\t\t\t}\n\t\t\t\tif (this._tabAction.read(reader) === InlineEditTabAction.Accept) {\n\t\t\t\t\treturn Codicon.keyboardTab;\n\t\t\t\t}\n\t\t\t\tconst cursorLineNumber = this._editorObs.cursorLineNumber.read(reader) ?? 0;\n\t\t\t\tconst editStartLineNumber = s.range.read(reader).startLineNumber;\n\t\t\t\treturn cursorLineNumber <= editStartLineNumber ? Codicon.keyboardTabAbove : Codicon.keyboardTabBelow;\n\t\t\t});\n\n\t\t\tconst idealIconWidth = 22;\n\t\t\tconst minimalIconWidth = 16; // codicon size\n\t\t\tconst iconWidth = (pillRect: Rect) => {\n\t\t\t\tconst availableWidth = this._availableWidthForIcon.get()(pillRect.bottom + this._editorObs.editor.getScrollTop()) - gutterViewPortPadding;\n\t\t\t\treturn Math.max(Math.min(availableWidth, idealIconWidth), minimalIconWidth);\n\t\t\t};\n\n\t\t\tif (pillIsFullyDocked) {\n\t\t\t\tconst pillRect = pillFullyDockedRect;\n\n\t\t\t\tlet lineNumberWidth;\n\t\t\t\tif (layout.lineNumbersWidth === 0) {\n\t\t\t\t\tlineNumberWidth = Math.min(Math.max(layout.lineNumbersLeft - gutterViewPortWithStickyScroll.left, 0), pillRect.width - idealIconWidth);\n\t\t\t\t} else {\n\t\t\t\t\tlineNumberWidth = Math.max(layout.lineNumbersLeft + layout.lineNumbersWidth - gutterViewPortWithStickyScroll.left, 0);\n\t\t\t\t}\n\n\t\t\t\tconst lineNumberRect = pillRect.withWidth(lineNumberWidth);\n\t\t\t\tconst iconWidth = Math.max(Math.min(layout.decorationsWidth, idealIconWidth), minimalIconWidth);\n\t\t\t\tconst iconRect = pillRect.withWidth(iconWidth).translateX(lineNumberWidth);\n\n\t\t\t\treturn {\n\t\t\t\t\tgutterEditArea,\n\t\t\t\t\ticon: iconDocked,\n\t\t\t\t\ticonDirection: 'right' as const,\n\t\t\t\t\ticonRect,\n\t\t\t\t\tpillRect,\n\t\t\t\t\tlineNumberRect,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst pillPartiallyDockedPossibleArea = gutterViewPortWithStickyScroll.intersect(gutterEditArea); // The area in which the pill could be partially docked\n\t\t\tconst pillIsPartiallyDocked = pillPartiallyDockedPossibleArea && pillPartiallyDockedPossibleArea.height >= pillHeight;\n\n\t\t\tif (pillIsPartiallyDocked) {\n\t\t\t\t// pillFullyDockedRect is outside viewport, move it into the viewport under sticky scroll as we prefer the pill to not be on top of the sticky scroll\n\t\t\t\t// then move it into the possible area which will only cause it to move if it has to be rendered on top of the sticky scroll\n\t\t\t\tconst pillRectMoved = pillFullyDockedRect.moveToBeContainedIn(gutterViewPortWithoutStickyScroll).moveToBeContainedIn(pillPartiallyDockedPossibleArea);\n\t\t\t\tconst pillRect = pillRectMoved.withWidth(iconWidth(pillRectMoved));\n\t\t\t\tconst iconRect = pillRect;\n\n\t\t\t\treturn {\n\t\t\t\t\tgutterEditArea,\n\t\t\t\t\ticon: iconDocked,\n\t\t\t\t\ticonDirection: 'right' as const,\n\t\t\t\t\ticonRect,\n\t\t\t\t\tpillRect,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// pillFullyDockedRect is outside viewport, so move it into viewport\n\t\t\tconst pillRectMoved = pillFullyDockedRect.moveToBeContainedIn(gutterViewPortWithStickyScroll);\n\t\t\tconst pillRect = pillRectMoved.withWidth(iconWidth(pillRectMoved));\n\t\t\tconst iconRect = pillRect;\n\n\t\t\t// docked = pill was already in the viewport\n\t\t\tconst iconDirection = pillRect.top < pillFullyDockedRect.top ?\n\t\t\t\t'top' as const :\n\t\t\t\t'bottom' as const;\n\n\t\t\treturn {\n\t\t\t\tgutterEditArea,\n\t\t\t\ticon: iconNoneDocked,\n\t\t\t\ticonDirection,\n\t\t\t\ticonRect,\n\t\t\t\tpillRect,\n\t\t\t};\n\t\t});\n\t\tthis._iconRef = n.ref<HTMLDivElement>();\n\t\tthis.isVisible = this._layout.map(l => !!l);\n\t\tthis._indicator = n.div({\n\t\t\tclass: 'inline-edits-view-gutter-indicator',\n\t\t\tonclick: () => {\n\t\t\t\tconst layout = this._layout.get();\n\t\t\t\tconst acceptOnClick = layout?.icon.get() === Codicon.check;\n\n\t\t\t\tthis._editorObs.editor.focus();\n\t\t\t\tif (acceptOnClick) {\n\t\t\t\t\tthis.model.accept();\n\t\t\t\t} else {\n\t\t\t\t\tthis.model.jump();\n\t\t\t\t}\n\t\t\t},\n\t\t\ttabIndex: 0,\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\toverflow: 'visible',\n\t\t\t},\n\t\t}, mapOutFalsy(this._layout).map(layout => !layout ? [] : [\n\t\t\tn.div({\n\t\t\t\tstyle: {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tbackground: asCssVariable(inlineEditIndicatorBackground),\n\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t...rectToProps(reader => layout.read(reader).gutterEditArea),\n\t\t\t\t}\n\t\t\t}),\n\t\t\tn.div({\n\t\t\t\tclass: 'icon',\n\t\t\t\tref: this._iconRef,\n\t\t\t\tonmouseenter: () => {\n\t\t\t\t\t// TODO show hover when hovering ghost text etc.\n\t\t\t\t\tthis._showHover();\n\t\t\t\t},\n\t\t\t\tstyle: {\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tzIndex: '20',\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tbackgroundColor: this._gutterIndicatorStyles.map(v => v.background),\n\t\t\t\t\t['--vscodeIconForeground' as any]: this._gutterIndicatorStyles.map(v => v.foreground),\n\t\t\t\t\tborder: this._gutterIndicatorStyles.map(v => `1px solid ${v.border}`),\n\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\ttransition: 'background-color 0.2s ease-in-out, width 0.2s ease-in-out',\n\t\t\t\t\t...rectToProps(reader => layout.read(reader).pillRect),\n\t\t\t\t}\n\t\t\t}, [\n\t\t\t\tn.div({\n\t\t\t\t\tclassName: 'line-number',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tlineHeight: layout.map(l => l.lineNumberRect ? l.lineNumberRect.height : 0),\n\t\t\t\t\t\tdisplay: layout.map(l => l.lineNumberRect ? 'flex' : 'none'),\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\t\twidth: layout.map(l => l.lineNumberRect ? l.lineNumberRect.width : 0),\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\tcolor: this._gutterIndicatorStyles.map(v => v.foreground),\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\tthis._lineNumberToRender\n\t\t\t\t),\n\t\t\t\tn.div({\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\trotate: layout.map(l => `${getRotationFromDirection(l.iconDirection)}deg`),\n\t\t\t\t\t\ttransition: 'rotate 0.2s ease-in-out',\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\tmarginRight: layout.map(l => l.pillRect.width - l.iconRect.width - (l.lineNumberRect?.width ?? 0)),\n\t\t\t\t\t\twidth: layout.map(l => l.iconRect.width),\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tlayout.map((l, reader) => renderIcon(l.icon.read(reader))),\n\t\t\t\t])\n\t\t\t]),\n\t\t])).keepUpdated(this._store);\n\n\t\tthis._register(this._editorObs.createOverlayWidget({\n\t\t\tdomNode: this._indicator.element,\n\t\t\tposition: constObservable(null),\n\t\t\tallowEditorOverflow: false,\n\t\t\tminContentWidthInPx: constObservable(0),\n\t\t}));\n\n\t\tthis._register(this._editorObs.editor.onMouseMove((e: IEditorMouseEvent) => {\n\t\t\tconst state = this._state.get();\n\t\t\tif (state === undefined) { return; }\n\n\t\t\tconst el = this._iconRef.element;\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tconst rectangularArea = Rect.fromLeftTopWidthHeight(rect.left, rect.top, rect.width, rect.height);\n\t\t\tconst point = new Point(e.event.posx, e.event.posy);\n\t\t\tthis._isHoveredOverIcon.set(rectangularArea.containsPoint(point), undefined);\n\t\t}));\n\n\t\tthis._register(this._editorObs.editor.onDidScrollChange(() => {\n\t\t\tthis._isHoveredOverIcon.set(false, undefined);\n\t\t}));\n\n\t\t// pulse animation when hovering inline edit\n\t\tthis._register(runOnChange(this._isHoveredOverInlineEditDebounced, (isHovering) => {\n\t\t\tif (isHovering) {\n\t\t\t\tthis.triggerAnimation();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tthis._indicator.readEffect(reader);\n\t\t\tif (this._indicator.element) {\n\t\t\t\tthis._editorObs.editor.applyFontInfo(this._indicator.element);\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic triggerAnimation(): Promise<Animation> {\n\t\tif (this._accessibilityService.isMotionReduced()) {\n\t\t\treturn new Animation(null, null).finished;\n\t\t}\n\n\t\t// PULSE ANIMATION:\n\t\tconst animation = this._iconRef.element.animate([\n\t\t\t{\n\t\t\t\toutline: `2px solid ${this._gutterIndicatorStyles.map(v => v.border).get()}`,\n\t\t\t\toutlineOffset: '-1px',\n\t\t\t\toffset: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\toutline: `2px solid transparent`,\n\t\t\t\toutlineOffset: '10px',\n\t\t\t\toffset: 1\n\t\t\t},\n\t\t], { duration: 500 });\n\n\t\treturn animation.finished;\n\t}\n\n\tprivate readonly _originalRangeObs;\n\n\tprivate readonly _state;\n\n\tprivate readonly _stickyScrollController;\n\tprivate readonly _stickyScrollHeight;\n\n\tprivate readonly _lineNumberToRender;\n\n\tprivate readonly _availableWidthForIcon;\n\n\tprivate readonly _layout;\n\n\n\tprivate readonly _iconRef;\n\n\tpublic readonly isVisible;\n\n\tprivate readonly _hoverVisible;\n\tpublic readonly isHoverVisible: IObservable<boolean>;\n\n\tprivate readonly _isHoveredOverIcon;\n\tprivate readonly _isHoveredOverIconDebounced: IObservable<boolean>;\n\tpublic readonly isHoveredOverIcon: IObservable<boolean>;\n\n\tprivate _showHover(): void {\n\t\tif (this._hoverVisible.get()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst disposableStore = new DisposableStore();\n\t\tconst content = disposableStore.add(this._instantiationService.createInstance(\n\t\t\tGutterIndicatorMenuContent,\n\t\t\tthis.model,\n\t\t\t(focusEditor) => {\n\t\t\t\tif (focusEditor) {\n\t\t\t\t\tthis._editorObs.editor.focus();\n\t\t\t\t}\n\t\t\t\th?.dispose();\n\t\t\t},\n\t\t\tthis._editorObs,\n\t\t).toDisposableLiveElement());\n\n\t\tconst focusTracker = disposableStore.add(trackFocus(content.element));\n\t\tdisposableStore.add(focusTracker.onDidBlur(() => this._focusIsInMenu.set(false, undefined)));\n\t\tdisposableStore.add(focusTracker.onDidFocus(() => this._focusIsInMenu.set(true, undefined)));\n\t\tdisposableStore.add(toDisposable(() => this._focusIsInMenu.set(false, undefined)));\n\n\t\tconst h = this._hoverService.showInstantHover({\n\t\t\ttarget: this._iconRef.element,\n\t\t\tcontent: content.element,\n\t\t}) as HoverWidget | undefined;\n\t\tif (h) {\n\t\t\tthis._hoverVisible.set(true, undefined);\n\t\t\tdisposableStore.add(this._editorObs.editor.onDidScrollChange(() => h.dispose()));\n\t\t\tdisposableStore.add(h.onDispose(() => {\n\t\t\t\tthis._hoverVisible.set(false, undefined);\n\t\t\t\tdisposableStore.dispose();\n\t\t\t}));\n\t\t} else {\n\t\t\tdisposableStore.dispose();\n\t\t}\n\t}\n\n\tprivate readonly _tabAction;\n\n\tprivate readonly _indicator;\n}\n\nfunction getRotationFromDirection(direction: 'top' | 'bottom' | 'right'): number {\n\tswitch (direction) {\n\t\tcase 'top': return 90;\n\t\tcase 'bottom': return -90;\n\t\tcase 'right': return 0;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.ts"],"names":[],"mappings":"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","file":"gutterIndicatorView.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 *--------------------------------------------------------------------------------------------*/\n\nimport { n, trackFocus } from '../../../../../../../base/browser/dom.js';\nimport { renderIcon } from '../../../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../../../base/common/codicons.js';\nimport { BugIndicatingError } from '../../../../../../../base/common/errors.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../../../../../base/common/lifecycle.js';\nimport { IObservable, ISettableObservable, autorun, constObservable, debouncedObservable, derived, observableFromEvent, observableValue, runOnChange } from '../../../../../../../base/common/observable.js';\nimport { IAccessibilityService } from '../../../../../../../platform/accessibility/common/accessibility.js';\nimport { IHoverService } from '../../../../../../../platform/hover/browser/hover.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 { IEditorMouseEvent } from '../../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { Point } from '../../../../../../common/core/2d/point.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { HoverService } from '../../../../../../browser/services/hoverService/hoverService.js';\nimport { HoverWidget } from '../../../../../../browser/services/hoverService/hoverWidget.js';\nimport { EditorOption, RenderLineNumbersType } from '../../../../../../common/config/editorOptions.js';\nimport { LineRange } from '../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { StickyScrollController } from '../../../../../stickyScroll/browser/stickyScrollController.js';\nimport { IInlineEditModel, InlineEditTabAction } from '../inlineEditsViewInterface.js';\nimport { getEditorBlendedColor, inlineEditIndicatorBackground, inlineEditIndicatorPrimaryBackground, inlineEditIndicatorPrimaryBorder, inlineEditIndicatorPrimaryForeground, inlineEditIndicatorSecondaryBackground, inlineEditIndicatorSecondaryBorder, inlineEditIndicatorSecondaryForeground, inlineEditIndicatorsuccessfulBackground, inlineEditIndicatorsuccessfulBorder, inlineEditIndicatorsuccessfulForeground } from '../theme.js';\nimport { mapOutFalsy, rectToProps } from '../utils/utils.js';\nimport { GutterIndicatorMenuContent } from './gutterIndicatorMenu.js';\nimport { assertNever } from '../../../../../../../base/common/assert.js';\n\nexport class InlineEditsGutterIndicator extends Disposable {\n\n\tprivate get model() {\n\t\tconst model = this._model.get();\n\t\tif (!model) { throw new BugIndicatingError('Inline Edit Model not available'); }\n\t\treturn model;\n\t}\n\n\tprivate readonly _gutterIndicatorStyles;\n\tprivate readonly _isHoveredOverInlineEditDebounced: IObservable<boolean>;\n\n\tconstructor(\n\t\tprivate readonly _editorObs: ObservableCodeEditor,\n\t\tprivate readonly _originalRange: IObservable<LineRange | undefined>,\n\t\tprivate readonly _verticalOffset: IObservable<number>,\n\t\tprivate readonly _model: IObservable<IInlineEditModel | undefined>,\n\t\tprivate readonly _isHoveringOverInlineEdit: IObservable<boolean>,\n\t\tprivate readonly _focusIsInMenu: ISettableObservable<boolean>,\n\t\t@IHoverService private readonly _hoverService: HoverService,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t\t@IAccessibilityService private readonly _accessibilityService: IAccessibilityService,\n\t\t@IThemeService themeService: IThemeService,\n\t) {\n\t\tsuper();\n\n\t\tthis._tabAction = derived(this, reader => {\n\t\t\tconst model = this._model.read(reader);\n\t\t\tif (!model) { return InlineEditTabAction.Inactive; }\n\t\t\treturn model.tabAction.read(reader);\n\t\t});\n\n\t\tthis._hoverVisible = observableValue(this, false);\n\t\tthis.isHoverVisible = this._hoverVisible;\n\t\tthis._isHoveredOverIcon = observableValue(this, false);\n\t\tthis._isHoveredOverIconDebounced = debouncedObservable(this._isHoveredOverIcon, 100);\n\t\tthis.isHoveredOverIcon = this._isHoveredOverIconDebounced;\n\t\tthis._isHoveredOverInlineEditDebounced = debouncedObservable(this._isHoveringOverInlineEdit, 100);\n\n\t\tthis._gutterIndicatorStyles = this._tabAction.map(this, (v, reader) => {\n\t\t\tswitch (v) {\n\t\t\t\tcase InlineEditTabAction.Inactive: return {\n\t\t\t\t\tbackground: getEditorBlendedColor(inlineEditIndicatorSecondaryBackground, themeService).read(reader).toString(),\n\t\t\t\t\tforeground: getEditorBlendedColor(inlineEditIndicatorSecondaryForeground, themeService).read(reader).toString(),\n\t\t\t\t\tborder: getEditorBlendedColor(inlineEditIndicatorSecondaryBorder, themeService).read(reader).toString(),\n\t\t\t\t};\n\t\t\t\tcase InlineEditTabAction.Jump: return {\n\t\t\t\t\tbackground: getEditorBlendedColor(inlineEditIndicatorPrimaryBackground, themeService).read(reader).toString(),\n\t\t\t\t\tforeground: getEditorBlendedColor(inlineEditIndicatorPrimaryForeground, themeService).read(reader).toString(),\n\t\t\t\t\tborder: getEditorBlendedColor(inlineEditIndicatorPrimaryBorder, themeService).read(reader).toString()\n\t\t\t\t};\n\t\t\t\tcase InlineEditTabAction.Accept: return {\n\t\t\t\t\tbackground: getEditorBlendedColor(inlineEditIndicatorsuccessfulBackground, themeService).read(reader).toString(),\n\t\t\t\t\tforeground: getEditorBlendedColor(inlineEditIndicatorsuccessfulForeground, themeService).read(reader).toString(),\n\t\t\t\t\tborder: getEditorBlendedColor(inlineEditIndicatorsuccessfulBorder, themeService).read(reader).toString()\n\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\tassertNever(v);\n\t\t\t}\n\t\t});\n\n\t\tthis._originalRangeObs = mapOutFalsy(this._originalRange);\n\t\tthis._state = derived(this, reader => {\n\t\t\tconst range = this._originalRangeObs.read(reader);\n\t\t\tif (!range) { return undefined; }\n\t\t\treturn {\n\t\t\t\trange,\n\t\t\t\tlineOffsetRange: this._editorObs.observeLineOffsetRange(range, this._store),\n\t\t\t};\n\t\t});\n\t\tthis._stickyScrollController = StickyScrollController.get(this._editorObs.editor);\n\t\tthis._stickyScrollHeight = this._stickyScrollController\n\t\t\t? observableFromEvent(this._stickyScrollController.onDidChangeStickyScrollHeight, () => this._stickyScrollController!.stickyScrollWidgetHeight)\n\t\t\t: constObservable(0);\n\t\tthis._lineNumberToRender = derived(this, reader => {\n\t\t\tif (this._verticalOffset.read(reader) !== 0) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tconst lineNumber = this._originalRange.read(reader)?.startLineNumber;\n\t\t\tconst lineNumberOptions = this._editorObs.getOption(EditorOption.lineNumbers).read(reader);\n\n\t\t\tif (lineNumber === undefined || lineNumberOptions.renderType === RenderLineNumbersType.Off) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Interval) {\n\t\t\t\tconst cursorPosition = this._editorObs.cursorPosition.read(reader);\n\t\t\t\tif (lineNumber % 10 === 0 || cursorPosition && cursorPosition.lineNumber === lineNumber) {\n\t\t\t\t\treturn lineNumber.toString();\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Relative) {\n\t\t\t\tconst cursorPosition = this._editorObs.cursorPosition.read(reader);\n\t\t\t\tif (!cursorPosition) {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t\tconst relativeLineNumber = Math.abs(lineNumber - cursorPosition.lineNumber);\n\t\t\t\tif (relativeLineNumber === 0) {\n\t\t\t\t\treturn lineNumber.toString();\n\t\t\t\t}\n\t\t\t\treturn relativeLineNumber.toString();\n\t\t\t}\n\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Custom) {\n\t\t\t\tif (lineNumberOptions.renderFn) {\n\t\t\t\t\treturn lineNumberOptions.renderFn(lineNumber);\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn lineNumber.toString();\n\t\t});\n\t\tthis._availableWidthForIcon = derived(this, reader => {\n\t\t\tconst textModel = this._editorObs.editor.getModel();\n\t\t\tconst editor = this._editorObs.editor;\n\t\t\tconst layout = this._editorObs.layoutInfo.read(reader);\n\t\t\tconst gutterWidth = layout.decorationsLeft + layout.decorationsWidth - layout.glyphMarginLeft;\n\n\t\t\tif (!textModel || gutterWidth <= 0) {\n\t\t\t\treturn () => 0;\n\t\t\t}\n\n\t\t\t// no glyph margin => the entire gutter width is available as there is no optimal place to put the icon\n\t\t\tif (layout.lineNumbersLeft === 0) {\n\t\t\t\treturn () => gutterWidth;\n\t\t\t}\n\n\t\t\tconst lineNumberOptions = this._editorObs.getOption(EditorOption.lineNumbers).read(reader);\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Relative || /* likely to flicker */\n\t\t\t\tlineNumberOptions.renderType === RenderLineNumbersType.Off) {\n\t\t\t\treturn () => gutterWidth;\n\t\t\t}\n\n\t\t\tconst w = editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\t\tconst rightOfLineNumber = layout.lineNumbersLeft + layout.lineNumbersWidth;\n\t\t\tconst totalLines = textModel.getLineCount();\n\t\t\tconst totalLinesDigits = (totalLines + 1 /* 0 based to 1 based*/).toString().length;\n\n\t\t\tconst offsetDigits: {\n\t\t\t\tfirstLineNumberWithDigitCount: number;\n\t\t\t\ttopOfLineNumber: number;\n\t\t\t\tusableWidthLeftOfLineNumber: number;\n\t\t\t}[] = [];\n\n\t\t\t// We only need to pre compute the usable width left of the line number for the first line number with a given digit count\n\t\t\tfor (let digits = 1; digits <= totalLinesDigits; digits++) {\n\t\t\t\tconst firstLineNumberWithDigitCount = 10 ** (digits - 1);\n\t\t\t\tconst topOfLineNumber = editor.getTopForLineNumber(firstLineNumberWithDigitCount);\n\t\t\t\tconst digitsWidth = digits * w;\n\t\t\t\tconst usableWidthLeftOfLineNumber = Math.min(gutterWidth, Math.max(0, rightOfLineNumber - digitsWidth - layout.glyphMarginLeft));\n\t\t\t\toffsetDigits.push({ firstLineNumberWithDigitCount, topOfLineNumber, usableWidthLeftOfLineNumber });\n\t\t\t}\n\n\t\t\treturn (topOffset: number) => {\n\t\t\t\tfor (let i = offsetDigits.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (topOffset >= offsetDigits[i].topOfLineNumber) {\n\t\t\t\t\t\treturn offsetDigits[i].usableWidthLeftOfLineNumber;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new BugIndicatingError('Could not find avilable width for icon');\n\t\t\t};\n\t\t});\n\t\tthis._layout = derived(this, reader => {\n\t\t\tconst s = this._state.read(reader);\n\t\t\tif (!s) { return undefined; }\n\n\t\t\tconst layout = this._editorObs.layoutInfo.read(reader);\n\n\t\t\tconst lineHeight = this._editorObs.observeLineHeightForLine(s.range.map(r => r.startLineNumber)).read(reader);\n\t\t\tconst gutterViewPortPadding = 2;\n\n\t\t\t// Entire gutter view from top left to bottom right\n\t\t\tconst gutterWidthWithoutPadding = layout.decorationsLeft + layout.decorationsWidth - layout.glyphMarginLeft - 2 * gutterViewPortPadding;\n\t\t\tconst gutterHeightWithoutPadding = layout.height - 2 * gutterViewPortPadding;\n\t\t\tconst gutterViewPortWithStickyScroll = Rect.fromLeftTopWidthHeight(gutterViewPortPadding, gutterViewPortPadding, gutterWidthWithoutPadding, gutterHeightWithoutPadding);\n\t\t\tconst gutterViewPortWithoutStickyScrollWithoutPaddingTop = gutterViewPortWithStickyScroll.withTop(this._stickyScrollHeight.read(reader));\n\t\t\tconst gutterViewPortWithoutStickyScroll = gutterViewPortWithStickyScroll.withTop(gutterViewPortWithoutStickyScrollWithoutPaddingTop.top + gutterViewPortPadding);\n\n\t\t\t// The glyph margin area across all relevant lines\n\t\t\tconst verticalEditRange = s.lineOffsetRange.read(reader);\n\t\t\tconst gutterEditArea = Rect.fromRanges(OffsetRange.fromTo(gutterViewPortWithoutStickyScroll.left, gutterViewPortWithoutStickyScroll.right), verticalEditRange);\n\n\t\t\t// The gutter view container (pill)\n\t\t\tconst pillHeight = lineHeight;\n\t\t\tconst pillOffset = this._verticalOffset.read(reader);\n\t\t\tconst pillFullyDockedRect = gutterEditArea.withHeight(pillHeight).translateY(pillOffset);\n\t\t\tconst pillIsFullyDocked = gutterViewPortWithoutStickyScrollWithoutPaddingTop.containsRect(pillFullyDockedRect);\n\n\t\t\t// The icon which will be rendered in the pill\n\t\t\tconst iconNoneDocked = this._tabAction.map(action => action === InlineEditTabAction.Accept ? Codicon.keyboardTab : Codicon.arrowRight);\n\t\t\tconst iconDocked = derived(this, reader => {\n\t\t\t\tif (this._isHoveredOverIconDebounced.read(reader) || this._isHoveredOverInlineEditDebounced.read(reader)) {\n\t\t\t\t\treturn Codicon.check;\n\t\t\t\t}\n\t\t\t\tif (this._tabAction.read(reader) === InlineEditTabAction.Accept) {\n\t\t\t\t\treturn Codicon.keyboardTab;\n\t\t\t\t}\n\t\t\t\tconst cursorLineNumber = this._editorObs.cursorLineNumber.read(reader) ?? 0;\n\t\t\t\tconst editStartLineNumber = s.range.read(reader).startLineNumber;\n\t\t\t\treturn cursorLineNumber <= editStartLineNumber ? Codicon.keyboardTabAbove : Codicon.keyboardTabBelow;\n\t\t\t});\n\n\t\t\tconst idealIconWidth = 22;\n\t\t\tconst minimalIconWidth = 16; // codicon size\n\t\t\tconst iconWidth = (pillRect: Rect) => {\n\t\t\t\tconst availableWidth = this._availableWidthForIcon.read(undefined)(pillRect.bottom + this._editorObs.editor.getScrollTop()) - gutterViewPortPadding;\n\t\t\t\treturn Math.max(Math.min(availableWidth, idealIconWidth), minimalIconWidth);\n\t\t\t};\n\n\t\t\tif (pillIsFullyDocked) {\n\t\t\t\tconst pillRect = pillFullyDockedRect;\n\n\t\t\t\tlet lineNumberWidth;\n\t\t\t\tif (layout.lineNumbersWidth === 0) {\n\t\t\t\t\tlineNumberWidth = Math.min(Math.max(layout.lineNumbersLeft - gutterViewPortWithStickyScroll.left, 0), pillRect.width - idealIconWidth);\n\t\t\t\t} else {\n\t\t\t\t\tlineNumberWidth = Math.max(layout.lineNumbersLeft + layout.lineNumbersWidth - gutterViewPortWithStickyScroll.left, 0);\n\t\t\t\t}\n\n\t\t\t\tconst lineNumberRect = pillRect.withWidth(lineNumberWidth);\n\t\t\t\tconst iconWidth = Math.max(Math.min(layout.decorationsWidth, idealIconWidth), minimalIconWidth);\n\t\t\t\tconst iconRect = pillRect.withWidth(iconWidth).translateX(lineNumberWidth);\n\n\t\t\t\treturn {\n\t\t\t\t\tgutterEditArea,\n\t\t\t\t\ticon: iconDocked,\n\t\t\t\t\ticonDirection: 'right' as const,\n\t\t\t\t\ticonRect,\n\t\t\t\t\tpillRect,\n\t\t\t\t\tlineNumberRect,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst pillPartiallyDockedPossibleArea = gutterViewPortWithStickyScroll.intersect(gutterEditArea); // The area in which the pill could be partially docked\n\t\t\tconst pillIsPartiallyDocked = pillPartiallyDockedPossibleArea && pillPartiallyDockedPossibleArea.height >= pillHeight;\n\n\t\t\tif (pillIsPartiallyDocked) {\n\t\t\t\t// pillFullyDockedRect is outside viewport, move it into the viewport under sticky scroll as we prefer the pill to not be on top of the sticky scroll\n\t\t\t\t// then move it into the possible area which will only cause it to move if it has to be rendered on top of the sticky scroll\n\t\t\t\tconst pillRectMoved = pillFullyDockedRect.moveToBeContainedIn(gutterViewPortWithoutStickyScroll).moveToBeContainedIn(pillPartiallyDockedPossibleArea);\n\t\t\t\tconst pillRect = pillRectMoved.withWidth(iconWidth(pillRectMoved));\n\t\t\t\tconst iconRect = pillRect;\n\n\t\t\t\treturn {\n\t\t\t\t\tgutterEditArea,\n\t\t\t\t\ticon: iconDocked,\n\t\t\t\t\ticonDirection: 'right' as const,\n\t\t\t\t\ticonRect,\n\t\t\t\t\tpillRect,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// pillFullyDockedRect is outside viewport, so move it into viewport\n\t\t\tconst pillRectMoved = pillFullyDockedRect.moveToBeContainedIn(gutterViewPortWithStickyScroll);\n\t\t\tconst pillRect = pillRectMoved.withWidth(iconWidth(pillRectMoved));\n\t\t\tconst iconRect = pillRect;\n\n\t\t\t// docked = pill was already in the viewport\n\t\t\tconst iconDirection = pillRect.top < pillFullyDockedRect.top ?\n\t\t\t\t'top' as const :\n\t\t\t\t'bottom' as const;\n\n\t\t\treturn {\n\t\t\t\tgutterEditArea,\n\t\t\t\ticon: iconNoneDocked,\n\t\t\t\ticonDirection,\n\t\t\t\ticonRect,\n\t\t\t\tpillRect,\n\t\t\t};\n\t\t});\n\t\tthis._iconRef = n.ref<HTMLDivElement>();\n\t\tthis.isVisible = this._layout.map(l => !!l);\n\t\tthis._indicator = n.div({\n\t\t\tclass: 'inline-edits-view-gutter-indicator',\n\t\t\tonclick: () => {\n\t\t\t\tconst layout = this._layout.get();\n\t\t\t\tconst acceptOnClick = layout?.icon.get() === Codicon.check;\n\n\t\t\t\tthis._editorObs.editor.focus();\n\t\t\t\tif (acceptOnClick) {\n\t\t\t\t\tthis.model.accept();\n\t\t\t\t} else {\n\t\t\t\t\tthis.model.jump();\n\t\t\t\t}\n\t\t\t},\n\t\t\ttabIndex: 0,\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\toverflow: 'visible',\n\t\t\t},\n\t\t}, mapOutFalsy(this._layout).map(layout => !layout ? [] : [\n\t\t\tn.div({\n\t\t\t\tstyle: {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tbackground: asCssVariable(inlineEditIndicatorBackground),\n\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t...rectToProps(reader => layout.read(reader).gutterEditArea),\n\t\t\t\t}\n\t\t\t}),\n\t\t\tn.div({\n\t\t\t\tclass: 'icon',\n\t\t\t\tref: this._iconRef,\n\t\t\t\tonmouseenter: () => {\n\t\t\t\t\t// TODO show hover when hovering ghost text etc.\n\t\t\t\t\tthis._showHover();\n\t\t\t\t},\n\t\t\t\tstyle: {\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tzIndex: '20',\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tbackgroundColor: this._gutterIndicatorStyles.map(v => v.background),\n\t\t\t\t\t['--vscodeIconForeground' as any]: this._gutterIndicatorStyles.map(v => v.foreground),\n\t\t\t\t\tborder: this._gutterIndicatorStyles.map(v => `1px solid ${v.border}`),\n\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\ttransition: 'background-color 0.2s ease-in-out, width 0.2s ease-in-out',\n\t\t\t\t\t...rectToProps(reader => layout.read(reader).pillRect),\n\t\t\t\t}\n\t\t\t}, [\n\t\t\t\tn.div({\n\t\t\t\t\tclassName: 'line-number',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tlineHeight: layout.map(l => l.lineNumberRect ? l.lineNumberRect.height : 0),\n\t\t\t\t\t\tdisplay: layout.map(l => l.lineNumberRect ? 'flex' : 'none'),\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\t\twidth: layout.map(l => l.lineNumberRect ? l.lineNumberRect.width : 0),\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\tcolor: this._gutterIndicatorStyles.map(v => v.foreground),\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\tthis._lineNumberToRender\n\t\t\t\t),\n\t\t\t\tn.div({\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\trotate: layout.map(l => `${getRotationFromDirection(l.iconDirection)}deg`),\n\t\t\t\t\t\ttransition: 'rotate 0.2s ease-in-out',\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\tmarginRight: layout.map(l => l.pillRect.width - l.iconRect.width - (l.lineNumberRect?.width ?? 0)),\n\t\t\t\t\t\twidth: layout.map(l => l.iconRect.width),\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tlayout.map((l, reader) => renderIcon(l.icon.read(reader))),\n\t\t\t\t])\n\t\t\t]),\n\t\t])).keepUpdated(this._store);\n\n\t\tthis._register(this._editorObs.createOverlayWidget({\n\t\t\tdomNode: this._indicator.element,\n\t\t\tposition: constObservable(null),\n\t\t\tallowEditorOverflow: false,\n\t\t\tminContentWidthInPx: constObservable(0),\n\t\t}));\n\n\t\tthis._register(this._editorObs.editor.onMouseMove((e: IEditorMouseEvent) => {\n\t\t\tconst state = this._state.get();\n\t\t\tif (state === undefined) { return; }\n\n\t\t\tconst el = this._iconRef.element;\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tconst rectangularArea = Rect.fromLeftTopWidthHeight(rect.left, rect.top, rect.width, rect.height);\n\t\t\tconst point = new Point(e.event.posx, e.event.posy);\n\t\t\tthis._isHoveredOverIcon.set(rectangularArea.containsPoint(point), undefined);\n\t\t}));\n\n\t\tthis._register(this._editorObs.editor.onDidScrollChange(() => {\n\t\t\tthis._isHoveredOverIcon.set(false, undefined);\n\t\t}));\n\n\t\t// pulse animation when hovering inline edit\n\t\tthis._register(runOnChange(this._isHoveredOverInlineEditDebounced, (isHovering) => {\n\t\t\tif (isHovering) {\n\t\t\t\tthis.triggerAnimation();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tthis._indicator.readEffect(reader);\n\t\t\tif (this._indicator.element) {\n\t\t\t\tthis._editorObs.editor.applyFontInfo(this._indicator.element);\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic triggerAnimation(): Promise<Animation> {\n\t\tif (this._accessibilityService.isMotionReduced()) {\n\t\t\treturn new Animation(null, null).finished;\n\t\t}\n\n\t\t// PULSE ANIMATION:\n\t\tconst animation = this._iconRef.element.animate([\n\t\t\t{\n\t\t\t\toutline: `2px solid ${this._gutterIndicatorStyles.map(v => v.border).get()}`,\n\t\t\t\toutlineOffset: '-1px',\n\t\t\t\toffset: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\toutline: `2px solid transparent`,\n\t\t\t\toutlineOffset: '10px',\n\t\t\t\toffset: 1\n\t\t\t},\n\t\t], { duration: 500 });\n\n\t\treturn animation.finished;\n\t}\n\n\tprivate readonly _originalRangeObs;\n\n\tprivate readonly _state;\n\n\tprivate readonly _stickyScrollController;\n\tprivate readonly _stickyScrollHeight;\n\n\tprivate readonly _lineNumberToRender;\n\n\tprivate readonly _availableWidthForIcon;\n\n\tprivate readonly _layout;\n\n\n\tprivate readonly _iconRef;\n\n\tpublic readonly isVisible;\n\n\tprivate readonly _hoverVisible;\n\tpublic readonly isHoverVisible: IObservable<boolean>;\n\n\tprivate readonly _isHoveredOverIcon;\n\tprivate readonly _isHoveredOverIconDebounced: IObservable<boolean>;\n\tpublic readonly isHoveredOverIcon: IObservable<boolean>;\n\n\tprivate _showHover(): void {\n\t\tif (this._hoverVisible.get()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst disposableStore = new DisposableStore();\n\t\tconst content = disposableStore.add(this._instantiationService.createInstance(\n\t\t\tGutterIndicatorMenuContent,\n\t\t\tthis.model,\n\t\t\t(focusEditor) => {\n\t\t\t\tif (focusEditor) {\n\t\t\t\t\tthis._editorObs.editor.focus();\n\t\t\t\t}\n\t\t\t\th?.dispose();\n\t\t\t},\n\t\t\tthis._editorObs,\n\t\t).toDisposableLiveElement());\n\n\t\tconst focusTracker = disposableStore.add(trackFocus(content.element));\n\t\tdisposableStore.add(focusTracker.onDidBlur(() => this._focusIsInMenu.set(false, undefined)));\n\t\tdisposableStore.add(focusTracker.onDidFocus(() => this._focusIsInMenu.set(true, undefined)));\n\t\tdisposableStore.add(toDisposable(() => this._focusIsInMenu.set(false, undefined)));\n\n\t\tconst h = this._hoverService.showInstantHover({\n\t\t\ttarget: this._iconRef.element,\n\t\t\tcontent: content.element,\n\t\t}) as HoverWidget | undefined;\n\t\tif (h) {\n\t\t\tthis._hoverVisible.set(true, undefined);\n\t\t\tdisposableStore.add(this._editorObs.editor.onDidScrollChange(() => h.dispose()));\n\t\t\tdisposableStore.add(h.onDispose(() => {\n\t\t\t\tthis._hoverVisible.set(false, undefined);\n\t\t\t\tdisposableStore.dispose();\n\t\t\t}));\n\t\t} else {\n\t\t\tdisposableStore.dispose();\n\t\t}\n\t}\n\n\tprivate readonly _tabAction;\n\n\tprivate readonly _indicator;\n}\n\nfunction getRotationFromDirection(direction: 'top' | 'bottom' | 'right'): number {\n\tswitch (direction) {\n\t\tcase 'top': return 90;\n\t\tcase 'bottom': return -90;\n\t\tcase 'right': return 0;\n\t}\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 *--------------------------------------------------------------------------------------------*/\n\nimport { n, trackFocus } from '../../../../../../../base/browser/dom.js';\nimport { renderIcon } from '../../../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../../../base/common/codicons.js';\nimport { BugIndicatingError } from '../../../../../../../base/common/errors.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../../../../../base/common/lifecycle.js';\nimport { IObservable, ISettableObservable, autorun, constObservable, debouncedObservable, derived, observableFromEvent, observableValue, runOnChange } from '../../../../../../../base/common/observable.js';\nimport { IAccessibilityService } from '../../../../../../../platform/accessibility/common/accessibility.js';\nimport { IHoverService } from '../../../../../../../platform/hover/browser/hover.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 { IEditorMouseEvent } from '../../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { Point } from '../../../../../../common/core/2d/point.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { HoverService } from '../../../../../../browser/services/hoverService/hoverService.js';\nimport { HoverWidget } from '../../../../../../browser/services/hoverService/hoverWidget.js';\nimport { EditorOption, RenderLineNumbersType } from '../../../../../../common/config/editorOptions.js';\nimport { LineRange } from '../../../../../../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { StickyScrollController } from '../../../../../stickyScroll/browser/stickyScrollController.js';\nimport { IInlineEditModel, InlineEditTabAction } from '../inlineEditsViewInterface.js';\nimport { getEditorBlendedColor, inlineEditIndicatorBackground, inlineEditIndicatorPrimaryBackground, inlineEditIndicatorPrimaryBorder, inlineEditIndicatorPrimaryForeground, inlineEditIndicatorSecondaryBackground, inlineEditIndicatorSecondaryBorder, inlineEditIndicatorSecondaryForeground, inlineEditIndicatorsuccessfulBackground, inlineEditIndicatorsuccessfulBorder, inlineEditIndicatorsuccessfulForeground } from '../theme.js';\nimport { mapOutFalsy, rectToProps } from '../utils/utils.js';\nimport { GutterIndicatorMenuContent } from './gutterIndicatorMenu.js';\nimport { assertNever } from '../../../../../../../base/common/assert.js';\n\nexport class InlineEditsGutterIndicator extends Disposable {\n\n\tprivate get model() {\n\t\tconst model = this._model.get();\n\t\tif (!model) { throw new BugIndicatingError('Inline Edit Model not available'); }\n\t\treturn model;\n\t}\n\n\tprivate readonly _gutterIndicatorStyles;\n\tprivate readonly _isHoveredOverInlineEditDebounced: IObservable<boolean>;\n\n\tconstructor(\n\t\tprivate readonly _editorObs: ObservableCodeEditor,\n\t\tprivate readonly _originalRange: IObservable<LineRange | undefined>,\n\t\tprivate readonly _verticalOffset: IObservable<number>,\n\t\tprivate readonly _model: IObservable<IInlineEditModel | undefined>,\n\t\tprivate readonly _isHoveringOverInlineEdit: IObservable<boolean>,\n\t\tprivate readonly _focusIsInMenu: ISettableObservable<boolean>,\n\t\t@IHoverService private readonly _hoverService: HoverService,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t\t@IAccessibilityService private readonly _accessibilityService: IAccessibilityService,\n\t\t@IThemeService themeService: IThemeService,\n\t) {\n\t\tsuper();\n\n\t\tthis._tabAction = derived(this, reader => {\n\t\t\tconst model = this._model.read(reader);\n\t\t\tif (!model) { return InlineEditTabAction.Inactive; }\n\t\t\treturn model.tabAction.read(reader);\n\t\t});\n\n\t\tthis._hoverVisible = observableValue(this, false);\n\t\tthis.isHoverVisible = this._hoverVisible;\n\t\tthis._isHoveredOverIcon = observableValue(this, false);\n\t\tthis._isHoveredOverIconDebounced = debouncedObservable(this._isHoveredOverIcon, 100);\n\t\tthis.isHoveredOverIcon = this._isHoveredOverIconDebounced;\n\t\tthis._isHoveredOverInlineEditDebounced = debouncedObservable(this._isHoveringOverInlineEdit, 100);\n\n\t\tthis._gutterIndicatorStyles = this._tabAction.map(this, (v, reader) => {\n\t\t\tswitch (v) {\n\t\t\t\tcase InlineEditTabAction.Inactive: return {\n\t\t\t\t\tbackground: getEditorBlendedColor(inlineEditIndicatorSecondaryBackground, themeService).read(reader).toString(),\n\t\t\t\t\tforeground: getEditorBlendedColor(inlineEditIndicatorSecondaryForeground, themeService).read(reader).toString(),\n\t\t\t\t\tborder: getEditorBlendedColor(inlineEditIndicatorSecondaryBorder, themeService).read(reader).toString(),\n\t\t\t\t};\n\t\t\t\tcase InlineEditTabAction.Jump: return {\n\t\t\t\t\tbackground: getEditorBlendedColor(inlineEditIndicatorPrimaryBackground, themeService).read(reader).toString(),\n\t\t\t\t\tforeground: getEditorBlendedColor(inlineEditIndicatorPrimaryForeground, themeService).read(reader).toString(),\n\t\t\t\t\tborder: getEditorBlendedColor(inlineEditIndicatorPrimaryBorder, themeService).read(reader).toString()\n\t\t\t\t};\n\t\t\t\tcase InlineEditTabAction.Accept: return {\n\t\t\t\t\tbackground: getEditorBlendedColor(inlineEditIndicatorsuccessfulBackground, themeService).read(reader).toString(),\n\t\t\t\t\tforeground: getEditorBlendedColor(inlineEditIndicatorsuccessfulForeground, themeService).read(reader).toString(),\n\t\t\t\t\tborder: getEditorBlendedColor(inlineEditIndicatorsuccessfulBorder, themeService).read(reader).toString()\n\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\tassertNever(v);\n\t\t\t}\n\t\t});\n\n\t\tthis._originalRangeObs = mapOutFalsy(this._originalRange);\n\t\tthis._state = derived(this, reader => {\n\t\t\tconst range = this._originalRangeObs.read(reader);\n\t\t\tif (!range) { return undefined; }\n\t\t\treturn {\n\t\t\t\trange,\n\t\t\t\tlineOffsetRange: this._editorObs.observeLineOffsetRange(range, this._store),\n\t\t\t};\n\t\t});\n\t\tthis._stickyScrollController = StickyScrollController.get(this._editorObs.editor);\n\t\tthis._stickyScrollHeight = this._stickyScrollController\n\t\t\t? observableFromEvent(this._stickyScrollController.onDidChangeStickyScrollHeight, () => this._stickyScrollController!.stickyScrollWidgetHeight)\n\t\t\t: constObservable(0);\n\t\tthis._lineNumberToRender = derived(this, reader => {\n\t\t\tif (this._verticalOffset.read(reader) !== 0) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tconst lineNumber = this._originalRange.read(reader)?.startLineNumber;\n\t\t\tconst lineNumberOptions = this._editorObs.getOption(EditorOption.lineNumbers).read(reader);\n\n\t\t\tif (lineNumber === undefined || lineNumberOptions.renderType === RenderLineNumbersType.Off) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Interval) {\n\t\t\t\tconst cursorPosition = this._editorObs.cursorPosition.read(reader);\n\t\t\t\tif (lineNumber % 10 === 0 || cursorPosition && cursorPosition.lineNumber === lineNumber) {\n\t\t\t\t\treturn lineNumber.toString();\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Relative) {\n\t\t\t\tconst cursorPosition = this._editorObs.cursorPosition.read(reader);\n\t\t\t\tif (!cursorPosition) {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t\tconst relativeLineNumber = Math.abs(lineNumber - cursorPosition.lineNumber);\n\t\t\t\tif (relativeLineNumber === 0) {\n\t\t\t\t\treturn lineNumber.toString();\n\t\t\t\t}\n\t\t\t\treturn relativeLineNumber.toString();\n\t\t\t}\n\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Custom) {\n\t\t\t\tif (lineNumberOptions.renderFn) {\n\t\t\t\t\treturn lineNumberOptions.renderFn(lineNumber);\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn lineNumber.toString();\n\t\t});\n\t\tthis._availableWidthForIcon = derived(this, reader => {\n\t\t\tconst textModel = this._editorObs.editor.getModel();\n\t\t\tconst editor = this._editorObs.editor;\n\t\t\tconst layout = this._editorObs.layoutInfo.read(reader);\n\t\t\tconst gutterWidth = layout.decorationsLeft + layout.decorationsWidth - layout.glyphMarginLeft;\n\n\t\t\tif (!textModel || gutterWidth <= 0) {\n\t\t\t\treturn () => 0;\n\t\t\t}\n\n\t\t\t// no glyph margin => the entire gutter width is available as there is no optimal place to put the icon\n\t\t\tif (layout.lineNumbersLeft === 0) {\n\t\t\t\treturn () => gutterWidth;\n\t\t\t}\n\n\t\t\tconst lineNumberOptions = this._editorObs.getOption(EditorOption.lineNumbers).read(reader);\n\t\t\tif (lineNumberOptions.renderType === RenderLineNumbersType.Relative || /* likely to flicker */\n\t\t\t\tlineNumberOptions.renderType === RenderLineNumbersType.Off) {\n\t\t\t\treturn () => gutterWidth;\n\t\t\t}\n\n\t\t\tconst w = editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\t\tconst rightOfLineNumber = layout.lineNumbersLeft + layout.lineNumbersWidth;\n\t\t\tconst totalLines = textModel.getLineCount();\n\t\t\tconst totalLinesDigits = (totalLines + 1 /* 0 based to 1 based*/).toString().length;\n\n\t\t\tconst offsetDigits: {\n\t\t\t\tfirstLineNumberWithDigitCount: number;\n\t\t\t\ttopOfLineNumber: number;\n\t\t\t\tusableWidthLeftOfLineNumber: number;\n\t\t\t}[] = [];\n\n\t\t\t// We only need to pre compute the usable width left of the line number for the first line number with a given digit count\n\t\t\tfor (let digits = 1; digits <= totalLinesDigits; digits++) {\n\t\t\t\tconst firstLineNumberWithDigitCount = 10 ** (digits - 1);\n\t\t\t\tconst topOfLineNumber = editor.getTopForLineNumber(firstLineNumberWithDigitCount);\n\t\t\t\tconst digitsWidth = digits * w;\n\t\t\t\tconst usableWidthLeftOfLineNumber = Math.min(gutterWidth, Math.max(0, rightOfLineNumber - digitsWidth - layout.glyphMarginLeft));\n\t\t\t\toffsetDigits.push({ firstLineNumberWithDigitCount, topOfLineNumber, usableWidthLeftOfLineNumber });\n\t\t\t}\n\n\t\t\treturn (topOffset: number) => {\n\t\t\t\tfor (let i = offsetDigits.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (topOffset >= offsetDigits[i].topOfLineNumber) {\n\t\t\t\t\t\treturn offsetDigits[i].usableWidthLeftOfLineNumber;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new BugIndicatingError('Could not find avilable width for icon');\n\t\t\t};\n\t\t});\n\t\tthis._layout = derived(this, reader => {\n\t\t\tconst s = this._state.read(reader);\n\t\t\tif (!s) { return undefined; }\n\n\t\t\tconst layout = this._editorObs.layoutInfo.read(reader);\n\n\t\t\tconst lineHeight = this._editorObs.observeLineHeightForLine(s.range.map(r => r.startLineNumber)).read(reader);\n\t\t\tconst gutterViewPortPadding = 2;\n\n\t\t\t// Entire gutter view from top left to bottom right\n\t\t\tconst gutterWidthWithoutPadding = layout.decorationsLeft + layout.decorationsWidth - layout.glyphMarginLeft - 2 * gutterViewPortPadding;\n\t\t\tconst gutterHeightWithoutPadding = layout.height - 2 * gutterViewPortPadding;\n\t\t\tconst gutterViewPortWithStickyScroll = Rect.fromLeftTopWidthHeight(gutterViewPortPadding, gutterViewPortPadding, gutterWidthWithoutPadding, gutterHeightWithoutPadding);\n\t\t\tconst gutterViewPortWithoutStickyScrollWithoutPaddingTop = gutterViewPortWithStickyScroll.withTop(this._stickyScrollHeight.read(reader));\n\t\t\tconst gutterViewPortWithoutStickyScroll = gutterViewPortWithStickyScroll.withTop(gutterViewPortWithoutStickyScrollWithoutPaddingTop.top + gutterViewPortPadding);\n\n\t\t\t// The glyph margin area across all relevant lines\n\t\t\tconst verticalEditRange = s.lineOffsetRange.read(reader);\n\t\t\tconst gutterEditArea = Rect.fromRanges(OffsetRange.fromTo(gutterViewPortWithoutStickyScroll.left, gutterViewPortWithoutStickyScroll.right), verticalEditRange);\n\n\t\t\t// The gutter view container (pill)\n\t\t\tconst pillHeight = lineHeight;\n\t\t\tconst pillOffset = this._verticalOffset.read(reader);\n\t\t\tconst pillFullyDockedRect = gutterEditArea.withHeight(pillHeight).translateY(pillOffset);\n\t\t\tconst pillIsFullyDocked = gutterViewPortWithoutStickyScrollWithoutPaddingTop.containsRect(pillFullyDockedRect);\n\n\t\t\t// The icon which will be rendered in the pill\n\t\t\tconst iconNoneDocked = this._tabAction.map(action => action === InlineEditTabAction.Accept ? Codicon.keyboardTab : Codicon.arrowRight);\n\t\t\tconst iconDocked = derived(this, reader => {\n\t\t\t\tif (this._isHoveredOverIconDebounced.read(reader) || this._isHoveredOverInlineEditDebounced.read(reader)) {\n\t\t\t\t\treturn Codicon.check;\n\t\t\t\t}\n\t\t\t\tif (this._tabAction.read(reader) === InlineEditTabAction.Accept) {\n\t\t\t\t\treturn Codicon.keyboardTab;\n\t\t\t\t}\n\t\t\t\tconst cursorLineNumber = this._editorObs.cursorLineNumber.read(reader) ?? 0;\n\t\t\t\tconst editStartLineNumber = s.range.read(reader).startLineNumber;\n\t\t\t\treturn cursorLineNumber <= editStartLineNumber ? Codicon.keyboardTabAbove : Codicon.keyboardTabBelow;\n\t\t\t});\n\n\t\t\tconst idealIconWidth = 22;\n\t\t\tconst minimalIconWidth = 16; // codicon size\n\t\t\tconst iconWidth = (pillRect: Rect) => {\n\t\t\t\tconst availableWidth = this._availableWidthForIcon.read(undefined)(pillRect.bottom + this._editorObs.editor.getScrollTop()) - gutterViewPortPadding;\n\t\t\t\treturn Math.max(Math.min(availableWidth, idealIconWidth), minimalIconWidth);\n\t\t\t};\n\n\t\t\tif (pillIsFullyDocked) {\n\t\t\t\tconst pillRect = pillFullyDockedRect;\n\n\t\t\t\tlet lineNumberWidth;\n\t\t\t\tif (layout.lineNumbersWidth === 0) {\n\t\t\t\t\tlineNumberWidth = Math.min(Math.max(layout.lineNumbersLeft - gutterViewPortWithStickyScroll.left, 0), pillRect.width - idealIconWidth);\n\t\t\t\t} else {\n\t\t\t\t\tlineNumberWidth = Math.max(layout.lineNumbersLeft + layout.lineNumbersWidth - gutterViewPortWithStickyScroll.left, 0);\n\t\t\t\t}\n\n\t\t\t\tconst lineNumberRect = pillRect.withWidth(lineNumberWidth);\n\t\t\t\tconst iconWidth = Math.max(Math.min(layout.decorationsWidth, idealIconWidth), minimalIconWidth);\n\t\t\t\tconst iconRect = pillRect.withWidth(iconWidth).translateX(lineNumberWidth);\n\n\t\t\t\treturn {\n\t\t\t\t\tgutterEditArea,\n\t\t\t\t\ticon: iconDocked,\n\t\t\t\t\ticonDirection: 'right' as const,\n\t\t\t\t\ticonRect,\n\t\t\t\t\tpillRect,\n\t\t\t\t\tlineNumberRect,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst pillPartiallyDockedPossibleArea = gutterViewPortWithStickyScroll.intersect(gutterEditArea); // The area in which the pill could be partially docked\n\t\t\tconst pillIsPartiallyDocked = pillPartiallyDockedPossibleArea && pillPartiallyDockedPossibleArea.height >= pillHeight;\n\n\t\t\tif (pillIsPartiallyDocked) {\n\t\t\t\t// pillFullyDockedRect is outside viewport, move it into the viewport under sticky scroll as we prefer the pill to not be on top of the sticky scroll\n\t\t\t\t// then move it into the possible area which will only cause it to move if it has to be rendered on top of the sticky scroll\n\t\t\t\tconst pillRectMoved = pillFullyDockedRect.moveToBeContainedIn(gutterViewPortWithoutStickyScroll).moveToBeContainedIn(pillPartiallyDockedPossibleArea);\n\t\t\t\tconst pillRect = pillRectMoved.withWidth(iconWidth(pillRectMoved));\n\t\t\t\tconst iconRect = pillRect;\n\n\t\t\t\treturn {\n\t\t\t\t\tgutterEditArea,\n\t\t\t\t\ticon: iconDocked,\n\t\t\t\t\ticonDirection: 'right' as const,\n\t\t\t\t\ticonRect,\n\t\t\t\t\tpillRect,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// pillFullyDockedRect is outside viewport, so move it into viewport\n\t\t\tconst pillRectMoved = pillFullyDockedRect.moveToBeContainedIn(gutterViewPortWithStickyScroll);\n\t\t\tconst pillRect = pillRectMoved.withWidth(iconWidth(pillRectMoved));\n\t\t\tconst iconRect = pillRect;\n\n\t\t\t// docked = pill was already in the viewport\n\t\t\tconst iconDirection = pillRect.top < pillFullyDockedRect.top ?\n\t\t\t\t'top' as const :\n\t\t\t\t'bottom' as const;\n\n\t\t\treturn {\n\t\t\t\tgutterEditArea,\n\t\t\t\ticon: iconNoneDocked,\n\t\t\t\ticonDirection,\n\t\t\t\ticonRect,\n\t\t\t\tpillRect,\n\t\t\t};\n\t\t});\n\t\tthis._iconRef = n.ref<HTMLDivElement>();\n\t\tthis.isVisible = this._layout.map(l => !!l);\n\t\tthis._indicator = n.div({\n\t\t\tclass: 'inline-edits-view-gutter-indicator',\n\t\t\tonclick: () => {\n\t\t\t\tconst layout = this._layout.get();\n\t\t\t\tconst acceptOnClick = layout?.icon.get() === Codicon.check;\n\n\t\t\t\tthis._editorObs.editor.focus();\n\t\t\t\tif (acceptOnClick) {\n\t\t\t\t\tthis.model.accept();\n\t\t\t\t} else {\n\t\t\t\t\tthis.model.jump();\n\t\t\t\t}\n\t\t\t},\n\t\t\ttabIndex: 0,\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\toverflow: 'visible',\n\t\t\t},\n\t\t}, mapOutFalsy(this._layout).map(layout => !layout ? [] : [\n\t\t\tn.div({\n\t\t\t\tstyle: {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tbackground: asCssVariable(inlineEditIndicatorBackground),\n\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t...rectToProps(reader => layout.read(reader).gutterEditArea),\n\t\t\t\t}\n\t\t\t}),\n\t\t\tn.div({\n\t\t\t\tclass: 'icon',\n\t\t\t\tref: this._iconRef,\n\t\t\t\tonmouseenter: () => {\n\t\t\t\t\t// TODO show hover when hovering ghost text etc.\n\t\t\t\t\tthis._showHover();\n\t\t\t\t},\n\t\t\t\tstyle: {\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tzIndex: '20',\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tbackgroundColor: this._gutterIndicatorStyles.map(v => v.background),\n\t\t\t\t\t['--vscodeIconForeground' as any]: this._gutterIndicatorStyles.map(v => v.foreground),\n\t\t\t\t\tborder: this._gutterIndicatorStyles.map(v => `1px solid ${v.border}`),\n\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\ttransition: 'background-color 0.2s ease-in-out, width 0.2s ease-in-out',\n\t\t\t\t\t...rectToProps(reader => layout.read(reader).pillRect),\n\t\t\t\t}\n\t\t\t}, [\n\t\t\t\tn.div({\n\t\t\t\t\tclassName: 'line-number',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tlineHeight: layout.map(l => l.lineNumberRect ? l.lineNumberRect.height : 0),\n\t\t\t\t\t\tdisplay: layout.map(l => l.lineNumberRect ? 'flex' : 'none'),\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\t\twidth: layout.map(l => l.lineNumberRect ? l.lineNumberRect.width : 0),\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\tcolor: this._gutterIndicatorStyles.map(v => v.foreground),\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\tthis._lineNumberToRender\n\t\t\t\t),\n\t\t\t\tn.div({\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\trotate: layout.map(l => `${getRotationFromDirection(l.iconDirection)}deg`),\n\t\t\t\t\t\ttransition: 'rotate 0.2s ease-in-out',\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\tmarginRight: layout.map(l => l.pillRect.width - l.iconRect.width - (l.lineNumberRect?.width ?? 0)),\n\t\t\t\t\t\twidth: layout.map(l => l.iconRect.width),\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tlayout.map((l, reader) => renderIcon(l.icon.read(reader))),\n\t\t\t\t])\n\t\t\t]),\n\t\t])).keepUpdated(this._store);\n\n\t\tthis._register(this._editorObs.createOverlayWidget({\n\t\t\tdomNode: this._indicator.element,\n\t\t\tposition: constObservable(null),\n\t\t\tallowEditorOverflow: false,\n\t\t\tminContentWidthInPx: constObservable(0),\n\t\t}));\n\n\t\tthis._register(this._editorObs.editor.onMouseMove((e: IEditorMouseEvent) => {\n\t\t\tconst state = this._state.get();\n\t\t\tif (state === undefined) { return; }\n\n\t\t\tconst el = this._iconRef.element;\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tconst rectangularArea = Rect.fromLeftTopWidthHeight(rect.left, rect.top, rect.width, rect.height);\n\t\t\tconst point = new Point(e.event.posx, e.event.posy);\n\t\t\tthis._isHoveredOverIcon.set(rectangularArea.containsPoint(point), undefined);\n\t\t}));\n\n\t\tthis._register(this._editorObs.editor.onDidScrollChange(() => {\n\t\t\tthis._isHoveredOverIcon.set(false, undefined);\n\t\t}));\n\n\t\t// pulse animation when hovering inline edit\n\t\tthis._register(runOnChange(this._isHoveredOverInlineEditDebounced, (isHovering) => {\n\t\t\tif (isHovering) {\n\t\t\t\tthis.triggerAnimation();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tthis._indicator.readEffect(reader);\n\t\t\tif (this._indicator.element) {\n\t\t\t\tthis._editorObs.editor.applyFontInfo(this._indicator.element);\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic triggerAnimation(): Promise<Animation> {\n\t\tif (this._accessibilityService.isMotionReduced()) {\n\t\t\treturn new Animation(null, null).finished;\n\t\t}\n\n\t\t// PULSE ANIMATION:\n\t\tconst animation = this._iconRef.element.animate([\n\t\t\t{\n\t\t\t\toutline: `2px solid ${this._gutterIndicatorStyles.map(v => v.border).get()}`,\n\t\t\t\toutlineOffset: '-1px',\n\t\t\t\toffset: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\toutline: `2px solid transparent`,\n\t\t\t\toutlineOffset: '10px',\n\t\t\t\toffset: 1\n\t\t\t},\n\t\t], { duration: 500 });\n\n\t\treturn animation.finished;\n\t}\n\n\tprivate readonly _originalRangeObs;\n\n\tprivate readonly _state;\n\n\tprivate readonly _stickyScrollController;\n\tprivate readonly _stickyScrollHeight;\n\n\tprivate readonly _lineNumberToRender;\n\n\tprivate readonly _availableWidthForIcon;\n\n\tprivate readonly _layout;\n\n\n\tprivate readonly _iconRef;\n\n\tpublic readonly isVisible;\n\n\tprivate readonly _hoverVisible;\n\tpublic readonly isHoverVisible: IObservable<boolean>;\n\n\tprivate readonly _isHoveredOverIcon;\n\tprivate readonly _isHoveredOverIconDebounced: IObservable<boolean>;\n\tpublic readonly isHoveredOverIcon: IObservable<boolean>;\n\n\tprivate _showHover(): void {\n\t\tif (this._hoverVisible.get()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst disposableStore = new DisposableStore();\n\t\tconst content = disposableStore.add(this._instantiationService.createInstance(\n\t\t\tGutterIndicatorMenuContent,\n\t\t\tthis.model,\n\t\t\t(focusEditor) => {\n\t\t\t\tif (focusEditor) {\n\t\t\t\t\tthis._editorObs.editor.focus();\n\t\t\t\t}\n\t\t\t\th?.dispose();\n\t\t\t},\n\t\t\tthis._editorObs,\n\t\t).toDisposableLiveElement());\n\n\t\tconst focusTracker = disposableStore.add(trackFocus(content.element));\n\t\tdisposableStore.add(focusTracker.onDidBlur(() => this._focusIsInMenu.set(false, undefined)));\n\t\tdisposableStore.add(focusTracker.onDidFocus(() => this._focusIsInMenu.set(true, undefined)));\n\t\tdisposableStore.add(toDisposable(() => this._focusIsInMenu.set(false, undefined)));\n\n\t\tconst h = this._hoverService.showInstantHover({\n\t\t\ttarget: this._iconRef.element,\n\t\t\tcontent: content.element,\n\t\t}) as HoverWidget | undefined;\n\t\tif (h) {\n\t\t\tthis._hoverVisible.set(true, undefined);\n\t\t\tdisposableStore.add(this._editorObs.editor.onDidScrollChange(() => h.dispose()));\n\t\t\tdisposableStore.add(h.onDispose(() => {\n\t\t\t\tthis._hoverVisible.set(false, undefined);\n\t\t\t\tdisposableStore.dispose();\n\t\t\t}));\n\t\t} else {\n\t\t\tdisposableStore.dispose();\n\t\t}\n\t}\n\n\tprivate readonly _tabAction;\n\n\tprivate readonly _indicator;\n}\n\nfunction getRotationFromDirection(direction: 'top' | 'bottom' | 'right'): number {\n\tswitch (direction) {\n\t\tcase 'top': return 90;\n\t\tcase 'bottom': return -90;\n\t\tcase 'right': return 0;\n\t}\n}\n"]}
|
package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js
CHANGED
|
@@ -47,7 +47,7 @@ let InlineEditsViewAndDiffProducer = class InlineEditsViewAndDiffProducer extend
|
|
|
47
47
|
if (!textModel) {
|
|
48
48
|
return undefined;
|
|
49
49
|
}
|
|
50
|
-
const editOffset = model.inlineEditState.
|
|
50
|
+
const editOffset = model.inlineEditState.read(undefined)?.inlineCompletion.updatedEdit;
|
|
51
51
|
if (!editOffset) {
|
|
52
52
|
return undefined;
|
|
53
53
|
}
|
|
@@ -57,7 +57,7 @@ let InlineEditsViewAndDiffProducer = class InlineEditsViewAndDiffProducer extend
|
|
|
57
57
|
});
|
|
58
58
|
const diffEdits = new TextEdit(edits);
|
|
59
59
|
const text = new TextModelText(textModel);
|
|
60
|
-
return new InlineEditWithChanges(text, diffEdits, model.primaryPosition.
|
|
60
|
+
return new InlineEditWithChanges(text, diffEdits, model.primaryPosition.read(undefined), inlineEdit.commands, inlineEdit.inlineCompletion);
|
|
61
61
|
});
|
|
62
62
|
this._inlineEditModel = derived(this, reader => {
|
|
63
63
|
const model = this._model.read(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/inlineEditsViewProducer.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.ts"],"names":[],"mappings":"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","file":"inlineEditsViewProducer.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 *--------------------------------------------------------------------------------------------*/\n\nimport { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable } from '../../../../../../base/common/lifecycle.js';\nimport { derived, IObservable, ISettableObservable } from '../../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js';\nimport { ICodeEditor } from '../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor, observableCodeEditor } from '../../../../../browser/observableCodeEditor.js';\nimport { LineRange } from '../../../../../common/core/ranges/lineRange.js';\nimport { Range } from '../../../../../common/core/range.js';\nimport { TextReplacement, TextEdit } from '../../../../../common/core/edits/textEdit.js';\nimport { TextModelText } from '../../../../../common/model/textModelText.js';\nimport { InlineCompletionsModel } from '../../model/inlineCompletionsModel.js';\nimport { InlineEdit } from '../../model/inlineEdit.js';\nimport { InlineEditWithChanges } from './inlineEditWithChanges.js';\nimport { GhostTextIndicator, InlineEditHost, InlineEditModel } from './inlineEditsModel.js';\nimport { InlineEditsView } from './inlineEditsView.js';\nimport { InlineEditTabAction } from './inlineEditsViewInterface.js';\n\nexport class InlineEditsViewAndDiffProducer extends Disposable { // TODO: This class is no longer a diff producer. Rename it or get rid of it\n\tpublic static readonly hot = createHotClass(InlineEditsViewAndDiffProducer);\n\n\tprivate readonly _editorObs: ObservableCodeEditor;\n\n\tprivate readonly _inlineEdit = derived<InlineEditWithChanges | undefined>(this, (reader) => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\tconst inlineEdit = this._edit.read(reader);\n\t\tif (!inlineEdit) { return undefined; }\n\t\tconst textModel = this._editor.getModel();\n\t\tif (!textModel) { return undefined; }\n\n\t\tconst editOffset = model.inlineEditState.get()?.inlineCompletion.updatedEdit;\n\t\tif (!editOffset) { return undefined; }\n\n\t\tconst edits = editOffset.replacements.map(e => {\n\t\t\tconst innerEditRange = Range.fromPositions(\n\t\t\t\ttextModel.getPositionAt(e.replaceRange.start),\n\t\t\t\ttextModel.getPositionAt(e.replaceRange.endExclusive)\n\t\t\t);\n\t\t\treturn new TextReplacement(innerEditRange, e.newText);\n\t\t});\n\n\t\tconst diffEdits = new TextEdit(edits);\n\t\tconst text = new TextModelText(textModel);\n\n\t\treturn new InlineEditWithChanges(text, diffEdits, model.primaryPosition.get(), inlineEdit.commands, inlineEdit.inlineCompletion);\n\t});\n\n\tprivate readonly _inlineEditModel = derived<InlineEditModel | undefined>(this, reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\tconst edit = this._inlineEdit.read(reader);\n\t\tif (!edit) { return undefined; }\n\n\t\tconst tabAction = derived<InlineEditTabAction>(this, reader => {\n\t\t\t/** @description tabAction */\n\t\t\tif (this._editorObs.isFocused.read(reader)) {\n\t\t\t\tif (model.tabShouldJumpToInlineEdit.read(reader)) { return InlineEditTabAction.Jump; }\n\t\t\t\tif (model.tabShouldAcceptInlineEdit.read(reader)) { return InlineEditTabAction.Accept; }\n\t\t\t}\n\t\t\treturn InlineEditTabAction.Inactive;\n\t\t});\n\n\t\treturn new InlineEditModel(model, edit, tabAction);\n\t});\n\n\tprivate readonly _inlineEditHost = derived<InlineEditHost | undefined>(this, reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\treturn new InlineEditHost(model);\n\t});\n\n\tprivate readonly _ghostTextIndicator = derived<GhostTextIndicator | undefined>(this, reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\tconst state = model.inlineCompletionState.read(reader);\n\t\tif (!state) { return undefined; }\n\t\tconst inlineCompletion = state.inlineCompletion;\n\t\tif (!inlineCompletion) { return undefined; }\n\n\t\tif (!inlineCompletion.showInlineEditMenu) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst lineRange = LineRange.ofLength(state.primaryGhostText.lineNumber, 1);\n\n\t\treturn new GhostTextIndicator(this._editor, model, lineRange, inlineCompletion);\n\t});\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _edit: IObservable<InlineEdit | undefined>,\n\t\tprivate readonly _model: IObservable<InlineCompletionsModel | undefined>,\n\t\tprivate readonly _focusIsInMenu: ISettableObservable<boolean>,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\n\t\tthis._register(instantiationService.createInstance(InlineEditsView, this._editor, this._inlineEditHost, this._inlineEditModel, this._ghostTextIndicator, this._focusIsInMenu));\n\t}\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 *--------------------------------------------------------------------------------------------*/\n\nimport { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable } from '../../../../../../base/common/lifecycle.js';\nimport { derived, IObservable, ISettableObservable } from '../../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js';\nimport { ICodeEditor } from '../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor, observableCodeEditor } from '../../../../../browser/observableCodeEditor.js';\nimport { LineRange } from '../../../../../common/core/ranges/lineRange.js';\nimport { Range } from '../../../../../common/core/range.js';\nimport { TextReplacement, TextEdit } from '../../../../../common/core/edits/textEdit.js';\nimport { TextModelText } from '../../../../../common/model/textModelText.js';\nimport { InlineCompletionsModel } from '../../model/inlineCompletionsModel.js';\nimport { InlineEdit } from '../../model/inlineEdit.js';\nimport { InlineEditWithChanges } from './inlineEditWithChanges.js';\nimport { GhostTextIndicator, InlineEditHost, InlineEditModel } from './inlineEditsModel.js';\nimport { InlineEditsView } from './inlineEditsView.js';\nimport { InlineEditTabAction } from './inlineEditsViewInterface.js';\n\nexport class InlineEditsViewAndDiffProducer extends Disposable { // TODO: This class is no longer a diff producer. Rename it or get rid of it\n\tpublic static readonly hot = createHotClass(InlineEditsViewAndDiffProducer);\n\n\tprivate readonly _editorObs: ObservableCodeEditor;\n\n\tprivate readonly _inlineEdit = derived<InlineEditWithChanges | undefined>(this, (reader) => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\tconst inlineEdit = this._edit.read(reader);\n\t\tif (!inlineEdit) { return undefined; }\n\t\tconst textModel = this._editor.getModel();\n\t\tif (!textModel) { return undefined; }\n\n\t\tconst editOffset = model.inlineEditState.get()?.inlineCompletion.updatedEdit;\n\t\tif (!editOffset) { return undefined; }\n\n\t\tconst edits = editOffset.replacements.map(e => {\n\t\t\tconst innerEditRange = Range.fromPositions(\n\t\t\t\ttextModel.getPositionAt(e.replaceRange.start),\n\t\t\t\ttextModel.getPositionAt(e.replaceRange.endExclusive)\n\t\t\t);\n\t\t\treturn new TextReplacement(innerEditRange, e.newText);\n\t\t});\n\n\t\tconst diffEdits = new TextEdit(edits);\n\t\tconst text = new TextModelText(textModel);\n\n\t\treturn new InlineEditWithChanges(text, diffEdits, model.primaryPosition.get(), inlineEdit.commands, inlineEdit.inlineCompletion);\n\t});\n\n\tprivate readonly _inlineEditModel = derived<InlineEditModel | undefined>(this, reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\tconst edit = this._inlineEdit.read(reader);\n\t\tif (!edit) { return undefined; }\n\n\t\tconst tabAction = derived<InlineEditTabAction>(this, reader => {\n\t\t\t/** @description tabAction */\n\t\t\tif (this._editorObs.isFocused.read(reader)) {\n\t\t\t\tif (model.tabShouldJumpToInlineEdit.read(reader)) { return InlineEditTabAction.Jump; }\n\t\t\t\tif (model.tabShouldAcceptInlineEdit.read(reader)) { return InlineEditTabAction.Accept; }\n\t\t\t}\n\t\t\treturn InlineEditTabAction.Inactive;\n\t\t});\n\n\t\treturn new InlineEditModel(model, edit, tabAction);\n\t});\n\n\tprivate readonly _inlineEditHost = derived<InlineEditHost | undefined>(this, reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\treturn new InlineEditHost(model);\n\t});\n\n\tprivate readonly _ghostTextIndicator = derived<GhostTextIndicator | undefined>(this, reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\tconst state = model.inlineCompletionState.read(reader);\n\t\tif (!state) { return undefined; }\n\t\tconst inlineCompletion = state.inlineCompletion;\n\t\tif (!inlineCompletion) { return undefined; }\n\n\t\tif (!inlineCompletion.showInlineEditMenu) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst lineRange = LineRange.ofLength(state.primaryGhostText.lineNumber, 1);\n\n\t\treturn new GhostTextIndicator(this._editor, model, lineRange, inlineCompletion);\n\t});\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _edit: IObservable<InlineEdit | undefined>,\n\t\tprivate readonly _model: IObservable<InlineCompletionsModel | undefined>,\n\t\tprivate readonly _focusIsInMenu: ISettableObservable<boolean>,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\n\t\tthis._register(instantiationService.createInstance(InlineEditsView, this._editor, this._inlineEditHost, this._inlineEditModel, this._ghostTextIndicator, this._focusIsInMenu));\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.ts"],"names":[],"mappings":"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","file":"inlineEditsViewProducer.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 *--------------------------------------------------------------------------------------------*/\n\nimport { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable } from '../../../../../../base/common/lifecycle.js';\nimport { derived, IObservable, ISettableObservable } from '../../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js';\nimport { ICodeEditor } from '../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor, observableCodeEditor } from '../../../../../browser/observableCodeEditor.js';\nimport { LineRange } from '../../../../../common/core/ranges/lineRange.js';\nimport { Range } from '../../../../../common/core/range.js';\nimport { TextReplacement, TextEdit } from '../../../../../common/core/edits/textEdit.js';\nimport { TextModelText } from '../../../../../common/model/textModelText.js';\nimport { InlineCompletionsModel } from '../../model/inlineCompletionsModel.js';\nimport { InlineEdit } from '../../model/inlineEdit.js';\nimport { InlineEditWithChanges } from './inlineEditWithChanges.js';\nimport { GhostTextIndicator, InlineEditHost, InlineEditModel } from './inlineEditsModel.js';\nimport { InlineEditsView } from './inlineEditsView.js';\nimport { InlineEditTabAction } from './inlineEditsViewInterface.js';\n\nexport class InlineEditsViewAndDiffProducer extends Disposable { // TODO: This class is no longer a diff producer. Rename it or get rid of it\n\tpublic static readonly hot = createHotClass(InlineEditsViewAndDiffProducer);\n\n\tprivate readonly _editorObs: ObservableCodeEditor;\n\n\tprivate readonly _inlineEdit = derived<InlineEditWithChanges | undefined>(this, (reader) => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\tconst inlineEdit = this._edit.read(reader);\n\t\tif (!inlineEdit) { return undefined; }\n\t\tconst textModel = this._editor.getModel();\n\t\tif (!textModel) { return undefined; }\n\n\t\tconst editOffset = model.inlineEditState.read(undefined)?.inlineCompletion.updatedEdit;\n\t\tif (!editOffset) { return undefined; }\n\n\t\tconst edits = editOffset.replacements.map(e => {\n\t\t\tconst innerEditRange = Range.fromPositions(\n\t\t\t\ttextModel.getPositionAt(e.replaceRange.start),\n\t\t\t\ttextModel.getPositionAt(e.replaceRange.endExclusive)\n\t\t\t);\n\t\t\treturn new TextReplacement(innerEditRange, e.newText);\n\t\t});\n\n\t\tconst diffEdits = new TextEdit(edits);\n\t\tconst text = new TextModelText(textModel);\n\n\t\treturn new InlineEditWithChanges(text, diffEdits, model.primaryPosition.read(undefined), inlineEdit.commands, inlineEdit.inlineCompletion);\n\t});\n\n\tprivate readonly _inlineEditModel = derived<InlineEditModel | undefined>(this, reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\tconst edit = this._inlineEdit.read(reader);\n\t\tif (!edit) { return undefined; }\n\n\t\tconst tabAction = derived<InlineEditTabAction>(this, reader => {\n\t\t\t/** @description tabAction */\n\t\t\tif (this._editorObs.isFocused.read(reader)) {\n\t\t\t\tif (model.tabShouldJumpToInlineEdit.read(reader)) { return InlineEditTabAction.Jump; }\n\t\t\t\tif (model.tabShouldAcceptInlineEdit.read(reader)) { return InlineEditTabAction.Accept; }\n\t\t\t}\n\t\t\treturn InlineEditTabAction.Inactive;\n\t\t});\n\n\t\treturn new InlineEditModel(model, edit, tabAction);\n\t});\n\n\tprivate readonly _inlineEditHost = derived<InlineEditHost | undefined>(this, reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\treturn new InlineEditHost(model);\n\t});\n\n\tprivate readonly _ghostTextIndicator = derived<GhostTextIndicator | undefined>(this, reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\tconst state = model.inlineCompletionState.read(reader);\n\t\tif (!state) { return undefined; }\n\t\tconst inlineCompletion = state.inlineCompletion;\n\t\tif (!inlineCompletion) { return undefined; }\n\n\t\tif (!inlineCompletion.showInlineEditMenu) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst lineRange = LineRange.ofLength(state.primaryGhostText.lineNumber, 1);\n\n\t\treturn new GhostTextIndicator(this._editor, model, lineRange, inlineCompletion);\n\t});\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _edit: IObservable<InlineEdit | undefined>,\n\t\tprivate readonly _model: IObservable<InlineCompletionsModel | undefined>,\n\t\tprivate readonly _focusIsInMenu: ISettableObservable<boolean>,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\n\t\tthis._register(instantiationService.createInstance(InlineEditsView, this._editor, this._inlineEditHost, this._inlineEditModel, this._ghostTextIndicator, this._focusIsInMenu));\n\t}\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 *--------------------------------------------------------------------------------------------*/\n\nimport { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable } from '../../../../../../base/common/lifecycle.js';\nimport { derived, IObservable, ISettableObservable } from '../../../../../../base/common/observable.js';\nimport { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js';\nimport { ICodeEditor } from '../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor, observableCodeEditor } from '../../../../../browser/observableCodeEditor.js';\nimport { LineRange } from '../../../../../common/core/ranges/lineRange.js';\nimport { Range } from '../../../../../common/core/range.js';\nimport { TextReplacement, TextEdit } from '../../../../../common/core/edits/textEdit.js';\nimport { TextModelText } from '../../../../../common/model/textModelText.js';\nimport { InlineCompletionsModel } from '../../model/inlineCompletionsModel.js';\nimport { InlineEdit } from '../../model/inlineEdit.js';\nimport { InlineEditWithChanges } from './inlineEditWithChanges.js';\nimport { GhostTextIndicator, InlineEditHost, InlineEditModel } from './inlineEditsModel.js';\nimport { InlineEditsView } from './inlineEditsView.js';\nimport { InlineEditTabAction } from './inlineEditsViewInterface.js';\n\nexport class InlineEditsViewAndDiffProducer extends Disposable { // TODO: This class is no longer a diff producer. Rename it or get rid of it\n\tpublic static readonly hot = createHotClass(InlineEditsViewAndDiffProducer);\n\n\tprivate readonly _editorObs: ObservableCodeEditor;\n\n\tprivate readonly _inlineEdit = derived<InlineEditWithChanges | undefined>(this, (reader) => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\tconst inlineEdit = this._edit.read(reader);\n\t\tif (!inlineEdit) { return undefined; }\n\t\tconst textModel = this._editor.getModel();\n\t\tif (!textModel) { return undefined; }\n\n\t\tconst editOffset = model.inlineEditState.read(undefined)?.inlineCompletion.updatedEdit;\n\t\tif (!editOffset) { return undefined; }\n\n\t\tconst edits = editOffset.replacements.map(e => {\n\t\t\tconst innerEditRange = Range.fromPositions(\n\t\t\t\ttextModel.getPositionAt(e.replaceRange.start),\n\t\t\t\ttextModel.getPositionAt(e.replaceRange.endExclusive)\n\t\t\t);\n\t\t\treturn new TextReplacement(innerEditRange, e.newText);\n\t\t});\n\n\t\tconst diffEdits = new TextEdit(edits);\n\t\tconst text = new TextModelText(textModel);\n\n\t\treturn new InlineEditWithChanges(text, diffEdits, model.primaryPosition.read(undefined), inlineEdit.commands, inlineEdit.inlineCompletion);\n\t});\n\n\tprivate readonly _inlineEditModel = derived<InlineEditModel | undefined>(this, reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\tconst edit = this._inlineEdit.read(reader);\n\t\tif (!edit) { return undefined; }\n\n\t\tconst tabAction = derived<InlineEditTabAction>(this, reader => {\n\t\t\t/** @description tabAction */\n\t\t\tif (this._editorObs.isFocused.read(reader)) {\n\t\t\t\tif (model.tabShouldJumpToInlineEdit.read(reader)) { return InlineEditTabAction.Jump; }\n\t\t\t\tif (model.tabShouldAcceptInlineEdit.read(reader)) { return InlineEditTabAction.Accept; }\n\t\t\t}\n\t\t\treturn InlineEditTabAction.Inactive;\n\t\t});\n\n\t\treturn new InlineEditModel(model, edit, tabAction);\n\t});\n\n\tprivate readonly _inlineEditHost = derived<InlineEditHost | undefined>(this, reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\treturn new InlineEditHost(model);\n\t});\n\n\tprivate readonly _ghostTextIndicator = derived<GhostTextIndicator | undefined>(this, reader => {\n\t\tconst model = this._model.read(reader);\n\t\tif (!model) { return undefined; }\n\t\tconst state = model.inlineCompletionState.read(reader);\n\t\tif (!state) { return undefined; }\n\t\tconst inlineCompletion = state.inlineCompletion;\n\t\tif (!inlineCompletion) { return undefined; }\n\n\t\tif (!inlineCompletion.showInlineEditMenu) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst lineRange = LineRange.ofLength(state.primaryGhostText.lineNumber, 1);\n\n\t\treturn new GhostTextIndicator(this._editor, model, lineRange, inlineCompletion);\n\t});\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _edit: IObservable<InlineEdit | undefined>,\n\t\tprivate readonly _model: IObservable<InlineCompletionsModel | undefined>,\n\t\tprivate readonly _focusIsInMenu: ISettableObservable<boolean>,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\n\t\tthis._register(instantiationService.createInstance(InlineEditsView, this._editor, this._inlineEditHost, this._inlineEditModel, this._ghostTextIndicator, this._focusIsInMenu));\n\t}\n}\n"]}
|
|
@@ -27,7 +27,7 @@ export class MiddleScrollController extends Disposable {
|
|
|
27
27
|
}
|
|
28
28
|
const scrollingSession = reader.store.add(disposableObservableValue('scrollingSession', undefined));
|
|
29
29
|
reader.store.add(this._editor.onMouseDown(e => {
|
|
30
|
-
const session = scrollingSession.
|
|
30
|
+
const session = scrollingSession.read(undefined);
|
|
31
31
|
if (session) {
|
|
32
32
|
scrollingSession.set(undefined, undefined);
|
|
33
33
|
return;
|
|
@@ -50,7 +50,7 @@ export class MiddleScrollController extends Disposable {
|
|
|
50
50
|
dispose: () => store.dispose(),
|
|
51
51
|
}, undefined);
|
|
52
52
|
store.add(this._editor.onMouseUp(e => {
|
|
53
|
-
const session = scrollingSession.
|
|
53
|
+
const session = scrollingSession.read(undefined);
|
|
54
54
|
if (session && session.didScroll) {
|
|
55
55
|
// Only cancel session on release if the user scrolled during it
|
|
56
56
|
scrollingSession.set(undefined, undefined);
|
|
@@ -71,7 +71,7 @@ export class MiddleScrollController extends Disposable {
|
|
|
71
71
|
const curTime = Date.now();
|
|
72
72
|
const frameDurationMs = curTime - lastTime;
|
|
73
73
|
lastTime = curTime;
|
|
74
|
-
const mouseDelta = session.mouseDeltaAfterThreshold.
|
|
74
|
+
const mouseDelta = session.mouseDeltaAfterThreshold.read(undefined);
|
|
75
75
|
// scroll by mouse delta every 32ms
|
|
76
76
|
const factor = frameDurationMs / 32;
|
|
77
77
|
const scrollDelta = mouseDelta.scale(factor);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/middleScroll/browser/middleScrollController.ts","vs/editor/contrib/middleScroll/browser/middleScrollController.ts"],"names":[],"mappings":"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","file":"middleScrollController.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 *--------------------------------------------------------------------------------------------*/\n\nimport { getWindow, addDisposableListener, n } from '../../../../base/browser/dom.js';\nimport { Disposable, DisposableStore, IDisposable } from '../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { IEditorContribution, INewScrollPosition } from '../../../common/editorCommon.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { autorun, derived, disposableObservableValue, IObservable, observableValue } from '../../../../base/common/observable.js';\nimport { observableCodeEditor } from '../../../browser/observableCodeEditor.js';\nimport { Point } from '../../../common/core/2d/point.js';\nimport { AnimationFrameScheduler } from '../../inlineCompletions/browser/model/animation.js';\nimport { appendRemoveOnDispose } from '../../../browser/widget/diffEditor/utils.js';\nimport './middleScroll.css';\n\nexport class MiddleScrollController extends Disposable implements IEditorContribution {\n\tpublic static readonly ID = 'editor.contrib.middleScroll';\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor\n\t) {\n\t\tsuper();\n\n\t\tconst obsEditor = observableCodeEditor(this._editor);\n\t\tconst scrollOnMiddleClick = obsEditor.getOption(EditorOption.scrollOnMiddleClick);\n\n\t\tthis._register(autorun(reader => {\n\t\t\tif (!scrollOnMiddleClick.read(reader)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst editorDomNode = obsEditor.domNode.read(reader);\n\t\t\tif (!editorDomNode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst scrollingSession = reader.store.add(\n\t\t\t\tdisposableObservableValue(\n\t\t\t\t\t'scrollingSession',\n\t\t\t\t\tundefined as undefined | { mouseDeltaAfterThreshold: IObservable<Point>; initialMousePosInEditor: Point; didScroll: boolean } & IDisposable\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treader.store.add(this._editor.onMouseDown(e => {\n\t\t\t\tconst session = scrollingSession.get();\n\t\t\t\tif (session) {\n\t\t\t\t\tscrollingSession.set(undefined, undefined);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!e.event.middleButton) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\te.event.stopPropagation();\n\t\t\t\te.event.preventDefault();\n\n\t\t\t\tconst store = new DisposableStore();\n\t\t\t\tconst initialPos = new Point(e.event.posx, e.event.posy);\n\t\t\t\tconst mousePos = observeWindowMousePos(getWindow(editorDomNode), initialPos, store);\n\t\t\t\tconst mouseDeltaAfterThreshold = mousePos.map(v => v.subtract(initialPos).withThreshold(5));\n\n\t\t\t\tconst editorDomNodeRect = editorDomNode.getBoundingClientRect();\n\t\t\t\tconst initialMousePosInEditor = new Point(initialPos.x - editorDomNodeRect.left, initialPos.y - editorDomNodeRect.top);\n\n\t\t\t\tscrollingSession.set({\n\t\t\t\t\tmouseDeltaAfterThreshold,\n\t\t\t\t\tinitialMousePosInEditor,\n\t\t\t\t\tdidScroll: false,\n\t\t\t\t\tdispose: () => store.dispose(),\n\t\t\t\t}, undefined);\n\n\t\t\t\tstore.add(this._editor.onMouseUp(e => {\n\t\t\t\t\tconst session = scrollingSession.get();\n\t\t\t\t\tif (session && session.didScroll) {\n\t\t\t\t\t\t// Only cancel session on release if the user scrolled during it\n\t\t\t\t\t\tscrollingSession.set(undefined, undefined);\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tstore.add(this._editor.onKeyDown(e => {\n\t\t\t\t\tscrollingSession.set(undefined, undefined);\n\t\t\t\t}));\n\t\t\t}));\n\n\t\t\treader.store.add(autorun(reader => {\n\t\t\t\tconst session = scrollingSession.read(reader);\n\t\t\t\tif (!session) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet lastTime = Date.now();\n\t\t\t\treader.store.add(autorun(reader => {\n\t\t\t\t\tAnimationFrameScheduler.instance.invalidateOnNextAnimationFrame(reader);\n\n\t\t\t\t\tconst curTime = Date.now();\n\t\t\t\t\tconst frameDurationMs = curTime - lastTime;\n\t\t\t\t\tlastTime = curTime;\n\n\t\t\t\t\tconst mouseDelta = session.mouseDeltaAfterThreshold.get();\n\n\t\t\t\t\t// scroll by mouse delta every 32ms\n\t\t\t\t\tconst factor = frameDurationMs / 32;\n\t\t\t\t\tconst scrollDelta = mouseDelta.scale(factor);\n\n\t\t\t\t\tconst scrollPos = new Point(this._editor.getScrollLeft(), this._editor.getScrollTop());\n\t\t\t\t\tthis._editor.setScrollPosition(toScrollPosition(scrollPos.add(scrollDelta)));\n\t\t\t\t\tif (!scrollDelta.isZero()) {\n\t\t\t\t\t\tsession.didScroll = true;\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tconst directionAttr = derived(reader => {\n\t\t\t\t\tconst delta = session.mouseDeltaAfterThreshold.read(reader);\n\t\t\t\t\tlet direction: string = '';\n\t\t\t\t\tdirection += (delta.y < 0 ? 'n' : (delta.y > 0 ? 's' : ''));\n\t\t\t\t\tdirection += (delta.x < 0 ? 'w' : (delta.x > 0 ? 'e' : ''));\n\t\t\t\t\treturn direction;\n\t\t\t\t});\n\t\t\t\treader.store.add(autorun(reader => {\n\t\t\t\t\teditorDomNode.setAttribute('data-scroll-direction', directionAttr.read(reader));\n\t\t\t\t}));\n\t\t\t}));\n\n\t\t\tconst dotDomElem = reader.store.add(n.div({\n\t\t\t\tclass: ['scroll-editor-on-middle-click-dot', scrollingSession.map(session => session ? '' : 'hidden')],\n\t\t\t\tstyle: {\n\t\t\t\t\tleft: scrollingSession.map((session) => session ? session.initialMousePosInEditor.x : 0),\n\t\t\t\t\ttop: scrollingSession.map((session) => session ? session.initialMousePosInEditor.y : 0),\n\t\t\t\t}\n\t\t\t}).toDisposableLiveElement());\n\t\t\treader.store.add(appendRemoveOnDispose(editorDomNode, dotDomElem.element));\n\n\t\t\treader.store.add(autorun(reader => {\n\t\t\t\tconst session = scrollingSession.read(reader);\n\t\t\t\teditorDomNode.classList.toggle('scroll-editor-on-middle-click-editor', !!session);\n\t\t\t}));\n\t\t}));\n\t}\n}\n\nfunction observeWindowMousePos(window: Window, initialPos: Point, store: DisposableStore): IObservable<Point> {\n\tconst val = observableValue('pos', initialPos);\n\tstore.add(addDisposableListener(window, 'mousemove', (e: MouseEvent) => {\n\t\tval.set(new Point(e.pageX, e.pageY), undefined);\n\t}));\n\treturn val;\n}\n\nfunction toScrollPosition(p: Point): INewScrollPosition {\n\treturn {\n\t\tscrollLeft: p.x,\n\t\tscrollTop: p.y,\n\t};\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 *--------------------------------------------------------------------------------------------*/\n\nimport { getWindow, addDisposableListener, n } from '../../../../base/browser/dom.js';\nimport { Disposable, DisposableStore, IDisposable } from '../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { IEditorContribution, INewScrollPosition } from '../../../common/editorCommon.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { autorun, derived, disposableObservableValue, IObservable, observableValue } from '../../../../base/common/observable.js';\nimport { observableCodeEditor } from '../../../browser/observableCodeEditor.js';\nimport { Point } from '../../../common/core/2d/point.js';\nimport { AnimationFrameScheduler } from '../../inlineCompletions/browser/model/animation.js';\nimport { appendRemoveOnDispose } from '../../../browser/widget/diffEditor/utils.js';\nimport './middleScroll.css';\n\nexport class MiddleScrollController extends Disposable implements IEditorContribution {\n\tpublic static readonly ID = 'editor.contrib.middleScroll';\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor\n\t) {\n\t\tsuper();\n\n\t\tconst obsEditor = observableCodeEditor(this._editor);\n\t\tconst scrollOnMiddleClick = obsEditor.getOption(EditorOption.scrollOnMiddleClick);\n\n\t\tthis._register(autorun(reader => {\n\t\t\tif (!scrollOnMiddleClick.read(reader)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst editorDomNode = obsEditor.domNode.read(reader);\n\t\t\tif (!editorDomNode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst scrollingSession = reader.store.add(\n\t\t\t\tdisposableObservableValue(\n\t\t\t\t\t'scrollingSession',\n\t\t\t\t\tundefined as undefined | { mouseDeltaAfterThreshold: IObservable<Point>; initialMousePosInEditor: Point; didScroll: boolean } & IDisposable\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treader.store.add(this._editor.onMouseDown(e => {\n\t\t\t\tconst session = scrollingSession.get();\n\t\t\t\tif (session) {\n\t\t\t\t\tscrollingSession.set(undefined, undefined);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!e.event.middleButton) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\te.event.stopPropagation();\n\t\t\t\te.event.preventDefault();\n\n\t\t\t\tconst store = new DisposableStore();\n\t\t\t\tconst initialPos = new Point(e.event.posx, e.event.posy);\n\t\t\t\tconst mousePos = observeWindowMousePos(getWindow(editorDomNode), initialPos, store);\n\t\t\t\tconst mouseDeltaAfterThreshold = mousePos.map(v => v.subtract(initialPos).withThreshold(5));\n\n\t\t\t\tconst editorDomNodeRect = editorDomNode.getBoundingClientRect();\n\t\t\t\tconst initialMousePosInEditor = new Point(initialPos.x - editorDomNodeRect.left, initialPos.y - editorDomNodeRect.top);\n\n\t\t\t\tscrollingSession.set({\n\t\t\t\t\tmouseDeltaAfterThreshold,\n\t\t\t\t\tinitialMousePosInEditor,\n\t\t\t\t\tdidScroll: false,\n\t\t\t\t\tdispose: () => store.dispose(),\n\t\t\t\t}, undefined);\n\n\t\t\t\tstore.add(this._editor.onMouseUp(e => {\n\t\t\t\t\tconst session = scrollingSession.get();\n\t\t\t\t\tif (session && session.didScroll) {\n\t\t\t\t\t\t// Only cancel session on release if the user scrolled during it\n\t\t\t\t\t\tscrollingSession.set(undefined, undefined);\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tstore.add(this._editor.onKeyDown(e => {\n\t\t\t\t\tscrollingSession.set(undefined, undefined);\n\t\t\t\t}));\n\t\t\t}));\n\n\t\t\treader.store.add(autorun(reader => {\n\t\t\t\tconst session = scrollingSession.read(reader);\n\t\t\t\tif (!session) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet lastTime = Date.now();\n\t\t\t\treader.store.add(autorun(reader => {\n\t\t\t\t\tAnimationFrameScheduler.instance.invalidateOnNextAnimationFrame(reader);\n\n\t\t\t\t\tconst curTime = Date.now();\n\t\t\t\t\tconst frameDurationMs = curTime - lastTime;\n\t\t\t\t\tlastTime = curTime;\n\n\t\t\t\t\tconst mouseDelta = session.mouseDeltaAfterThreshold.get();\n\n\t\t\t\t\t// scroll by mouse delta every 32ms\n\t\t\t\t\tconst factor = frameDurationMs / 32;\n\t\t\t\t\tconst scrollDelta = mouseDelta.scale(factor);\n\n\t\t\t\t\tconst scrollPos = new Point(this._editor.getScrollLeft(), this._editor.getScrollTop());\n\t\t\t\t\tthis._editor.setScrollPosition(toScrollPosition(scrollPos.add(scrollDelta)));\n\t\t\t\t\tif (!scrollDelta.isZero()) {\n\t\t\t\t\t\tsession.didScroll = true;\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tconst directionAttr = derived(reader => {\n\t\t\t\t\tconst delta = session.mouseDeltaAfterThreshold.read(reader);\n\t\t\t\t\tlet direction: string = '';\n\t\t\t\t\tdirection += (delta.y < 0 ? 'n' : (delta.y > 0 ? 's' : ''));\n\t\t\t\t\tdirection += (delta.x < 0 ? 'w' : (delta.x > 0 ? 'e' : ''));\n\t\t\t\t\treturn direction;\n\t\t\t\t});\n\t\t\t\treader.store.add(autorun(reader => {\n\t\t\t\t\teditorDomNode.setAttribute('data-scroll-direction', directionAttr.read(reader));\n\t\t\t\t}));\n\t\t\t}));\n\n\t\t\tconst dotDomElem = reader.store.add(n.div({\n\t\t\t\tclass: ['scroll-editor-on-middle-click-dot', scrollingSession.map(session => session ? '' : 'hidden')],\n\t\t\t\tstyle: {\n\t\t\t\t\tleft: scrollingSession.map((session) => session ? session.initialMousePosInEditor.x : 0),\n\t\t\t\t\ttop: scrollingSession.map((session) => session ? session.initialMousePosInEditor.y : 0),\n\t\t\t\t}\n\t\t\t}).toDisposableLiveElement());\n\t\t\treader.store.add(appendRemoveOnDispose(editorDomNode, dotDomElem.element));\n\n\t\t\treader.store.add(autorun(reader => {\n\t\t\t\tconst session = scrollingSession.read(reader);\n\t\t\t\teditorDomNode.classList.toggle('scroll-editor-on-middle-click-editor', !!session);\n\t\t\t}));\n\t\t}));\n\t}\n}\n\nfunction observeWindowMousePos(window: Window, initialPos: Point, store: DisposableStore): IObservable<Point> {\n\tconst val = observableValue('pos', initialPos);\n\tstore.add(addDisposableListener(window, 'mousemove', (e: MouseEvent) => {\n\t\tval.set(new Point(e.pageX, e.pageY), undefined);\n\t}));\n\treturn val;\n}\n\nfunction toScrollPosition(p: Point): INewScrollPosition {\n\treturn {\n\t\tscrollLeft: p.x,\n\t\tscrollTop: p.y,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/middleScroll/browser/middleScrollController.ts","vs/editor/contrib/middleScroll/browser/middleScrollController.ts"],"names":[],"mappings":"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","file":"middleScrollController.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 *--------------------------------------------------------------------------------------------*/\n\nimport { getWindow, addDisposableListener, n } from '../../../../base/browser/dom.js';\nimport { Disposable, DisposableStore, IDisposable } from '../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { IEditorContribution, INewScrollPosition } from '../../../common/editorCommon.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { autorun, derived, disposableObservableValue, IObservable, observableValue } from '../../../../base/common/observable.js';\nimport { observableCodeEditor } from '../../../browser/observableCodeEditor.js';\nimport { Point } from '../../../common/core/2d/point.js';\nimport { AnimationFrameScheduler } from '../../inlineCompletions/browser/model/animation.js';\nimport { appendRemoveOnDispose } from '../../../browser/widget/diffEditor/utils.js';\nimport './middleScroll.css';\n\nexport class MiddleScrollController extends Disposable implements IEditorContribution {\n\tpublic static readonly ID = 'editor.contrib.middleScroll';\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor\n\t) {\n\t\tsuper();\n\n\t\tconst obsEditor = observableCodeEditor(this._editor);\n\t\tconst scrollOnMiddleClick = obsEditor.getOption(EditorOption.scrollOnMiddleClick);\n\n\t\tthis._register(autorun(reader => {\n\t\t\tif (!scrollOnMiddleClick.read(reader)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst editorDomNode = obsEditor.domNode.read(reader);\n\t\t\tif (!editorDomNode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst scrollingSession = reader.store.add(\n\t\t\t\tdisposableObservableValue(\n\t\t\t\t\t'scrollingSession',\n\t\t\t\t\tundefined as undefined | { mouseDeltaAfterThreshold: IObservable<Point>; initialMousePosInEditor: Point; didScroll: boolean } & IDisposable\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treader.store.add(this._editor.onMouseDown(e => {\n\t\t\t\tconst session = scrollingSession.read(undefined);\n\t\t\t\tif (session) {\n\t\t\t\t\tscrollingSession.set(undefined, undefined);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!e.event.middleButton) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\te.event.stopPropagation();\n\t\t\t\te.event.preventDefault();\n\n\t\t\t\tconst store = new DisposableStore();\n\t\t\t\tconst initialPos = new Point(e.event.posx, e.event.posy);\n\t\t\t\tconst mousePos = observeWindowMousePos(getWindow(editorDomNode), initialPos, store);\n\t\t\t\tconst mouseDeltaAfterThreshold = mousePos.map(v => v.subtract(initialPos).withThreshold(5));\n\n\t\t\t\tconst editorDomNodeRect = editorDomNode.getBoundingClientRect();\n\t\t\t\tconst initialMousePosInEditor = new Point(initialPos.x - editorDomNodeRect.left, initialPos.y - editorDomNodeRect.top);\n\n\t\t\t\tscrollingSession.set({\n\t\t\t\t\tmouseDeltaAfterThreshold,\n\t\t\t\t\tinitialMousePosInEditor,\n\t\t\t\t\tdidScroll: false,\n\t\t\t\t\tdispose: () => store.dispose(),\n\t\t\t\t}, undefined);\n\n\t\t\t\tstore.add(this._editor.onMouseUp(e => {\n\t\t\t\t\tconst session = scrollingSession.read(undefined);\n\t\t\t\t\tif (session && session.didScroll) {\n\t\t\t\t\t\t// Only cancel session on release if the user scrolled during it\n\t\t\t\t\t\tscrollingSession.set(undefined, undefined);\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tstore.add(this._editor.onKeyDown(e => {\n\t\t\t\t\tscrollingSession.set(undefined, undefined);\n\t\t\t\t}));\n\t\t\t}));\n\n\t\t\treader.store.add(autorun(reader => {\n\t\t\t\tconst session = scrollingSession.read(reader);\n\t\t\t\tif (!session) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet lastTime = Date.now();\n\t\t\t\treader.store.add(autorun(reader => {\n\t\t\t\t\tAnimationFrameScheduler.instance.invalidateOnNextAnimationFrame(reader);\n\n\t\t\t\t\tconst curTime = Date.now();\n\t\t\t\t\tconst frameDurationMs = curTime - lastTime;\n\t\t\t\t\tlastTime = curTime;\n\n\t\t\t\t\tconst mouseDelta = session.mouseDeltaAfterThreshold.read(undefined);\n\n\t\t\t\t\t// scroll by mouse delta every 32ms\n\t\t\t\t\tconst factor = frameDurationMs / 32;\n\t\t\t\t\tconst scrollDelta = mouseDelta.scale(factor);\n\n\t\t\t\t\tconst scrollPos = new Point(this._editor.getScrollLeft(), this._editor.getScrollTop());\n\t\t\t\t\tthis._editor.setScrollPosition(toScrollPosition(scrollPos.add(scrollDelta)));\n\t\t\t\t\tif (!scrollDelta.isZero()) {\n\t\t\t\t\t\tsession.didScroll = true;\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tconst directionAttr = derived(reader => {\n\t\t\t\t\tconst delta = session.mouseDeltaAfterThreshold.read(reader);\n\t\t\t\t\tlet direction: string = '';\n\t\t\t\t\tdirection += (delta.y < 0 ? 'n' : (delta.y > 0 ? 's' : ''));\n\t\t\t\t\tdirection += (delta.x < 0 ? 'w' : (delta.x > 0 ? 'e' : ''));\n\t\t\t\t\treturn direction;\n\t\t\t\t});\n\t\t\t\treader.store.add(autorun(reader => {\n\t\t\t\t\teditorDomNode.setAttribute('data-scroll-direction', directionAttr.read(reader));\n\t\t\t\t}));\n\t\t\t}));\n\n\t\t\tconst dotDomElem = reader.store.add(n.div({\n\t\t\t\tclass: ['scroll-editor-on-middle-click-dot', scrollingSession.map(session => session ? '' : 'hidden')],\n\t\t\t\tstyle: {\n\t\t\t\t\tleft: scrollingSession.map((session) => session ? session.initialMousePosInEditor.x : 0),\n\t\t\t\t\ttop: scrollingSession.map((session) => session ? session.initialMousePosInEditor.y : 0),\n\t\t\t\t}\n\t\t\t}).toDisposableLiveElement());\n\t\t\treader.store.add(appendRemoveOnDispose(editorDomNode, dotDomElem.element));\n\n\t\t\treader.store.add(autorun(reader => {\n\t\t\t\tconst session = scrollingSession.read(reader);\n\t\t\t\teditorDomNode.classList.toggle('scroll-editor-on-middle-click-editor', !!session);\n\t\t\t}));\n\t\t}));\n\t}\n}\n\nfunction observeWindowMousePos(window: Window, initialPos: Point, store: DisposableStore): IObservable<Point> {\n\tconst val = observableValue('pos', initialPos);\n\tstore.add(addDisposableListener(window, 'mousemove', (e: MouseEvent) => {\n\t\tval.set(new Point(e.pageX, e.pageY), undefined);\n\t}));\n\treturn val;\n}\n\nfunction toScrollPosition(p: Point): INewScrollPosition {\n\treturn {\n\t\tscrollLeft: p.x,\n\t\tscrollTop: p.y,\n\t};\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 *--------------------------------------------------------------------------------------------*/\n\nimport { getWindow, addDisposableListener, n } from '../../../../base/browser/dom.js';\nimport { Disposable, DisposableStore, IDisposable } from '../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { IEditorContribution, INewScrollPosition } from '../../../common/editorCommon.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { autorun, derived, disposableObservableValue, IObservable, observableValue } from '../../../../base/common/observable.js';\nimport { observableCodeEditor } from '../../../browser/observableCodeEditor.js';\nimport { Point } from '../../../common/core/2d/point.js';\nimport { AnimationFrameScheduler } from '../../inlineCompletions/browser/model/animation.js';\nimport { appendRemoveOnDispose } from '../../../browser/widget/diffEditor/utils.js';\nimport './middleScroll.css';\n\nexport class MiddleScrollController extends Disposable implements IEditorContribution {\n\tpublic static readonly ID = 'editor.contrib.middleScroll';\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor\n\t) {\n\t\tsuper();\n\n\t\tconst obsEditor = observableCodeEditor(this._editor);\n\t\tconst scrollOnMiddleClick = obsEditor.getOption(EditorOption.scrollOnMiddleClick);\n\n\t\tthis._register(autorun(reader => {\n\t\t\tif (!scrollOnMiddleClick.read(reader)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst editorDomNode = obsEditor.domNode.read(reader);\n\t\t\tif (!editorDomNode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst scrollingSession = reader.store.add(\n\t\t\t\tdisposableObservableValue(\n\t\t\t\t\t'scrollingSession',\n\t\t\t\t\tundefined as undefined | { mouseDeltaAfterThreshold: IObservable<Point>; initialMousePosInEditor: Point; didScroll: boolean } & IDisposable\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treader.store.add(this._editor.onMouseDown(e => {\n\t\t\t\tconst session = scrollingSession.read(undefined);\n\t\t\t\tif (session) {\n\t\t\t\t\tscrollingSession.set(undefined, undefined);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!e.event.middleButton) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\te.event.stopPropagation();\n\t\t\t\te.event.preventDefault();\n\n\t\t\t\tconst store = new DisposableStore();\n\t\t\t\tconst initialPos = new Point(e.event.posx, e.event.posy);\n\t\t\t\tconst mousePos = observeWindowMousePos(getWindow(editorDomNode), initialPos, store);\n\t\t\t\tconst mouseDeltaAfterThreshold = mousePos.map(v => v.subtract(initialPos).withThreshold(5));\n\n\t\t\t\tconst editorDomNodeRect = editorDomNode.getBoundingClientRect();\n\t\t\t\tconst initialMousePosInEditor = new Point(initialPos.x - editorDomNodeRect.left, initialPos.y - editorDomNodeRect.top);\n\n\t\t\t\tscrollingSession.set({\n\t\t\t\t\tmouseDeltaAfterThreshold,\n\t\t\t\t\tinitialMousePosInEditor,\n\t\t\t\t\tdidScroll: false,\n\t\t\t\t\tdispose: () => store.dispose(),\n\t\t\t\t}, undefined);\n\n\t\t\t\tstore.add(this._editor.onMouseUp(e => {\n\t\t\t\t\tconst session = scrollingSession.read(undefined);\n\t\t\t\t\tif (session && session.didScroll) {\n\t\t\t\t\t\t// Only cancel session on release if the user scrolled during it\n\t\t\t\t\t\tscrollingSession.set(undefined, undefined);\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tstore.add(this._editor.onKeyDown(e => {\n\t\t\t\t\tscrollingSession.set(undefined, undefined);\n\t\t\t\t}));\n\t\t\t}));\n\n\t\t\treader.store.add(autorun(reader => {\n\t\t\t\tconst session = scrollingSession.read(reader);\n\t\t\t\tif (!session) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet lastTime = Date.now();\n\t\t\t\treader.store.add(autorun(reader => {\n\t\t\t\t\tAnimationFrameScheduler.instance.invalidateOnNextAnimationFrame(reader);\n\n\t\t\t\t\tconst curTime = Date.now();\n\t\t\t\t\tconst frameDurationMs = curTime - lastTime;\n\t\t\t\t\tlastTime = curTime;\n\n\t\t\t\t\tconst mouseDelta = session.mouseDeltaAfterThreshold.read(undefined);\n\n\t\t\t\t\t// scroll by mouse delta every 32ms\n\t\t\t\t\tconst factor = frameDurationMs / 32;\n\t\t\t\t\tconst scrollDelta = mouseDelta.scale(factor);\n\n\t\t\t\t\tconst scrollPos = new Point(this._editor.getScrollLeft(), this._editor.getScrollTop());\n\t\t\t\t\tthis._editor.setScrollPosition(toScrollPosition(scrollPos.add(scrollDelta)));\n\t\t\t\t\tif (!scrollDelta.isZero()) {\n\t\t\t\t\t\tsession.didScroll = true;\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tconst directionAttr = derived(reader => {\n\t\t\t\t\tconst delta = session.mouseDeltaAfterThreshold.read(reader);\n\t\t\t\t\tlet direction: string = '';\n\t\t\t\t\tdirection += (delta.y < 0 ? 'n' : (delta.y > 0 ? 's' : ''));\n\t\t\t\t\tdirection += (delta.x < 0 ? 'w' : (delta.x > 0 ? 'e' : ''));\n\t\t\t\t\treturn direction;\n\t\t\t\t});\n\t\t\t\treader.store.add(autorun(reader => {\n\t\t\t\t\teditorDomNode.setAttribute('data-scroll-direction', directionAttr.read(reader));\n\t\t\t\t}));\n\t\t\t}));\n\n\t\t\tconst dotDomElem = reader.store.add(n.div({\n\t\t\t\tclass: ['scroll-editor-on-middle-click-dot', scrollingSession.map(session => session ? '' : 'hidden')],\n\t\t\t\tstyle: {\n\t\t\t\t\tleft: scrollingSession.map((session) => session ? session.initialMousePosInEditor.x : 0),\n\t\t\t\t\ttop: scrollingSession.map((session) => session ? session.initialMousePosInEditor.y : 0),\n\t\t\t\t}\n\t\t\t}).toDisposableLiveElement());\n\t\t\treader.store.add(appendRemoveOnDispose(editorDomNode, dotDomElem.element));\n\n\t\t\treader.store.add(autorun(reader => {\n\t\t\t\tconst session = scrollingSession.read(reader);\n\t\t\t\teditorDomNode.classList.toggle('scroll-editor-on-middle-click-editor', !!session);\n\t\t\t}));\n\t\t}));\n\t}\n}\n\nfunction observeWindowMousePos(window: Window, initialPos: Point, store: DisposableStore): IObservable<Point> {\n\tconst val = observableValue('pos', initialPos);\n\tstore.add(addDisposableListener(window, 'mousemove', (e: MouseEvent) => {\n\t\tval.set(new Point(e.pageX, e.pageY), undefined);\n\t}));\n\treturn val;\n}\n\nfunction toScrollPosition(p: Point): INewScrollPosition {\n\treturn {\n\t\tscrollLeft: p.x,\n\t\tscrollTop: p.y,\n\t};\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "monaco-editor-core",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.54.0-dev-
|
|
4
|
+
"version": "0.54.0-dev-20250921",
|
|
5
5
|
"description": "A browser based code editor",
|
|
6
6
|
"author": "Microsoft Corporation",
|
|
7
7
|
"license": "MIT",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"bugs": {
|
|
15
15
|
"url": "https://github.com/microsoft/vscode/issues"
|
|
16
16
|
},
|
|
17
|
-
"vscodeCommitId": "
|
|
17
|
+
"vscodeCommitId": "588f3b0719fb9996eff31fcbeed5f05c4807ae54",
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"marked": "14.0.0",
|
|
20
20
|
"dompurify": "3.1.7"
|